微信小程序性能优化

    最近了解了一下微信小程序的性能优化,搜集了一些相关的方法,整理出来,和大家共享。

一、控制代码包大小

1. 开启开发者工具中的“上传代码时自动压缩”

2. 及时清理无用代码和资源文件

3. 减少代码包中的资源文件大小和数量

4. 将资源文件放在CDN中

5. 提取公共样式和公共组件

6.代码和图片压缩

二、分包加载

1. 将小程序中不常用的页面放在多个分包内,主包只保留最常用的核心页面。

如启动页和tabBar页面,以及分包都需要用的公共资源脚本。

2. 启动时只加载主包,使用时按需下载分包。

3. 分包预加载——开发者预先配置页面可能会跳转到的分包,框架在进入页面后根据配置进行预加载。

三、运行机制优化

1. 减少立即执行的代码数量

2. 避免高开销和长时间阻塞代码

3. 页面代码都写入页面的生命周期中

4. 做好缓存策略

四、数据管理优化

1. 首屏请求数量尽量少于5个,超过的可以做接口合并,对多次提交的数据可以做合并处理

五、首屏加载优化

1. 提前请求:异步数据请求不需要等待页面渲染完成

2. 利用缓存:利用storage API对异步请求数据进行缓存。二次启动时先利用缓存数据渲染页面,再进行后台静默更新。

3. 避免白屏:先展示页面骨架和基础内容。

4. 及时反馈:即时地对需要用户等待的交互操作给出反馈,避免用户以为小程序无响应。如点赞,先改变按钮样式,再发送异步请求。

六、渲染性能优化

1. 避免不当使用setData

setData是逻辑层向渲染层的通讯,这个通信不是直接给webview,而是通过走了native层

在数据传输时,逻辑层会执行一次JSON.stringify来去除掉setData数据中不可传输的部分,之后将数据发送给视图层。同时,逻辑层还会将setData所设置的数据字段与data合并,使开发者可以用this.data读取到变更后的数据。

(1)使用data在方法间共享数据,data应只包含与页面渲染相关的数据。

(2)只传输页面中发生变化的数据,使用setData的特殊key实现局部更新

(3)DAU年时间爱你内频繁调用setData

(4)对连续的setData调用进行合并

(5)后台页面进行setData,抢占前台页面的渲染资源——页面切入后台的setData调用,延迟到页面重新展示时执行

(6)页面列表:使用懒加载+动态移除非可视区域范围内的内容。

(7)耗时较长的js做到异步

2. 避免不当使用onPsgeScroll

(1)只在必要时监听pageScroll事件

(2)避免在onPageScroll中执行复杂逻辑

(3)避免在onPageScroll中频繁调用setData

(4)避免频繁查询节点信息(SelectQuery),部分场景建议使用节点布局相交状态监听(IntersetctionObserver)替代

3. 使用自定义组件

4. canvas渲染

(1)分层绘制到不同canvas

(2)不变的部分单独绘制到一个canvas,动态生成的绘制到一个canvas,最后合入一个canvas

5. 获取节点位置,用intersectionObject

建议:

1. 使用真机调试

2. 开发工具在network里看不到图片资源的加载。要看图片懒加载,要设置微信开发工具的代理到127.0.0.1,通过charles抓包看到

3. 改造setData,记录性能优化的提升

this._startTime = new Date().getTime();

let fn = this.setData;

this.setData = (obj = {}, handle = '') => {

    let now = new Date().getTime();

    // 上报渲染所需要的时间

    log(now - this._startTime)

    fn.apply(this, [obj, handle]);

};

关注公粽号【CC前端手记】,更多技术干货等你哦~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容

  • 前言 2018年7月份微信公开课上的小程序专场中“小程序性能优化”模块中提到了小程序性能优化方面的知识,其中从启动...
    Gopal阅读 12,801评论 0 8
  • 做性能优化前从微信提供的文档内寻找到的相关建议:1、https://developers.weixin.qq.co...
    砂壶阅读 228评论 0 1
  • 1.小程序起步 (1)点击https://mp.weixin.qq.com/wxopen/waregister?a...
    GXW_Lyon阅读 3,290评论 0 0
  • 填 词 王武雄 谱曲 蔡政勋 编曲 袁少文 我把梦撕了一页 不懂明天该怎么写 冷冷的街冷冷的灯照着谁 一场雨湿了...
    RainyCai阅读 349评论 0 1
  • 一直以來很排斥自由書寫,不知道自由書寫要寫什麼,與其說排斥不如說恐懼,是害怕自己坐在那裡一句話也下不出來吧,宋老師...
    静心_安心阅读 266评论 0 0