?
?
一、是什么
小程序啟動會常常遇到如下圖場景:
?
?
這是因為,小程序首次啟動前,微信會在小程序啟動前為小程序準備好通用的運行環(huán)境,如運行中的線程和一些基礎(chǔ)庫的初始化
然后才開始進入啟動狀態(tài),展示一個固定的啟動界面,界面內(nèi)包含小程序的圖標、名稱和加載提示圖標。此時,微信會在背后完成幾項工作:
- 下載小程序代碼包
- 加載小程序代碼包
- 初始化小程序首頁
下載到的小程序代碼包不是小程序的源代碼,而是編譯、壓縮、打包之后的代碼包
整體流程如下圖:
?
?
二、手段
圍繞上圖小程序的啟動流程, 我們可以從加載、渲染兩個緯度進行切入:
加載
提升體驗最直接的方法是控制小程序包的大小,常見手段有如下:
-
代碼包的體積壓縮可以通過勾選開發(fā)者工具中“上傳代碼時,壓縮代碼”選項
-
及時清理無用的代碼和資源文件
-
減少資源包中的圖片等資源的數(shù)量和大?。ɡ碚撋铣诵con,其他圖片資源從網(wǎng)絡(luò)下載),圖片資源壓縮率有限
并且可以采取分包加載的操作,將用戶訪問率高的頁面放在主包里,將訪問率低的頁面放入子包里,按需加載
當(dāng)用戶點擊到子包的目錄時,還是有一個代碼包下載的過程,這會感覺到明顯的卡頓,所以子包也不建議拆的太大,當(dāng)然我們可以采用子包預(yù)加載技術(shù),并不需要等到用戶點擊到子包頁面后在下載子包
?
?
渲染
關(guān)于微信小程序首屏渲染優(yōu)化的手段如下:
- 請求可以在頁面onLoad就加載,不需要等頁面ready后在異步請求數(shù)據(jù)
- 盡量減少不必要的https請求,可使用 getStorageSync() 及 setStorageSync() 方法將數(shù)據(jù)存儲在本地
- 可以在前置頁面將一些有用的字段帶到當(dāng)前頁,進行首次渲染(列表頁的某些數(shù)據(jù)--> 詳情頁),沒有數(shù)據(jù)的模塊可以進行骨架屏的占位
在微信小程序中,提高頁面的多次渲染效率主要在于正確使用setData
:
- 不要過于頻繁調(diào)用setData,應(yīng)考慮將多次setData合并成一次setData調(diào)用
- 數(shù)據(jù)通信的性能與數(shù)據(jù)量正相關(guān),因而如果有一些數(shù)據(jù)字段不在界面中展示且數(shù)據(jù)結(jié)構(gòu)比較復(fù)雜或包含長字符串,則不應(yīng)使用
setData
來設(shè)置這些數(shù)據(jù) - 與界面渲染無關(guān)的數(shù)據(jù)最好不要設(shè)置在data中,可以考慮設(shè)置在page對象的其他字段下
除此之外,對于一些獨立的模塊我們盡可能抽離出來,這是因為自定義組件的更新并不會影響頁面上其他元素的更新
各個組件也將具有各自獨立的邏輯空間。每個組件都分別擁有自己的獨立的數(shù)據(jù)、setData
調(diào)用
三、總結(jié)
「小程序啟動加載性能」:
- 控制代碼包的大小
- 分包加載
- 首屏體驗(預(yù)請求,利用緩存,避免白屏,及時反饋
「小程序渲染性能」:
- 避免不當(dāng)?shù)氖褂胹etData
- 使用自定義組件
參考文獻
- https://juejin.cn/post/6969779451177484296
本文摘自 :https://www.cnblogs.com/