當(dāng)年的 IE6,在戰(zhàn)場(chǎng)上鏖戰(zhàn)了 10 多個(gè)年頭,依然屹立不到,而現(xiàn)在它在市面上依然有百分之一左右的占有率,這種小強(qiáng)精神不得不讓人肅然起敬?!爸灰脩粼?,我們就得追隨”,這可能是很多公司的服務(wù)理念,因?yàn)橛脩艟褪菨撛诘睦麧?rùn)。正是因?yàn)檫@種服務(wù)理念,成就了 IE6 一個(gè)又一個(gè)的 5 年!然而低版本的 IE 已經(jīng)不僅僅是被前端從業(yè)人員抵制和排斥了,網(wǎng)絡(luò)安全、網(wǎng)絡(luò)運(yùn)維、QA 等等,各個(gè)技術(shù)崗位的人員都開始對(duì)他不屑,它的存在對(duì)工作效率、對(duì)安全、對(duì)很多方面產(chǎn)生了極為不良的影響,甚至影響到一些核心內(nèi)容的推廣,所以 2016 將是低版本 IE 消亡的一年,我也呼吁業(yè)界所有的朋友舉起義旗反抗起來!
慶幸的是,也有人開始吃螃蟹了。從支付寶到天貓到淘寶,阿里巴巴在很多業(yè)務(wù)上已經(jīng)主(bèi)動(dòng)(bī)地放棄了對(duì) IE6 和 IE7 的支持,甚至在統(tǒng)一接入層直接做了 302 跳轉(zhuǎn),提示用戶更新瀏覽器或者引導(dǎo)流量到無(wú)線端。這是一個(gè)好的開始,我們期望這也是業(yè)界達(dá)成共識(shí)的開始!
HTTP 協(xié)議,從 1.0 快速過度到了 1.1,整個(gè)互聯(lián)網(wǎng)的上層建筑變的十分穩(wěn)固。當(dāng)然,我也了解到依然有很多產(chǎn)品還是保持了 1.0 的狀態(tài),據(jù)說電信公司的很多產(chǎn)品就是使用 HTTP/1.0 進(jìn)行通訊,這無(wú)疑讓人驚愕。為了追求更高的效率,減少網(wǎng)絡(luò)傳輸中的無(wú)效流量,W3C 工作組對(duì) HTTP 協(xié)議也做了重新的定義,SPDY 就是 13 年比較火熱的一個(gè)話題,F(xiàn)irefox 和 Chrome 都陸續(xù)開始支持 SPDY,后來在 SPDY 的基礎(chǔ)上做了升級(jí),正式定義為 HTTP/2.0,它的一個(gè)很大特點(diǎn)就是多路復(fù)用,這個(gè)小小的特點(diǎn)改變了我們前端編程的很多優(yōu)化模式,比如
域名不是越多越好,為了能夠充分利用瀏覽器的連接數(shù),我們給 JS 和 CSS 開一個(gè)域名,給 img 開好幾個(gè)域名,網(wǎng)頁(yè)打開的時(shí)候,恰到好處的利用瀏覽器的連接數(shù)上限限制。HTTP/2.0 的多路復(fù)用,就是可以在一個(gè) HTTP 請(qǐng)求中進(jìn)行多個(gè)資源的傳輸,如果域名散列,反而不能利用這個(gè)特性
資源合并沒有任何優(yōu)勢(shì),以前的資源合并是為了減少請(qǐng)求數(shù)以節(jié)約建立 TCP 鏈接的網(wǎng)絡(luò)開銷和頭部傳輸?shù)牧髁块_銷,而在 HTTP/2.0 中,一個(gè) HTTP 請(qǐng)求上完全可以把所有的資源全部推送過來,如果合并了資源,反而不能良好運(yùn)用瀏覽器對(duì)資源的緩存。
當(dāng)然,除了多路復(fù)用,還有很多其他的優(yōu)化,比如傳輸?shù)臄?shù)據(jù)為二進(jìn)制流,HEAD 頭會(huì)被壓縮處理,服務(wù)器可以向客戶端推送內(nèi)容等。在這個(gè)技術(shù)水平指數(shù)式增長(zhǎng)的年代,我相信以后的革新不會(huì)比消滅 IE6 痛苦。
模塊加載上,經(jīng)過了各派系的爭(zhēng)論之后,流傳下來幾個(gè)不錯(cuò)的產(chǎn)品 SeaJS、RequireJS 等,那么那個(gè)模塊加載器將成為工具平臺(tái)中短暫的終點(diǎn)呢?似乎這些都不是。當(dāng)我們按照規(guī)范中的方式進(jìn)行模塊定義,按照規(guī)范中的方式加載定義的模塊時(shí),加載這個(gè)流程就顯得不那么重要了,因?yàn)檫@些事情最后都會(huì)變成 shiv/polyfill 的事情,最終會(huì)變成瀏覽器的固有屬性。
當(dāng)一個(gè)東西在社區(qū)中被暴力追捧的時(shí)候,會(huì)有很多衍生的產(chǎn)品出來,當(dāng)這些衍生物根深蒂固時(shí),可能又會(huì)出現(xiàn)一個(gè)更加原生更加符合開發(fā)習(xí)慣的東西出來。就像 jQuery,我們?yōu)樗帉懙牟寮挥?jì)其數(shù),而在工程化的需求沖擊下,它卻顯得那么的弱不禁風(fēng),因?yàn)樗P(guān)注的點(diǎn)和當(dāng)前的發(fā)展態(tài)勢(shì)不太吻合,僅此而已。
Mobile 的發(fā)展驅(qū)動(dòng)著戰(zhàn)場(chǎng)的轉(zhuǎn)移
記得當(dāng)年拿著 Nokia5230 學(xué)完了 HTML 和 JavaScript 的入門,那屏幕尺寸也就是三個(gè)手指的寬度,緊緊攥在手里看著頁(yè)面混排效果極差的網(wǎng)頁(yè)文檔。
現(xiàn)如今,iPhone 都出到 6s 了,一個(gè)版本一個(gè)尺寸,而且尺寸越來越大,還有各種寬高不一的 Android 機(jī)器,種類繁多。以前的觸屏是電阻式,只支持單點(diǎn)觸碰;而現(xiàn)在電容式的觸屏精度更高,還支持多指觸控,這如絲般順滑的體驗(yàn)在三四年前是完全體會(huì)不到的。曾經(jīng)手機(jī)開一個(gè)程序久了就會(huì)卡,動(dòng)不動(dòng)還會(huì)自動(dòng)重啟;而現(xiàn)在的手機(jī)開一堆程序,完全無(wú)感知,這就是硬件發(fā)展前后的差異。
手機(jī)已經(jīng)成為了人們生活中不可或缺的一部分,甚至成為了一些人身體的一部分,淘寶今年雙十一的數(shù)據(jù)顯示,國(guó)內(nèi)移動(dòng)端的消費(fèi)比例已經(jīng)遠(yuǎn)遠(yuǎn)超過了 PC 端,占比 68%。面對(duì)龐大的用戶,我們的技術(shù)是否做好了充足的準(zhǔn)備,這里還得打一個(gè)問號(hào)。
PC 上那一套經(jīng)驗(yàn)不是直接搬到移動(dòng)端就可以使用了,在移動(dòng)端還需要解決更多的問題:
多分辨率問題,這里涉及到了響應(yīng)式設(shè)計(jì)和前端響應(yīng)式技術(shù)
不同網(wǎng)絡(luò)環(huán)境的網(wǎng)頁(yè)加載優(yōu)化問題,2g/3g/4g/wifi
手指交互帶來的一系列體驗(yàn)問題
為了提升用戶體驗(yàn),將 Web Native 化 —— 類 React 技術(shù)帶來的一系列問題
遠(yuǎn)程調(diào)試問題
移動(dòng)安全問題等等
上面提到的問題很多已經(jīng)有了優(yōu)秀的解決方案,當(dāng)然也有很多未提及的。WebApp 的性能、流暢度和穩(wěn)定性遠(yuǎn)遠(yuǎn)不如原生應(yīng)用,同時(shí)它也無(wú)法良好地運(yùn)用設(shè)備提供的原生功能,這些都是大家轉(zhuǎn)投 Native 的原因。