讀小程式效能優優化實踐-筆記

__Vincent發表於2020-03-17

2020-03-03 09:20:13

優化要點

首屏時間:指使用者開啟頁面到看到第一屏主要內容的時間 渲染時間:指資料首次渲染或引起頁面結構變化的渲染所花費的時間 請求耗時:請求耗時越長,使用者等待的時間越長 CPU 利用率:CPU 利用率達到飽和時容易導致頁面白屏或閃退 網路請求數:短時間發起太多請求會觸發小程式並行請求的數量限制

原文地址

分析工具

1、Performance monitor 它是小程式開發工具內建的一個視覺化監控工具,能夠在 OS 級別上實時記錄系統資源的使用情況。

藉助這個工具,可以監控 cpu 和記憶體佔用量和波動情況,快速定位引起頁面卡頓、機器發燙的模組,進而進行優化

2、測試機

小程式效能分析工具較少,且開發工具的執行效果和真機差異較大,應儘量使用真機定位效能問題。

通常,他們使用 oppo r11 和 iphone 6s plus 等低檔機排查效能問題,再分別挑選使用者數佔比較大的低、中、高檔機器檢驗優化效果

  1. 監控系統

前端進行測速資料採集和上報,再通過監控系統分析頁面的各項指標健康度,瞭解頁面載入耗時情況,對效能優化有較大的參考價值。

實踐 - 效能優化歷程

一、自動分頁渲染

背景: 早期,為縮短白屏時間,購物車使用了分屏渲染技術,把資料分為首屏和非首屏兩部分,首屏渲染完成後再渲染非首屏資料。

分屏渲染最大問題在於,一旦非首屏資料量過大,渲染耗時會很長,讓使用者等待很長時間,最糟的情況可能引起頁面假死,嚴重影響使用者體驗。

隨著業務增長,這個問題帶來的影響已經越來越明顯,因此我們開始考慮改用分頁技術

1、技術選型

難點:

業務複雜。短期內無法實現分頁請求資料,只能實現純前端分頁 資料量大。每個商品不僅包含主品的各項資訊,還可能附加與商品結構類似的贈品、換購商品等 商品列表順序動態改變。例如修改商品促銷,該商品可能由列表第一項變成最後一項,操作完成後還要定位到該商品

觸底載入: 優點:每次只載入一頁,需要時才載入下一頁 缺點:不適合資料結構複雜的場景;不適合列表項順序經常改變的場景。

分屏渲染: 優點:通過首屏渲染資料量的減少,提高首屏渲染的速度,首屏渲染完後緊接著渲染非首屏資料 缺點:當非首屏資料特別大的時候,可能會造成頁面的假死

自動分頁載入:通過raf實現自動分頁載入

2、基本思想

  • 一次性請求全部資料
  • 將資料分成若干頁,每次只渲染一頁
  • 上一頁渲染完成後,自動迴圈渲染下一頁

3、迴圈渲染實現方案對比

  • 通過 setData 遞迴。setData 的回撥函式觸發時立刻渲染下一頁。缺點是會導致 UI 執行緒一直忙碌,使用者操作響應變慢。
  • 利用 setTimeout。setData 回撥函式觸發時,用 setTimeout 延遲一段時間再渲染下一頁。缺點是執行時間不可控。
  • 利用時間分片。通過 requestAnimationFrame(簡稱 raf)實現。呼叫 raf 之後,瀏覽器在準備渲染下一幀前會呼叫你傳給 raf 的回撥函式。按照幀率為 60fps 來計算,每一幀的間隔在 16.6ms 左右。

4、示例

Demo: developers.weixin.qq.com/s/XJEDb3mP7…

原理: 用 raf 代替定時器,每次 setData 完成後,延遲 16.6ms 左右,再渲染下一頁

實現思路:每次 setData 時觸發 wxs 事件監聽器,在 wxs 事件處理函式中呼叫 raf,raf 回撥執行時呼叫邏輯層函式渲染下一頁 實現後左右聯動的滾動怎麼處理? raf流程圖 第一步:AppService - setData觸發WxsPropObserve 第二步:webView - 觸發wxs函式進行初始化 第三步:webView - 執行wsx事件處理函式,呼叫requestAnimationFrame 第四步:webView - requestAnimationFrame回撥執行 第五步:AppService - setData下一頁資料

二、移除scroll-view
三、資料預載入
四、利用快取
五、邏輯後移

相關文章