不需要更多JS框架了

infoq發表於2014-12-31

  現在,JavaScript框架已成為Web專案開發不可或缺的一部分。那是因為很長一段時間以來,各種瀏覽器之間有很大的差別,人們不得不編寫框架對此進行遮蔽。問題在於,各種瀏覽器甚至在基本問題上都難以取得一致,以致框架還要針對瀏覽器該如何工作設計自己的模型,比如如何傳播事件、如何與DOM互動等。於是出現了許多框架,常見的有jQuery、Dojo、MochiKit、Ext JS、AngularJS、Backbone 、Ember、React等。對於這種情況,谷歌工程師Joe Gregorio博文中寫道:

我認為是時候重新考慮JS框架模型了。沒有必要發明另外一種做事方式,只要使用HTML+CSS+JS就行了。

  Joe認為,在過去的十年中,瀏覽器變得更好了,它們對標準的支援也得到了改善,每個版本的功能都比上一個版本強大,而且還支援一些新標準,如HTML ImportsObject.observePromisesHTML 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也許是個不錯的開端。所以,他認為,現在需要三樣東西:

  1. 構建可重用元件的習慣做法和指南;
  2. 可以遵循這些習慣做法編譯HTML、CSS和JS的工具;
  3. 可擴充套件的HTML 5 Polyfill,可以根據需要進行裁剪。

  按照Joe的觀點,將來,開發人員不再需要學習最新的框架,只需要引入能夠滿足特定需求的自定義元素或庫來構建他們的應用。

相關文章