不需要更多JS框架了
現在,JavaScript框架已成為Web專案開發不可或缺的一部分。那是因為很長一段時間以來,各種瀏覽器之間有很大的差別,人們不得不編寫框架對此進行遮蔽。問題在於,各種瀏覽器甚至在基本問題上都難以取得一致,以致框架還要針對瀏覽器該如何工作設計自己的模型,比如如何傳播事件、如何與DOM互動等。於是出現了許多框架,常見的有jQuery、Dojo、MochiKit、Ext JS、AngularJS、Backbone 、Ember、React等。對於這種情況,谷歌工程師Joe Gregorio在博文中寫道:
我認為是時候重新考慮JS框架模型了。沒有必要發明另外一種做事方式,只要使用HTML+CSS+JS就行了。
Joe認為,在過去的十年中,瀏覽器變得更好了,它們對標準的支援也得到了改善,每個版本的功能都比上一個版本強大,而且還支援一些新標準,如HTML Imports、Object.observe、Promises、HTML Templates。而人們之所以還在編寫JS框架,可能是出於慣性和習慣。
在進一步闡述觀點之前,他對Web框架相關的三個概念進行了簡單的區分。Gist是一段簡單的程式碼,庫是一個更大程式碼的集合,而框架不只是庫的簡單集合,它還有自己的事件、DOM互動模型。接下來,他說明了不需要JS框架的原因:
- 框架是對Web平臺的抽象,但由於存在“抽象漏洞(abstraction leak)”,開發人員有時候必須訴諸於HTML+CSS+JS,而且有時候還需要深入研究框架才能找出問題所在。這樣一來,開發人員除了要學習HTML+CSS+JS之外,還需要花費大量的時間學習和研究框架。
- 框架的另一個賣點是可以利用Widgets庫,而實際上,框架並不是必須的,每個Widget都應該是獨立的。語法高亮程式碼編輯器CodeMirror就是一個很好的例子。它用JavaScript構建,可以用在任何地方,而不需要框架。
- 框架提供的資料繫結特性並不是必須的,即使需要,也應該以庫的形式出現,而不是框架。
- 框架最終會發展成為一個筒倉,為A框架建立的Widgets不能用於框架B,這會造成浪費。
Joe提出,後JS框架時代的基本思路是,開發人員應該使用HTML+CSS+JS的功能構建Widgets。這些Widgets相互獨立,可以組合使用。Web元件為這一切提供了可能。HTML Imports、HTML Templates、Custom Elements和Shadow DOM等技術允許開發人員建立可重用的元素和功能。要了解更多資訊,請檢視下列文章和庫:
而使用Web元件首先要有針對相關功能的Polyfills。他特別強調,Polyfills並不是框架,它們沒有引入自己的Web開發模型,而是使HTML 5模型可用。同時,它們也彌補了瀏覽器實現與現有標準在某種程度上的偏離。MDN上經常有一些簡短的、單功能的Polyfills。
構建一個大型的HTML 5 Polyfill庫是有好處的,但更好地是能有一套工具可以根據專案需要生成一個完整HTML 5 Polyfill庫的子集。這樣,開發人員就可以混合和匹配不同來源的Web元件和庫,如X-Tag的<x-foo>和Polymer的<core-bar>。關於如何獲取這些自定義元素,感興趣的讀者可以檢視Brick的GitHub頁面和X-Tag下載頁面。Joe指出,這並不是說建立自定義元素就需要建立自定義的打包器,那不是一個具有可擴充套件性的思路,而是說需要改變開源方式,一個Widget可以不是一個專案,一種更加輕量級的、類似Gist的共享方式可能更合適。在這方面,專案Asset Graph也許是個不錯的開端。所以,他認為,現在需要三樣東西:
- 構建可重用元件的習慣做法和指南;
- 可以遵循這些習慣做法編譯HTML、CSS和JS的工具;
- 可擴充套件的HTML 5 Polyfill,可以根據需要進行裁剪。
按照Joe的觀點,將來,開發人員不再需要學習最新的框架,只需要引入能夠滿足特定需求的自定義元素或庫來構建他們的應用。
相關文章
- 不要再使用JS框架了JS框架
- js 文字框插入JS
- js之搜尋框JS
- js新增刪除文字框JS
- js中文字框的事件JS事件
- JS除錯 - console更多用法JS除錯
- JSP/HTML頁面彈出框JSHTML
- JS 文字輸入框放大鏡效果JS
- JS模擬下拉框selectJS
- Js/JQuery下拉框新增新選項JSjQuery
- JS學習之Bom(系統彈框)JS
- 文字框限制輸入字數的JSJS
- extjs 下拉框增加空選項JS
- 【前端詞典】這些功能其實不需要 JS,CSS 就能搞定前端JSCSS
- 你可能不需要JS!CSS實現一個計時器JSCSS
- 幽默:Github上兩個機器人吵架了Github機器人
- 是時候好好安利下LuLuUI框架了!UI框架
- js動態建立文字框程式碼例項JS
- js實現的警告框例項程式碼JS
- js如何禁用表單中的所有文字框JS
- js實現文字框提示程式碼例項JS
- js讓文字框獲取焦點程式碼JS
- JSTL動態載入單選框--【ssnc】JS
- js實現的驗證表單文字框和密碼框是否為空程式碼JS密碼
- js實現 web頁面的滾動條下拉時載入更多JSWeb
- 直播系統程式碼,選擇分類時,顯示更多下拉框效果的內容
- 原生js 實現輸入框emoji表情釋出JS
- 原生js多選框選中排序及刪除JS排序
- js多個文字框輸入內容同步效果JS
- js選中指定位置文字框文字程式碼JS
- JS 奧義解析(3):模態框的設計JS
- 如何使用angularjs實現文字框設定值AngularJS
- 你不需要VuexVue
- 載入更多
- 更多其他模式模式
- 看了這篇你就會手寫RPC框架了RPC框架
- 全域性腳手架了解一下【fle-cli】
- 騰訊招聘近期上架了19個《寶可夢》相關崗位