原文地址:http://www.heqiangfly.com/2017/08/05/mobile-internet-webapp-vs-nativeapp/
概述
自從Android系統(tǒng)在手機上應用開始,在移動端 Native App 和 Web App之間的戰(zhàn)爭似乎就沒有停止過,Web App 及其各種變體向Native App 發(fā)起了無數(shù)次的沖鋒,但Native App的地位仍然是巋然不動,甚至我們一提起移動互聯(lián)網(wǎng),就專指 Native App。這和 PC 端的景象完全不一樣。隨著輕應用、Hybrid App 、React Native、Weex已經(jīng)微信小程序的出現(xiàn),我們不得不再一次審視這個問題。
WebApp 之所以有資本向 Native App 發(fā)起挑戰(zhàn),那么它自身還是有實力的:
跨平臺:所有系統(tǒng)都能運行,Android、IOS和Web
免安裝:打開瀏覽器,就能使用
快速部署:升級只需在服務(wù)器更新代碼
超鏈接:可以與其他網(wǎng)站互連,可以被搜索引擎檢索
Web在PC端的這些優(yōu)點,使得互聯(lián)網(wǎng)和原生應用分庭抗禮,除了一些工具性的軟件,一個瀏覽器基本可以滿足我們的日常需要:購物,娛樂等等。
但是移動互聯(lián)網(wǎng)畢竟不是PC互聯(lián)網(wǎng),它的一些缺點也限制了它的使用。
體驗差。手機App的操作流暢性,遠超網(wǎng)站。
業(yè)界不支持。所有公司的移動端開發(fā)重點,幾乎都是原生app。
用戶不在乎。大多數(shù)用戶都選擇使用手機app,而不是網(wǎng)站。
那么,之所以業(yè)界不支持和用戶不在乎的原因無非就是性能差,從而造成用戶體驗差。
Web app輸給Native app的地方,不是界面(UI),而是操作性能。
Web基于DOM,而DOM很慢。瀏覽器打開網(wǎng)頁時,需要解析文檔,在內(nèi)存中生成DOM結(jié)構(gòu),如果遇到復雜的文檔,這個過程是很慢的??梢韵胂笠幌?,如果網(wǎng)頁上有上萬個、甚至幾十萬個形狀(不管是圖片或CSS),生成DOM需要多久?更不要提與其中某一個形狀互動了。
DOM拖慢JavaScript。所有的DOM操作都是同步的,會堵塞瀏覽器。JavaScript 操作 DOM 時,必須等前一個操作結(jié)束,才能執(zhí)行后一個操作。只要一個操作有卡頓,整個網(wǎng)頁就會短暫失去響應。瀏覽器重繪網(wǎng)頁的頻率是60FPS(即16毫秒/幀),JavaScript 做不到在16毫秒內(nèi)完成 DOM 操作,因此產(chǎn)生了跳幀。用戶體驗上的不流暢、不連貫就源于此。
雖然現(xiàn)在瀏覽器也支持多線程,比如JS解析在一個線程,渲染在一個線程,但一般是按照先解析再渲染再執(zhí)行 JS 這樣的順序執(zhí)行的。
在Android早期的版本中,webview的性能很差
上面這些原因,對于PC還不至于造成嚴重的性能問題,但是手機的硬件資源相對有限,用戶互動又相對頻繁,結(jié)果跟 Native App 一比,就完全落在了下風。
多線程瀏覽器。每個網(wǎng)頁應該由多個線程進行處理,主線程只負責布局和渲染,而且應該在16毫秒內(nèi)完成。Mozilla 的 Servo 就是這樣一個項目,JS解析,頁面渲染和JS執(zhí)行在三個能并發(fā)執(zhí)行的任務(wù)中進行。Chrome也支持多線程。
多進程瀏覽器。
并發(fā)布局。把頁面中那些不會影響其它元素屬性的獨立部分識別出來,讓它們與剩余部分并行渲染。
DOM 的異步操作。JavaScript 對 DOM 的操作不再是同步的,而是觸發(fā)后,交給Event Loop機制進行監(jiān)聽。
非 DOM 方案。瀏覽器不再將網(wǎng)頁處理成 DOM 結(jié)構(gòu),而是變?yōu)槠渌Y(jié)構(gòu)。React 的 Virtual DOM 方案就是這一類的嘗試,還有更激進的方案,比如用數(shù)據(jù)庫取代 DOM。
采用原生的渲染方案。布局的解析在JS端完成,渲染在Native端完成。
優(yōu)化WebView性能,目前chromium支持硬件渲染。
目前,WebView以及JS引擎的優(yōu)化日新月異,因此,我們相信可以帶動WebApp的崛起。


WebApp的未來
微信小程序,大多數(shù)人誤解的8個問題?這篇文章寫的很好,大家可以閱讀一下。
小程序和直達服務(wù)等形態(tài)應該是移動端App的未來,在移動互聯(lián)網(wǎng)下半場你想打開一個應用,可能就不需要去應用商店下載個App,等下載完安裝后使用,只需要打開微信就行了,找到相關(guān)應用就可以了。
直達服務(wù)依據(jù)手機OS生態(tài),可以做到與手機系統(tǒng)服務(wù)的緊密結(jié)合,小程序依據(jù)微信生態(tài),但絕不是把微信作為一個入口或者是作為一個應用商店這么簡單的事,它的野心是一個OS生態(tài)。
http://www.ruanyifeng.com/blog/2015/02/future-of-dom.html
http://naotu.baidu.com/file/1eb556f3380e8189be859348527ec518?token=a5a049eb4c618e70