新聞中心
運(yùn)行時(shí)性能
setData
setData 是小程序開(kāi)發(fā)中使用最頻繁的接口,也是最容易引發(fā)性能問(wèn)題的接口。在介紹常見(jiàn)的錯(cuò)誤用法前,先簡(jiǎn)單介紹一下 setData 背后的工作原理。

創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比昔陽(yáng)網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式昔陽(yáng)網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋昔陽(yáng)地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴(lài)。
工作原理
小程序的視圖層目前使用 WebView 作為渲染載體,而邏輯層是由獨(dú)立的 JavascriptCore 作為運(yùn)行環(huán)境。在架構(gòu)上,WebView 和 JavascriptCore 都是獨(dú)立的模塊,并不具備數(shù)據(jù)直接共享的通道。當(dāng)前,視圖層和邏輯層的數(shù)據(jù)傳輸,實(shí)際上通過(guò)兩邊提供的 evaluateJavascript 所實(shí)現(xiàn)。即用戶(hù)傳輸?shù)臄?shù)據(jù),需要將其轉(zhuǎn)換為字符串形式傳遞,同時(shí)把轉(zhuǎn)換后的數(shù)據(jù)內(nèi)容拼接成一份 JS 腳本,再通過(guò)執(zhí)行 JS 腳本的形式傳遞到兩邊獨(dú)立環(huán)境。
而 evaluateJavascript 的執(zhí)行會(huì)受很多方面的影響,數(shù)據(jù)到達(dá)視圖層并不是實(shí)時(shí)的。
常見(jiàn)的 setData 操作錯(cuò)誤
1. 頻繁的去 setData
在我們分析過(guò)的一些案例里,部分小程序會(huì)非常頻繁(毫秒級(jí))的去setData,其導(dǎo)致了兩個(gè)后果:
- Android 下用戶(hù)在滑動(dòng)時(shí)會(huì)感覺(jué)到卡頓,操作反饋延遲嚴(yán)重,因?yàn)?JS 線(xiàn)程一直在編譯執(zhí)行渲染,未能及時(shí)將用戶(hù)操作事件傳遞到邏輯層,邏輯層亦無(wú)法及時(shí)將操作處理結(jié)果及時(shí)傳遞到視圖層;
- 渲染有出現(xiàn)延時(shí),由于 WebView 的 JS 線(xiàn)程一直處于忙碌狀態(tài),邏輯層到頁(yè)面層的通信耗時(shí)上升,視圖層收到的數(shù)據(jù)消息時(shí)距離發(fā)出時(shí)間已經(jīng)過(guò)去了幾百毫秒,渲染的結(jié)果并不實(shí)時(shí);
2. 每次 setData 都傳遞大量新數(shù)據(jù)
由setData的底層實(shí)現(xiàn)可知,我們的數(shù)據(jù)傳輸實(shí)際是一次 evaluateJavascript 腳本過(guò)程,當(dāng)數(shù)據(jù)量過(guò)大時(shí)會(huì)增加腳本的編譯執(zhí)行時(shí)間,占用 WebView JS 線(xiàn)程,
3. 后臺(tái)態(tài)頁(yè)面進(jìn)行 setData
當(dāng)頁(yè)面進(jìn)入后臺(tái)態(tài)(用戶(hù)不可見(jiàn)),不應(yīng)該繼續(xù)去進(jìn)行setData,后臺(tái)態(tài)頁(yè)面的渲染用戶(hù)是無(wú)法感受的,另外后臺(tái)態(tài)頁(yè)面去setData也會(huì)搶占前臺(tái)頁(yè)面的執(zhí)行。
圖片資源
目前圖片資源的主要性能問(wèn)題在于大圖片和長(zhǎng)列表圖片上,這兩種情況都有可能導(dǎo)致 iOS 客戶(hù)端內(nèi)存占用上升,從而觸發(fā)系統(tǒng)回收小程序頁(yè)面。
圖片對(duì)內(nèi)存的影響
在 iOS 上,小程序的頁(yè)面是由多個(gè) WKWebView 組成的,在系統(tǒng)內(nèi)存緊張時(shí),會(huì)回收掉一部分 WKWebView。從過(guò)去我們分析的案例來(lái)看,大圖片和長(zhǎng)列表圖片的使用會(huì)引起 WKWebView 的回收。
圖片對(duì)頁(yè)面切換的影響
除了內(nèi)存問(wèn)題外,大圖片也會(huì)造成頁(yè)面切換的卡頓。我們分析過(guò)的案例中,有一部分小程序會(huì)在頁(yè)面中引用大圖片,在頁(yè)面后退切換中會(huì)出現(xiàn)掉幀卡頓的情況。
當(dāng)前我們建議開(kāi)發(fā)者盡量減少使用大圖片資源。
新聞名稱(chēng):創(chuàng)新互聯(lián)小程序教程:微信小程序運(yùn)行時(shí)性能
標(biāo)題來(lái)源:http://www.5511xx.com/article/dpiieip.html


咨詢(xún)
建站咨詢(xún)
