2015年值得關注的幾個WEB技術

jianshu發表於2015-02-27

 HTTP2

  HTTP2在今年中應該就可以定稿,這無疑是web界的一個大事。HTTP2從google的SPDY中借鑑了很多特性,重點改善了之前HTTP協議在當前的網路環境下的效能。簡單地來講,HTTP2更快。為什麼呢,有幾個主要改變:

  • 首先是來自於同一個domain的HTTP請求可以共享同一個TCP連線了,這樣可以很大程度上解決網路延時帶來的效能問題。比如你有很多圖片,現在也不用sprite化了,因為反正它們會用同一個連線的。HTTP2的出現讓之前的很多web前端優化技術可能不再需要了。
  • HTTP2不再是純文字的了,而是二進位制的協議了,這樣協議的解析也更簡單,而傳輸也更快。缺點是debug的時候需要費點功夫了。

  HTTP2還有其他一些特性,例如header壓縮等,大家可以到這裡集中學習一下。或者看看這個FAQ

  Firefox已經開始支援HTTP2,不少瀏覽器包括chrome之前就支援SPDY,估計對HTTP2的支援也會迅速開始,而nginx目前已經支援SPDY,就看什麼時候各大主流web伺服器開始支援HTTP2了。

  一個不太好的現狀就是開發人員可能得面臨HTTP2和HTTP 1.1的同時存在。如果享受HTTP2的好處,同時又能向後相容HTTP1.1,可能是今後開發人員必須長期面臨的問題了。

 ECMAScript6

  我們現在用的javascript(注意,是javascript語言本身,不包含DOM等其他東西)背後的標準是ECMA-262,也叫ECMAScript 5。它的下一個版本ECMAScript 6(簡稱es6),已經基本上快定稿了。這個版本里加入了很多開發過程中需要的一些功能,例如:

  • 類定義語法,包括super,繼承
  • lambda風格的函式定義,=> block level函式定義內的lexical scope的this,預設引數,rest引數等
  • destructuring, 類似於ruby裡的 [a, b, c] = [1, 2, 3],同時也適用於map和set,以及函式引數
  • symbol
  • iterator迭代器和generator,以及新的for of迴圈語法
  • template string,從此可以像在ruby和shell裡一樣使用多行字串
  • module語法,從語言層面上支援了模組
  • 另外還有一系列新東西例如promise,proxy,unicode支援等

  目前chrome和firefox已經開始逐步支援es6。不過你不用等到所有瀏覽器都開始支援es6後才可以使用它,因為目前已經有很多把es6程式碼編譯成es5程式碼的工具,例如babeltraceur等。有很多js的庫已經開始使用es6的各種功能了,其中包括angular 2.0。

  很多人應該在用coffeescript,es6的很多功能彌補了之前es5的缺陷,吸收了很多coffeescript的功能,也許以後我們就可以不用coffeescript了,除非你不喜歡大括號小括號,而喜歡python的語法。不過如果coffeescript不進行升級,估計就享受不到將來es6帶來的好處,也難以適應HTML5時代各種數值計算的需求。

  最後給大家一個比較不錯的es6學習資源,這本書寫得很細,現在還是線上免費的。

 Immutable js and React

  React相信大家已經不陌生了,它是facebook開源的一個前端view框架,這裡之所以提到它是因為它背後的理念所帶動的一些技術。React本身雖然只是一個view框架,但是背後的virtual dom以及隨之帶來的效能優勢是吸引人的地方,另外就是它採用的類似web component的封裝概念。這裡有一個比較js前端框架效能的試驗,雖然不是很準確,但是可以作一個參考。

  React的virtual dom以及它管理前端控制元件資料的方法,和immutable資料結構(immuatble jsremutable)、functional programming是可以很容易結合起來使用的。clojurescript的om框架就是一個例子。想象一下所有的狀態都是不可變的,並且統一資料儲存(flux架構例如marty),每次資料的更新都可以很容易只傳遞diff(event source模式),整個資料在前端的流動都是單向的,不僅變成模型變得簡單,而且因為所有的歷史資料都沒有被實際修改過,所以undo和redo的實現也會變得很容易。

  React通過virtual dom實現了immediate模式的UI程式設計,低成本和快速的UI重新整理也帶了人們更多啟發,並且React這種封裝方式也變得不侷限於dom view了。例如flipboard團隊基於React的封裝風格在canvas上封裝了一層UI,可以實現精細的動畫效果,保證web版和移動版的體驗一致。facebook的React團隊最近在React會議上也釋出了一個可以用js和React API進行原生移動開發的框架

  React也許只是另外一個web view框架,但是我喜歡它給我帶來的一些新想法,這些想法也許可以讓我們在前端開發上更容易些。

 Realtime web(實時web技術)

  現在的web對實時性要求越來越高,這不光是由於現在的技術可以更好地支援實時性,也是由於使用者體驗的驅動。實時性不光是體現在聊天這種需求上;我們在手機上的操作,web瀏覽器上最好能夠實時體現出來,即便我們不重新整理頁面,頁面也應該能夠實時得到更新。

  前端由於HTML5的出現對於實時需求有了更好的技術支援,例如新的WebSocket、WebRTC,long polling以及server push技術。而後端則早就出現了async IO程式設計技術,能夠同時支援大量長連線。但是這些技術的進步從來沒有停止過,這裡給大家隨便介紹幾個。

  pushpin是fanout最近開源的一個高效能實時web後端技術,不同於其它的技術,它是一個proxy,本身不提供API程式設計框架,而是和已有的web API結合起來,讓它們變成支援大量長連線的API。從設計概念上,它把維護大量長連線這個功能和實際的API業務功能分離開來,讓前一個功能通過proxy的形式來實現,因此對實際API的框架和語言沒有要求,如果要支援更多長連線,也可以通過橫向擴充套件這個proxy來實現,而不一定要改動後端API。

  sockjs,是一個websocket的模擬,在支援websocket的瀏覽器上就會使用原生websocket,而在老的瀏覽器上則提供替代技術。但是它不止是一個前端js庫,它也同時提供了後端的程式設計框架,目前支援的語言和框架挺多了。

  websocketd是一個有意思的東西,它可以把任何符合介面的程式程式設計一個websocket後端,你甚至可以用shell來寫API。

  很多的web框架都支援非同步程式設計模式,因而可以支援大量併發長連線。也有類似於meteor這種提供整體解決方案的,還有很多近期的firebase,大家有興趣可以自己去找找看。

相關文章