HTTP2
HTTP2在今年中應(yīng)該就可以定稿瘾敢,這無疑是web界的一個大事蜈敢。HTTP2從google的SPDY中借鑒了很多特性,重點改善了之前HTTP協(xié)議在當前的網(wǎng)絡(luò)環(huán)境下的性能铸董。簡單地來講灭贷,HTTP2更快。為什么呢聪建,有幾個主要改變:
- 首先是來自于同一個domain的HTTP請求可以共享同一個TCP連接了钙畔,這樣可以很大程度上解決網(wǎng)絡(luò)延時帶來的性能問題。比如你有很多圖片妆偏,現(xiàn)在也不用sprite化了刃鳄,因為反正它們會用同一個連接的。HTTP2的出現(xiàn)讓之前的很多web前端優(yōu)化技術(shù)可能不再需要了钱骂。
- HTTP2不再是純文本的了叔锐,而是二進制的協(xié)議了挪鹏,這樣協(xié)議的解析也更簡單,而傳輸也更快愉烙。缺點是debug的時候需要費點功夫了讨盒。
HTTP2還有其他一些特性,例如header壓縮等步责,大家可以到這里集中學(xué)習(xí)一下返顺。或者看看這個FAQ蔓肯。
Firefox已經(jīng)開始支持HTTP2遂鹊,不少瀏覽器包括chrome之前就支持SPDY灾梦,估計對HTTP2的支持也會迅速開始虐先,而nginx目前已經(jīng)支持SPDY,就看什么時候各大主流web服務(wù)器開始支持HTTP2了馁筐。
一個不太好的現(xiàn)狀就是開發(fā)人員可能得面臨HTTP2和HTTP 1.1的同時存在调限。如果享受HTTP2的好處舟陆,同時又能向后兼容HTTP1.1,可能是今后開發(fā)人員必須長期面臨的問題了耻矮。
ECMAScript6
我們現(xiàn)在用的javascript(注意秦躯,是javascript語言本身,不包含DOM等其他東西)背后的標準是ECMA-262裆装,也叫ECMAScript 5踱承。它的下一個版本ECMAScript 6(簡稱es6),已經(jīng)基本上快定稿了米母。這個版本里加入了很多開發(fā)過程中需要的一些功能勾扭,例如:
- 類定義語法,包括super铁瞒,繼承
- lambda風(fēng)格的函數(shù)定義妙色,
=>
block level函數(shù)定義內(nèi)的lexical scope的this
,默認參數(shù)慧耍,rest參數(shù)等 - destructuring, 類似于ruby里的
[a, b, c] = [1, 2, 3]
身辨,同時也適用于map和set,以及函數(shù)參數(shù) - symbol
- iterator迭代器和generator芍碧,以及新的
for of
循環(huán)語法 - template string煌珊,從此可以像在ruby和shell里一樣使用多行字符串
- module語法,從語言層面上支持了模塊
- 另外還有一系列新東西例如promise泌豆,proxy定庵,unicode支持等
目前chrome和firefox已經(jīng)開始逐步支持es6。不過你不用等到所有瀏覽器都開始支持es6后才可以使用它,因為目前已經(jīng)有很多把es6代碼編譯成es5代碼的工具蔬浙,例如babel和traceur等猪落。有很多js的庫已經(jīng)開始使用es6的各種功能了,其中包括angular 2.0畴博。
很多人應(yīng)該在用coffeescript笨忌,es6的很多功能彌補了之前es5的缺陷,吸收了很多coffeescript的功能俱病,也許以后我們就可以不用coffeescript了官疲,除非你不喜歡大括號小括號,而喜歡python的語法亮隙。不過如果coffeescript不進行升級途凫,估計就享受不到將來es6帶來的好處,也難以適應(yīng)HTML5時代各種數(shù)值計算的需求溢吻。
最后給大家一個比較不錯的es6學(xué)習(xí)資源颖榜,這本書寫得很細,現(xiàn)在還是在線免費的煤裙。
Immutable js and React
React相信大家已經(jīng)不陌生了,它是facebook開源的一個前端view框架噪漾,這里之所以提到它是因為它背后的理念所帶動的一些技術(shù)硼砰。React本身雖然只是一個view框架,但是背后的virtual dom以及隨之帶來的性能優(yōu)勢是吸引人的地方欣硼,另外就是它采用的類似web component的封裝概念题翰。這里有一個比較js前端框架性能的試驗,雖然不是很準確诈胜,但是可以作一個參考豹障。
React的virtual dom以及它管理前端控件數(shù)據(jù)的方法,和immutable數(shù)據(jù)結(jié)構(gòu)(immuatble js焦匈, remutable)血公、functional programming是可以很容易結(jié)合起來使用的。clojurescript的om框架就是一個例子缓熟。想象一下所有的狀態(tài)都是不可變的累魔,并且統(tǒng)一數(shù)據(jù)存儲(flux架構(gòu)例如marty),每次數(shù)據(jù)的更新都可以很容易只傳遞diff(event source模式)够滑,整個數(shù)據(jù)在前端的流動都是單向的垦写,不僅變成模型變得簡單,而且因為所有的歷史數(shù)據(jù)都沒有被實際修改過彰触,所以undo和redo的實現(xiàn)也會變得很容易梯投。
React通過virtual dom實現(xiàn)了immediate模式的UI編程,低成本和快速的UI刷新也帶了人們更多啟發(fā),并且React這種封裝方式也變得不局限于dom view了分蓖。例如flipboard團隊基于React的封裝風(fēng)格在canvas上封裝了一層UI尔艇,可以實現(xiàn)精細的動畫效果,保證web版和移動版的體驗一致咆疗。facebook的React團隊最近在React會議上也發(fā)布了一個可以用js和React API進行原生移動開發(fā)的框架漓帚。
React也許只是另外一個web view框架,但是我喜歡它給我?guī)淼囊恍┬孪敕ㄎ绱牛@些想法也許可以讓我們在前端開發(fā)上更容易些尝抖。
Realtime web(實時web技術(shù))
現(xiàn)在的web對實時性要求越來越高,這不光是由于現(xiàn)在的技術(shù)可以更好地支持實時性迅皇,也是由于用戶體驗的驅(qū)動昧辽。實時性不光是體現(xiàn)在聊天這種需求上;我們在手機上的操作登颓,web瀏覽器上最好能夠?qū)崟r體現(xiàn)出來搅荞,即便我們不刷新頁面,頁面也應(yīng)該能夠?qū)崟r得到更新框咙。
前端由于HTML5的出現(xiàn)對于實時需求有了更好的技術(shù)支持咕痛,例如新的WebSocket、WebRTC喇嘱,long polling以及server push技術(shù)茉贡。而后端則早就出現(xiàn)了async IO編程技術(shù),能夠同時支持大量長連接者铜。但是這些技術(shù)的進步從來沒有停止過腔丧,這里給大家隨便介紹幾個。
pushpin是fanout最近開源的一個高性能實時web后端技術(shù)作烟,不同于其它的技術(shù)愉粤,它是一個proxy,本身不提供API編程框架拿撩,而是和已有的web API結(jié)合起來衣厘,讓它們變成支持大量長連接的API。從設(shè)計概念上绷雏,它把維護大量長連接這個功能和實際的API業(yè)務(wù)功能分離開來头滔,讓前一個功能通過proxy的形式來實現(xiàn),因此對實際API的框架和語言沒有要求涎显,如果要支持更多長連接坤检,也可以通過橫向擴展這個proxy來實現(xiàn),而不一定要改動后端API期吓。
sockjs早歇,是一個websocket的模擬倾芝,在支持websocket的瀏覽器上就會使用原生websocket,而在老的瀏覽器上則提供替代技術(shù)箭跳。但是它不止是一個前端js庫晨另,它也同時提供了后端的編程框架,目前支持的語言和框架挺多了谱姓。
websocketd是一個有意思的東西借尿,它可以把任何符合接口的程序編程一個websocket后端,你甚至可以用shell來寫API屉来。
很多的web框架都支持異步編程模式路翻,因而可以支持大量并發(fā)長連接。也有類似于meteor這種提供整體解決方案的茄靠,還有很多近期的firebase茂契,大家有興趣可以自己去找找看。