關(guān)于前端框架的一些觀點(diǎn)
說(shuō)起前端框架,我個(gè)人主張有框架不如無(wú)框架,這個(gè)觀點(diǎn)要先從框架和庫(kù)的區(qū)別說(shuō)起。
我所理解的庫(kù),解決的是代碼或是模塊級(jí)別的復(fù)用或者對(duì)復(fù)雜度的封裝問(wèn)題;而框架,更多的是對(duì)模式級(jí)別的復(fù)用和對(duì)程序組織的規(guī)范,這里的模式是指比如 MVC,為了實(shí)現(xiàn) M 和 V 的解耦,通過(guò) IOC 或是 PubSub 等手段,把丑陋的耦合由經(jīng)常變化的業(yè)務(wù)代碼轉(zhuǎn)移到不經(jīng)常變化的框架內(nèi)部消化。
對(duì)于前端來(lái)說(shuō),在 WebApp 概念興起前,很少能看到所謂的框架,更多的是類似于 jQuery、YUI 的庫(kù),因?yàn)榍岸说囊宦废聛?lái)的發(fā)展歷程和開發(fā)方式的特殊性決定了很難有什么通用的模式能滿足多樣化前端的開發(fā)需要。如果一定要說(shuō),也就是近些年伴隨著 SPA(Single-page application)概念興起而出現(xiàn)的所謂前端 MVC 的一系列衍生模式,但是即便如此,光靠一個(gè)框架還是解決不了什么問(wèn)題。
這里要重點(diǎn)說(shuō)一下 SPA 這個(gè)隨著 AJAX 技術(shù)火起來(lái)的概念,SPA 的好處有哪些相信不用多說(shuō),網(wǎng)上一搜一大堆,接近原生應(yīng)用的表現(xiàn)、和 HTML5 技術(shù)發(fā)展方向向契合等等。SPA 的出現(xiàn)讓前端變得越來(lái)越重,代碼組織、邏輯解耦等后端常常面對(duì)的問(wèn)題也開始在前端出現(xiàn),人們也開始在前端引入 MVC 去應(yīng)對(duì)這樣一些問(wèn)題,確實(shí)很有成效。但是前端變重所面臨的問(wèn)題就僅僅是 JavaScript 層面的 MVC 能解決的嗎?
我們來(lái)看前端開發(fā)的特點(diǎn),HTML + CSS + JavaScript 三種不同類型的語(yǔ)言相互配合實(shí)現(xiàn)需求;再來(lái)看頁(yè)面加載的特點(diǎn),先加載 HTML,再有策略的加載 CSS 和 JS,碰到對(duì)性能要求較高的場(chǎng)景還要考慮分模塊按需加載,在大型 SPA 中還有可能要把頁(yè)面拆成一個(gè)個(gè)組件,每個(gè)組件又包含模板、樣式、腳本,頁(yè)面拆分成組件的策略是什么,組件的按需加載策略又如何,這些顯然不是 MVC 框架擅長(zhǎng)解決的問(wèn)題,這也是 AMD/CMD 等模塊機(jī)制提供者和加載器流行起來(lái)的原因。
近兩年開始流行大前端的概念,我的理解這里的大前端說(shuō)的就是前端的工程化,前端開發(fā)的工程特點(diǎn)開始和后端開發(fā)越來(lái)越像,這也給我們提供了更多的思路,框架解決不了的問(wèn)題,是不是能像后端一樣靠工具解決,過(guò)程中的模式(指類似的、重復(fù)性的工作)是否可以借助于持續(xù)集成工具實(shí)現(xiàn)自動(dòng)化?;氐絼偛耪f(shuō)到的前端組件化問(wèn)題,代碼在開發(fā)環(huán)境應(yīng)該對(duì)開發(fā)人員友好,開發(fā)人員可以分工編寫不同的組件,每個(gè)組件的模板、樣式、腳本代碼可以分別寫在獨(dú)立的文件中,分目錄組織;代碼在發(fā)布環(huán)境應(yīng)該對(duì)用戶友好,組件的代碼應(yīng)該根據(jù)策略打包成一個(gè)或多個(gè)文件并進(jìn)行壓縮,便于按需加載和節(jié)省流量。而這些正應(yīng)該是工具要做的。
說(shuō)到這里,其實(shí)框架對(duì)于程序組織的規(guī)范性上面的作用已經(jīng)不明顯,為了更靈活的模塊化,不如不去用框架,把自定義事件的能力封裝成模塊,PubSub 模式解耦形成約定,用約定和書面規(guī)范代替框架去約束程序的組織,讓開發(fā)人員直面框架的本質(zhì),充分發(fā)揮人的能動(dòng)性,相信這才是更利于人才成長(zhǎng)的實(shí)踐方式。
最后提一下前端基礎(chǔ)架構(gòu)方面的一些思考,不要放大框架的作用,隨著前端的成熟,工程化的特點(diǎn)會(huì)越來(lái)越明顯,框架、庫(kù)、工具、過(guò)程規(guī)范、文檔這些東西的發(fā)展缺一不可,只有系統(tǒng)的結(jié)合才能發(fā)揮出技術(shù)的最大效能,在這樣的平臺(tái)上去實(shí)踐、去積累,人才能更全面的發(fā)展。
歡迎微博 @Hinc 討論。
P.S. 上述觀點(diǎn)有一定的適用場(chǎng)景,對(duì)于比如 HTML5 游戲之類的場(chǎng)景不太適用,請(qǐng)不要斷章取義、生搬硬套。















 
 
 


 
 
 
 