現代前端網站開發

現代化網站由於在強調與使用者互動,功能多,其開發複雜度跟過去比起來提升非常多,網站前端(Web Front End)和後端(Web Back End)的開發工具、程式語言和程式框架的功能和種類都非常多,加上要跨瀏覽器、跨平台相容的要求下還有技術變化的快速,對網站開發工程師的挑戰也越來越多,其開發方式也和過去有非常大的不同,除了需要各自分工之外,熟悉工具的使用才能大大減少開發、維護上的成本。
過去這幾年,網站開發不管是前端或是後端,就像是工業革命一樣,各種框架、套件如雨後春筍般出現,隨然隨著技術與工具的進步,可以大大的協助工程師開發,但由於在網站複雜的大大提升,所以其實開發工作並不會比較輕鬆,例如在前端部分,一開始只需要懂HTML、CSS和Javascript就已經足夠,到後來需要再多掌握幾個函式庫,例如jQuery、ExtJS等等,到現在的Angular、Bootstrap、Vue、React、Babel等等的框架或函式庫,都要有一定程度的了解,否則在開發複雜應用的網站上,會出現一定的瓶頸。
在現代網站開發技術或框架上,React.js可以說是代表,它是Facebook在2013年開放出來的一個Javascipt函式庫,它讓工程師可以更模組化的操作網頁元素,尤其Virtual DOM可以讓網頁在描繪時更有效率,在Virtual DOM的出現之前,只要網頁上某個元素被插入、刪除或是內容更新,都會整個重新描繪,而這也是整個網頁最占效能的部分,如果該網站需要大量操作網頁元素,將造成非常大的效能支出,而Virtual DOM的架構與DOM非常接近,但它可以將對網頁的變化,先集中起來,再一次更新到網頁,這樣便可以大大提升網頁的重繪效率。
一般開發網站時,我們會強調將HTML(資料)、CSS(樣式)和Javascript(邏輯)這三個部分分開,讓程式碼較乾淨且易於維護,而React開發方式則打破了這項傳統,將這三個部分全部在Javascript裡面進行操作。
除了React之外,其它重要的技術還有:
JavaScript
前端網站的開發基礎,也是唯一一個所有瀏覽器都可以執行的程式語言,並且它是前端開發的支柱,其標準是EMCAScript 5,在學習其他框架或函式庫之前,必須先熟練它。
ES6
EMCAScript 6的簡稱,Javascript語言的擴展,各大瀏覽器正在實現對ES6的支援,但到現在為止,尚未完全支援,因此許多語法上無法直接在瀏覽器上使用。但透過轉譯器的使用,你現在就可以開始使用ES6來編寫程式,轉譯器,如Babel,可以將ES6程式碼轉譯為ES5程式碼,雖然ES6有許多新語法更好用,但因為尚未定案,仍然有可能被修改,目前ES6支援的狀況可以參考:https://kangax.github.io/compat-table/es6/
Babel
目前最流行的ES6到ES5轉譯器之一,Facebook的React推薦使用它來做轉譯,連官網的教學範例都是使用它,此外,它不僅僅是ES6轉譯器,還是JSX轉譯器。
JSX
JSX(Javascript with XML)並不是一種程式語言,也不是框架或函式庫,而是一種語法糖(Syntatic Sugar),一種語法類似XML的ECMAScript語法擴充。在JSX裡,HTML元素和程式碼有緊密的關係,這和過去強調將HTML、JavaScript分離的觀念非常不同,一般在開發React理會頻繁使用JSX,當然也可以選擇不要使用,而使用純Javascript來開發React,但使用JSX開發React元件(Component)時,將會覺得有JSX的美好。
Node.js
Node.js是一個伺服器端平台,讓工程是可以使用JavaScript語言來開發網站後端。雖然node.js是用在後端,但是它內建的許多工具都被使用在前端開發上,所以即使是前端網站開發,也有很大機會使用到node.js。
npm
npm(Node Package Manager)是node.js下的套件管理工具。在npm尚有需多前人開發好的套件,許多網站開發用到的功能,都已經有人開發好了,讓你可以直接使用,不需要重新開發,在這裏,我們可以透過npm來安裝React套件和Babel套件。
Grunt或Gulp
這兩個是在Node.js平台上最為流行的工作執行工具,用來讓你自動化許多前端工作,如用來檢查程式碼和最佳化程式碼的Lint、合併、縮減、部署以及其它功能。
Bower
用於前端函式庫的一個套件管理工具,例如要增加jQuery到你的專案中透過它將會非常容易。
WebPack或Browserify
這兩個都是最流行的模組打包工具,它們可以直接取得Javascript原始碼,找出正確的依賴關系,將網站需要用的資源(如圖片、聲音等等),自動執行轉譯Javascript,將建構一個網站的動作都自動化後建立整個可以發佈的網站。
Flux或Redux
Flux實現了單向流的應用程式資料架構,也是由Facebook開發,和React專注於View的部份,以互補的方式相輔相成。而由Dan Abramov所開發的Redux被 React開發社群認為是Flux-like更優雅的一套函式庫,也是目前主流用來搭配React的狀態(State)管理工具。讓我們在開發更複雜的網頁應用程式時可以更方便管理狀態(state)。
Immutable.js
Immutable.js這個函式庫用來建立不可變得資料結構,用來解決在建立React開發上的某些時候的性能問題,也就是不可變(immutable)的資料結構讓狀態可預測性更高,因此提升程式的效能。
Angular 2
Angular 2也是JavaScript中最流行的MVC框架之一的下一個版本,常用來和React.js比較。這版被完全重新設計過,其學習曲線較為陡峭,需要花較多時間,但也是一個非常優的現代化網站開發框架。
TypeScript
TypeScript是一種由微軟開發的自由和開放原始碼的程式開發語言。它是JavaScript的一個嚴格超集合,並添加了可選的靜態型別和類別基礎的物件導向程式設計的特性。其設計目標是用來開發大型應用程式,然後轉譯成JavaScript。由於TypeScript是JavaScript的嚴格超集,任何現有的JavaScript程式都是合法的TypeScript程式。