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