得物App內h5的項目都是經過webview打開。對於webview的性能你們廣泛的印象就是打開速度比native慢。css
對於SPA應用,一個用戶打開webveiw訪問h5須要通過以下過程:html
從程序執行的角度,咱們來看一個沒有優化過的webview加載h5的過程:
壓縮每個階段的時間,是性能優化的關鍵點。node
結合App的webview咱們採用了兩個優化手段:ios
以下圖秒開率有15%的提升。web
SPA會場下頁面渲染整個流程:
SSR會場下頁面渲染整個流程:
SPA與SSR在FMP上的表現,中間的凹槽是線上切到SPA的狀況,可見SSR對於秒開有平均15%的提高。
瀏覽器
分析頁面的html,咱們發現一些js腳本 block了html的加載。緩存
減小三個block的script的加載。性能優化
webp可以達到90%壓縮率,其重要性不言而喻。框架
現有方案在ssr直出的組件沒有webp的能力。即便端上支持webp也加載了jpg或者png的圖片,致使資源太大。而在ios的14版本後ios有了支持webp的能力,諮詢了IOS同窗,14版本的佔比至少百分之七八十。koa
node端直出全部圖片都爲webp。在端上作一次webp的check,不支持則降級到原jpg或者png。
不支持webp的手機:注意頭圖。
從圖片源頭上解決圖片過大的問題,使用了開源方案imagemin/imagemin。
會場傳圖統一收口交互,避免同一張圖屢次上傳的狀況。平均壓縮率60%。
組件按需加載。
結論:Lighthouse 相應提高了 20%+。
優化前數據:
第一期優化後:
結論:transferred 提高了 20%。
第一期優化根據各類數據彙總,性能總體提高 10%。
有些組件在node端沒有直出,且沒有圖片懶加載的能力。
node端直出組件,且屏外的圖片使用懶加載的功能。
涉及以一鍵領券,分會場入口等組件
前:
後:
通過一系列的努力,App端優化與h5端的優化。咱們把頁面的秒開率提升到了40%左右。
文|問問en
關注得物技術,攜手走向技術的雲端