# 按需注入和用時注入
在小程序啟動的過程中,除了代碼包下載以外,代碼注入也是一個主要的耗時環(huán)節(jié)。注入代碼量的大小與內(nèi)存占用與注入耗時正相關(guān)。
利用「按需注入」和「用時注入」的特性,可以優(yōu)化代碼注入環(huán)節(jié)的耗時和內(nèi)存占用。
# 按需注入
基礎(chǔ)庫 2.11.1 及以上版本支持,2.11.1 以下兼容但無優(yōu)化效果。 工具調(diào)試請使用 1.05.2111300 及以上版本,基礎(chǔ)庫選 2.20.1 及以上版本。
通常情況下,在小程序啟動時,啟動頁面依賴的所有代碼包(主包、分包、插件包、擴展庫等)的所有 JS 代碼會全部合并注入,包括其他未訪問的頁面以及未用到自定義組件,同時所有頁面和自定義組件的 JS 代碼會被立刻執(zhí)行。這造成很多沒有使用的代碼在小程序運行環(huán)境中注入執(zhí)行,影響注入耗時和內(nèi)存占用。
自基礎(chǔ)庫版本 2.11.1 起,小程序支持通過配置,有選擇地注入必要的代碼,以降低小程序的啟動時間和運行時內(nèi)存。
{
"lazyCodeLoading": "requiredComponents"
}
# 注意事項
- 啟用按需注入后,小程序僅注入當前訪問頁面所需的自定義組件和頁面代碼。未訪問的頁面、當前頁面未聲明的自定義組件不會被加載和初始化,對應代碼文件將不被執(zhí)行。請開發(fā)者修改配置后務(wù)必確認小程序的表現(xiàn)正常。
- 啟用按需注入后,頁面 JSON 配置中定義的所有組件和
app.json中usingComponents配置的全局自定義組件,都會被視為頁面的依賴并進行注入和加載。建議開發(fā)者及時移除 JSON 中未使用自定義組件的聲明,并盡量避免在全局聲明使用率低的自定義組件,否則可能會影響按需注入的效果。 - 插件包和擴展庫目前暫不支持按需注入。如果需要實現(xiàn)插件按需加載,可以考慮將插件置于一個分包,并通過「分包異步化」的形式異步引入。
# 用時注入
基礎(chǔ)庫 2.11.2 及以上版本支持,2.11.2 以下和未配置的效果相同。 工具調(diào)試請使用 1.05.2111300 及以上版本,基礎(chǔ)庫選 2.20.1 及以上版本。
在開啟「按需注入」特性的前提下,「用時注入」可以指定一部分自定義組件不在小程序啟動時注入,而是在真正渲染的時候才進行注入。
在已經(jīng)指定 lazyCodeLoading 為 requiredComponents 的情況下,為自定義組件配置 占位組件,組件就會自動被視為用時注入組件:
- 每個頁面內(nèi),第一次渲染該組件前,該組件都不會被注入;
- 每個頁面內(nèi),第一次渲染該組件時,該組件會被渲染為其對應的占位組件,渲染流程結(jié)束后開始注入;
- 注入結(jié)束后,占位組件被替換回對應組件。