微信小程式 SetData
阿新 • • 發佈:2022-05-21
1.前言
為什麼要理解setData?
setData 是小程式開發中使用最頻繁、也是最容易引發效能問題的介面.
2.setData的作用
setData函式用於將資料從邏輯層傳送到檢視層(非同步),同時改變對應的 this.data的值(同步)
圖例說明:
3.setData原理
因為小程式的檢視層(WebView)與邏輯層(JavascriptCore)是兩個獨立的模組,分屬不同的執行緒/程序,不能進行直接通訊,所以需要setData進行通訊,setdata不是直接把資料給檢視層,而是給中間系統層(Native),然後再到試圖層,如圖示:
在資料傳輸時,邏輯層會將setData資料進行序列化並且去除掉不可傳輸的部分,之後將資料傳送給檢視層。
同時,邏輯層還會將setData所設定的資料欄位與data合併,使開發者可以用this.data讀取到變更後的資料。
4.使用建議
1.僅在需要進行頁面內容更新時呼叫 setData(減少開銷)
2.對連續的 setData 調用盡可能的進行合併(減少通訊的次數,每一次的通訊都是一次開銷)
3.setData 應只傳入發生變化的欄位(資料太大會增加通訊時間,而且單次資料量有大小限制)
4.避免setData的呼叫過於頻繁(setData介面的呼叫涉及邏輯層與渲染層間的執行緒通訊,通訊過於頻繁可能導致處理佇列阻塞,介面渲染不及時而導致卡頓,應避免無用的頻繁呼叫)
具體可參考文件:合理使用setData