# 獲取更新性能統(tǒng)計信息
基礎(chǔ)庫 2.12.0 開始支持,低版本需做兼容處理。
如果想要知道 setData 引發(fā)界面更新的開銷,可以使用更新性能統(tǒng)計信息接口。它將返回每次更新中主要更新步驟發(fā)生的時間戳,可以用來大體上估計自定義組件(或頁面)更新性能。例如:
Component({
attached() { // 調(diào)用時機不能早于 attached
this.setUpdatePerformanceListener({withDataPaths: true}, (res) => {
console.log(res)
})
}
})
setUpdatePerformanceListener 方法接受一個 options 對象和回調(diào)函數(shù) listener 作為參數(shù)。
其中, options 對象包含以下字段:
| 字段 | 類型 | 說明 |
|---|---|---|
| withDataPaths | Boolean | 是否返回變更的 data 字段信息 |
listeners 返回攜帶一個 res 對象,表示一次由 setData 引發(fā)的 更新過程 。根據(jù) setData 調(diào)用時機的不同,更新過程大體可以分為三類:
- 基本更新 ,它有一個唯一的
updateProcessId; - 子更新 ,它是另一個基本更新的一個子步驟,也有唯一的
updateProcessId,但還有一個parentUpdateProcessId; - 被合并更新 ,它被合并到了另一個基本更新或子更新過程中,無法被獨立統(tǒng)計。
每次成功的 setData 調(diào)用都會產(chǎn)生一個更新過程,使得 listener 回調(diào)一次。不過 setData 究竟觸發(fā)了哪類更新過程很難判斷,更新性能好壞與其具體是哪類更新也沒有必然聯(lián)系,只是它們的返回值參數(shù)有所不同。
res 中包含以下字段:
| 字段 | 類型 | 說明 |
|---|---|---|
| updateProcessId | Number | 此次更新過程的 ID |
| parentUpdateProcessId | Number | 對于子更新,返回它所屬的更新過程 ID |
| isMergedUpdate | Boolean | 是否是被合并更新,如果是,則 updateProcessId 表示被合并到的更新過程 ID |
| dataPaths | Array | 此次更新的 data 字段信息,只有 withDataPaths 設(shè)為 true 時才會返回 |
| pendingStartTimestamp | Number | 此次更新進入等待隊列時的時間戳 |
| updateStartTimestamp | Number | 更新運算開始時的時間戳 |
| updateEndTimestamp | Number | 更新運算結(jié)束時的時間戳 |
說明:
setUpdatePerformanceListener只會激活當(dāng)前組件或頁面的統(tǒng)計,parentUpdateProcessId有可能是其他組件或者頁面的更新過程 ID 而未被統(tǒng)計回調(diào),如果想要知道頁面內(nèi)所有的更新過程,需要在所有組件中都調(diào)用setUpdatePerformanceListener;- 統(tǒng)計本身有一點點開銷,如果想要禁用統(tǒng)計,調(diào)用
setUpdatePerformanceListener時傳入第二個參數(shù)listener為null即可。