牛和人交videos欧美3d,日韩精人妻无码一区二区三区,与隔壁清纯人妻肉干到爽,曰批全过程免费视频观看软件下载

四度碼科技一家專(zhuān)注微信小程序開(kāi)發(fā)定制制作服務(wù)的公司

一站式開(kāi)發(fā)服務(wù)商

提供設計,開(kāi)發(fā),測試,售后服務(wù)一條龍服務(wù)

133-4760-7931
公司資訊
您的位置: 主頁(yè) > 新聞中心 > 公司資訊 >

小程序性能優(yōu)化的幾個(gè)建議

發(fā)布時(shí)間:2020-08-22 11:09:59瀏覽次數:
    關(guān)于微信小程序性能優(yōu)化的一些方法,和大家分享一波~
優(yōu)化建議
 
    01
 
    控制代碼包大小
 
    1.開(kāi)啟開(kāi)發(fā)者工具中的“上傳代碼時(shí)自動(dòng)壓縮”
 
    2.及時(shí)清理無(wú)用代碼和資源文件
 
    3.減少代碼包中的資源文件大小和數量
 
    4.將資源文件放在CDN中
 
    5.提取公共樣式和公共組件
 
    6.代碼和圖片壓縮
 
    02
 
    分包加載
 
    1.將小程序中不常用的頁(yè)面放在多個(gè)分包內,主包只保留最常用的核心頁(yè)面。
 
    如啟動(dòng)頁(yè)和tabBar頁(yè)面,以及分包都需要用的公共資源腳本。
 
    2.啟動(dòng)時(shí)只加載主包,使用時(shí)按需下載分包。
 
    3.分包預加載——開(kāi)發(fā)者預先配置頁(yè)面可能會(huì )跳轉到的分包,框架在進(jìn)入頁(yè)面后根據配置進(jìn)行預加載。
 
    03
 
    運行機制優(yōu)化
 
    1.減少立即執行的代碼數量
 
    2.避免高開(kāi)銷(xiāo)和長(cháng)時(shí)間阻塞代碼
 
    3.頁(yè)面代碼都寫(xiě)入頁(yè)面的生命周期中
 
    4.做好緩存策略
 
    04
 
    數據管理優(yōu)化
 
    首屏請求數量盡量少于5個(gè),超過(guò)的可以做接口合并,對多次提交的數據可以做合并處理
 
    05
 
    首屏加載優(yōu)化
 
    1.提前請求:異步數據請求不需要等待頁(yè)面渲染完成
 
    2.利用緩存:利用storageAPI對異步請求數據進(jìn)行緩存。二次啟動(dòng)時(shí)先利用緩存數據渲染頁(yè)面,再進(jìn)行后臺靜默更新。
 
    3.避免白屏:先展示頁(yè)面骨架和基礎內容。
 
    4.及時(shí)反饋:即時(shí)地對需要用戶(hù)等待的交互操作給出反饋,避免用戶(hù)以為小程序無(wú)響應。如點(diǎn)贊,先改變按鈕樣式,再發(fā)送異步請求。
 
    06
 
    渲染性能優(yōu)化
 
    1.避免不當使用setData
 
    setData是邏輯層向渲染層的通訊,這個(gè)通信不是直接給webview,而是通過(guò)走了native層。在數據傳輸時(shí),邏輯層會(huì )執行一次JSON.stringify來(lái)去除掉setData數據中不可傳輸的部分,之后將數據發(fā)送給視圖層。
 
    同時(shí),邏輯層還會(huì )將setData所設置的數據字段與data合并,使開(kāi)發(fā)者可以用this.data讀取到變更后的數據。
 
    (1)使用data在方法間共享數據,data應只包含與頁(yè)面渲染相關(guān)的數據。
 
    (2)只傳輸頁(yè)面中發(fā)生變化的數據,使用setData的特殊key實(shí)現局部更新
 
    (3)短時(shí)間內頻繁調用setData
 
    (4)對連續的setData調用進(jìn)行合并
 
    (5)后臺頁(yè)面進(jìn)行setData,搶占前臺頁(yè)面的渲染資源——頁(yè)面切入后臺的setData調用,延遲到頁(yè)面重新展示時(shí)執行
 
    (6)頁(yè)面列表:使用懶加載+動(dòng)態(tài)移除非可視區域范圍內的內容。
 
    (7)耗時(shí)較長(cháng)的js做到異步
 
    2.避免不當使用onPsgeScroll
 
    (1)只在必要時(shí)監聽(tīng)pageScroll事件
 
    (2)避免在onPageScroll中執行復雜邏輯
 
    (3)避免在onPageScroll中頻繁調用setData
 
    (4)避免頻繁查詢(xún)節點(diǎn)信息(SelectQuery),部分場(chǎng)景建議使用節點(diǎn)布局相交狀態(tài)監聽(tīng)(IntersetctionObserver)替代
 
    3.使用自定義組件
 
    4.canvas渲染
 
    (1)分層繪制到不同canvas
 
    (2)不變的部分單獨繪制到一個(gè)canvas,動(dòng)態(tài)生成的繪制到一個(gè)canvas,最后合入一個(gè)canvas
 
    5.獲取節點(diǎn)位置,用intersectionObject
 
    08
 
    建議
 
    1.使用真機調試
 
    2.開(kāi)發(fā)工具在network里看不到圖片資源的加載。要看圖片懶加載,要設置微信開(kāi)發(fā)工具的代理到127.0.0.1,通過(guò)charles抓包看到
 
    3.改造setData,記錄性能優(yōu)化的提升
 
    this._startTime=newDate().getTime();letfn=this.setData;this.setData=(obj={},handle='')=>{letnow=newDate().getTime();//上報渲染所需要的時(shí)間log(now-this._startTime)fn.apply(this,[obj,handle]);};
 
    用這些方法,我的小程序瘦了很多。你也可以試試~
133-4760-7931