框架與純JS的差別

這是個很多人討論的議題,不少人認為JS框架/程式庫根本不需要,也有人認為可以利用web component來處理這些問題,也有其他的解決方案,如:htmxhyperscript

其實,這些JS框架/程式庫(如:react、vue)也都是JS,所以,簡單的說,JS當然可以解決我們所有的問題。當我們的程式很小,互動很簡單的時候,基本的JS其實就夠了,但是,當我們的前端越來越複雜,很多的問題(元件化、狀態管理)就必須去處理,這些框架/程式庫其實就是現成的解決方案,善用這些框架/程式庫其實就是善用前人的智慧。

以畫面更新為例,很多人的寫法就是讓整頁重整,當頁面很簡單的時候,問題不大,但是,當畫面很複雜的時候,整頁更新就會花很多時間,萬一不小心還會造成無窮無盡的畫面更新。所以,有些框架,例如(如:react、vue)就會利用Virtual DOM的概念,根據Virtual DOM與DOM之間的差異進行更新,就可以提升畫面更新的效率。

以狀態管理為例,最簡單的就是單一頁面資料內容的管理,這些內容的異動通常會與畫面的更新相關,如果每動一個變數就更新整頁的內容,那就會花很多時間,所以,最好的方式是監控相關的變數,更新Virtual DOM,最後再去更新DOM(畫面)。

更複雜的情況會是我們可能需要在頁面與頁面間共享資料,例如登入的狀態、使用者的角色。以PHP為例,伺服器端可以使用session,瀏覽器端就是使用cookie,然而,傳統的cookie有資安上的疑慮,所以,現在通常會使用localStorage來儲存資料。

但是,當我們要儲存的狀態很多很複雜,這些儲存方式就會遇到一些問題,以localStorage為例,我們曾經有兩位同學在多個頁面都使用data為localStorage的變數名稱,結果,一直會有莫名其妙的資料遺失問題,後來才發現,是因為不小心用了同樣的名稱。

HTML不像PHP可以在一個php檔include另一個php檔,HTML裡只能引用外部CSS及外部JS,所以,很多的JS框架就提供元件的概念,讓我們可以組合不同的元件。或許各位會聽過可以利用iFrame在一個頁面中包含其他的頁面,然而,這樣的寫法問題很多,所以,現在已經很少網頁會採用iFrame了。

Vue體驗

接下來我們就來體驗一下Vue.js,首先,打開Vue的官網,並點選「Tutorial」。

Untitled