W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
基礎(chǔ)庫 2.11.1 開始支持,低版本需做兼容處理。
小程序頁面的初始化分為兩個部分。
在啟動頁面時,尤其是小程序冷啟動、進入第一個頁面時,邏輯層初始化的時間較長。在頁面初始化過程中,用戶將看到小程序的標(biāo)準(zhǔn)載入畫面(冷啟動時)或可能看到輕微的白屏現(xiàn)象(頁面跳轉(zhuǎn)過程中)。
啟用初始渲染緩存,可以使視圖層不需要等待邏輯層初始化完畢,而直接提前將頁面初始 data 的渲染結(jié)果展示給用戶,這可以使得頁面對用戶可見的時間大大提前。它的工作原理如下:
利用初始渲染緩存,可以:
在初始渲染緩存階段中,復(fù)雜組件不能被展示或不能響應(yīng)交互。
目前支持的內(nèi)置組件:
自定義組件本身可以被展示(但它們里面用到的內(nèi)置組件也遵循上述限制)。
若想啟用初始渲染緩存,最簡單的方法是在頁面的 json 文件中添加配置項 "initialRenderingCache": "static" :
{
"initialRenderingCache": "static"
}
如果想要對所有頁面啟用,可以在 app.json 的 window 配置段中添加這個配置:
{
"window": {
"initialRenderingCache": "static"
}
}
添加這個配置項之后,在手機中預(yù)覽小程序首頁,然后殺死小程序再次進入,就會通過初始渲染緩存來渲染首頁。
注意:這種情況下,初始渲染緩存記錄的是頁面 data 應(yīng)用在頁面 WXML 上的結(jié)果,不包含任何 setData 的結(jié)果。
例如,如果想要在頁面中展示出“正在加載”幾個字,這幾個字受到 loading 數(shù)據(jù)字段控制:
<view wx:if="{{loading}}">正在加載</view>
這種情況下, loading 應(yīng)當(dāng)在 data 中指定為 true ,如:
// 正確的做法
Page({
data: {
loading: true
}
})
而不能通過 setData 將 loading 置為 true :
// 錯誤的做法!不要這么做!
Page({
data: {},
onLoad: function() {
this.setData({
loading: true
})
}
})
換而言之,這種做法只包含頁面 data 的渲染結(jié)果,即頁面的純靜態(tài)成分。
有些場景中,只是頁面 data 的渲染結(jié)果會比較局限。有時會想要額外展示一些可變的內(nèi)容,如展示的廣告圖片 URL 等。
這種情況下可以使用“動態(tài)”初始渲染緩存的方式。首先,配置 "initialRenderingCache": "dynamic" :
{
"initialRenderingCache": "dynamic"
}
此時,初始渲染緩存不會被自動啟用,還需要在頁面中調(diào)用 this.setInitialRenderingCache(dynamicData) 才能啟用。其中, dynamicData 是一組數(shù)據(jù),與 data 一起參與頁面 WXML 渲染。
Page({
data: {
loading: true
},
onReady: function() {
this.setInitialRenderingCache({
loadingHint: '正在加載' // 這一部分?jǐn)?shù)據(jù)將被應(yīng)用于界面上,相當(dāng)于在初始 data 基礎(chǔ)上額外進行一次 setData
})
}
})
<view wx:if="{{loading}}">{{loadingHint}}</view>
從原理上說,在動態(tài)生成初始渲染緩存的方式下,頁面會在后臺使用動態(tài)數(shù)據(jù)重新渲染一次,因而開銷相對較大。因而要盡量避免頻繁調(diào)用 this.setInitialRenderingCache ,如果在一個頁面內(nèi)多次調(diào)用,僅最后一次調(diào)用生效。
注意:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: