前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微信小程序性能优化总结

微信小程序性能优化总结

作者头像
xiangzhihong
发布于 2022-07-30 02:45:05
发布于 2022-07-30 02:45:05
2.4K00
代码可运行
举报
文章被收录于专栏:向治洪向治洪
运行总次数:0
代码可运行

微信小程序进行性能优化,主要可以从两大方面进行分析:性能扫描工具和代码优化。

一、使用性能扫描工具

微信小程序提供了一个“体验评分”的工具插件,可以使用它获得微信小程序的一些性能数据和明显的缺陷,进而根据报告进行相应的优化。

同时,为了方便开发者能够及时发现小程序的体验问题,从开发者工具 1.02.1811150 版本起支持体验评分的 “自动运行” 功能。一旦发现体验分数低于 70 分时,系统会在 console 面板打印一个 warning 信息提示开发者。

然后,根据效果图的分析报告,查看需要优化的细项,并根据说明一一进行优化。常见的优化点包括:

  • 应避免出现任何 JavaScript 异常:因为出现JavaScript异常可能导致小程序的交互无法进行下去;
  • 所有请求的耗时不应太久:因为请求耗时太长会让用户一直等待甚至离开,应当优化好服务器处理时间、减小回包大小,让请求快速响应;
  • 避免将未绑定在 WXML 的变量传入setData:因为setData操作会引起框架处理一些渲染界面相关的工作,而一个未绑定的变量意味着与界面渲染无关,传入setData会造成不必要的性能消耗;
  • 避免渲染界面的耗时过长:因为渲染界面的耗时过长会让用户觉得卡顿,体验较差;
  • 避免执行脚本的耗时过长:因为执行脚本的耗时过长会让用户觉得卡顿,体验较差,出现这一情况时,需要确认并优化脚本的逻辑;
  • 网络请求使用 HTTPS:因为使用 HTTPS,可以让你的小程序更加安全,而 HTTP 是明文传输的,存在可能被篡改内容的风险;
  • 避免过大的 WXML 节点数目:建议一个页面使用少于 1000 个 WXML 节点,节点树深度少于 30 层,子节点数不大于 60 个。一个太大的 WXML 节点树会增加内存的使用,样式重排时间也会更长;
  • 及时回收定时器:因为定时器是全局的,并不是跟页面绑定的,所以当页面因后退被销毁时,定时器应注意手动回收;

除此之外,微信小程序官方还给出了如下一些要求:

  • 代码包不包含插件大小超过 1.5 M:小程序代码包单个包大小限制为2M。因此我们建议开发者在开发时,如果遇到单包体积大于1.5M的情况,可以采取分包的方式,把部分代码拆分到分包去,降低单个包的体积,提升小程序的加载速度
  • 引用插件大小超过 200 K:小程序插件的大小是会算进小程序代码包2M体积限制中的。因此当我们发现开发者引用的插件体积大于200K时,会对开发者予以提示,避免出现上传阶段提示代码包体积超限。
  • 图片和音频资源大小超过 200 K:小程序代码包里可以存放一些必要的静态资源(例如tabbar的icon等),不过静态资源体积过大也会影响小程序代码包加载速度。因此我们建议图片、音频等静态资源体积大小超过200K时,将它们上传到CDN,用URL引入会是个更好的选择。
  • 主包存在仅被其他分包依赖的JS:当主包里存在一些JS文件只会被分包使用(而主包自己不使用)时,我们建议把这些JS文件从主包中拆分出去,放到对应的分包里,从而优化主包的加载速度。
  • 主包存在仅被其他分包依赖的组件:当主包里存在一些组件只会被分包使用(而主包自己不使用)时,我们建议把这些组件从主包拆分出去,并且可以使用 分包异步化 这个特性加载这些组件,从而优化主包的加载速度。
  • 存在无使用的插件:如果有无使用的插件,请将其从 app.json 中去除。不然它会占用代码包体积,也会延迟代码包加载的时间。
  • 存在无使用的组件:如果在对应页面JSONusingComponents 里声明的组件但是没有使用,请将其从 usingComponents 里去除。

二、其他常见优化

2.1 启动优化

针对启动性能优化,可以从以下几个方面着手: 控制代码包大小

  • 开启开发者工具中"上传代码时自动压缩";
  • 及时清理无用代码和资源文件;
  • 减少代码包中的图片等资源文件的大小和数量;

分包加载

  • 将小程序中不经常使用的页面放到多个分包内,主包是保留最常用的核心页面;启动时只加载主包,使用时按需下载分包;
  • 使用分包加载会出现用户首次进入分包页面时需要进行分包的下载和注入,造成页面切换的延迟;开发者可使用分包预下载,预先配置页面可能会跳转到的分包,框架在进入页面后根据配置进行预下载;

独立分包

  • 从分包页面启动时,必需要先依赖于主包的下载和注入,启动速度受主包限制;使用独立分包,从独立分包页面启动,只下载和注入分包就可以打开页面;

2.2 首屏加载的体验优化建议

  • 提前请求:异步数据请求不需要等待页面渲染完成(onLoad 阶段就可以发起请求,不用等ready);
  • 利用缓存:利用storage API对异步请求数据进行缓存,二次启动时先利用缓存数据渲染页面,而下拉刷新或者缓存过期才更新数据;
  • 避免白屏:先展示页面骨架和基础内容;
  • 及时反馈:即时地对需要用户等待的交互操作给出反馈,避免用户以为小程序无响应;

2.3 避免不当使用setData

当setData的数据过大时,通讯方面会带来巨大的消耗,大部分人面对长列表滚动的时候,一开始的处理方式都是这样的,如果数据不多,只有几页可能不会太暴露问题;但当页数过多,几十页甚至上百页的情况,list的数据会越来越大,每次setData的数据就会越来越多,因而每次页面重新渲染的节点就会越来越多,从而导致滚动到后面,加载越来越慢。另外,由于小程序的视图渲染层和数据逻辑处理层是分开的,不是在同一个线程上面的,从用户触发页面交互,到处理数据逻辑,最后呈现页面,数据到视图是需要传输的,因而小程序本身对数据大小也有限制,不能超过1M。

2.4 存在短时间内发起太多图片请求

一次性发送了过多的图片请求,导致了同一时间发起了过多的http请求,http连接是非常耗时的,尤其是一次性发起这么多,并且一次性发起的http链接也是有限制的,比如chrome浏览器就限制一次性最多6个。所以在渲染页面时,不在视图范围内的图片不要不加载,只有元素出现在视图范围内了才渲染。

要实现这一效果,我们可以通过 getBoundingClientRect() 获取元素的位置,然后与页面滚动位置进行比较,如果出现在视图内就加载显示图片。具体实现上,我们可以失业微信提供的 IntersectionObserver 对象,IntersectionObserver 对象可以用于推断某些节点是否可以被用户看见、有多大比例可以被用户看见,示例如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let data = list;
<img class="img-{{index}}" wx:for="{{data}}"></img>
data.forEach((item,index)=>{
  this.createIntersectionObserver().relativeToViewport.observe(`.img-${index}`,res=>{
    if (res.intersectionRatio > 0){
      this.setData({
        item.imgShow:true
      })
    }
  })
})

2.5 在列表渲染中巧用key值

在列表渲染过程中,巧用key值能够提升列表渲染性能。在小程序开发中,页面的渲染主要分为以下几步:

  1. 将wxml结构的文档构建成一个vdom虚拟数。
  2. 页面有新的交互,产生新的vdom数,然后与旧数进行比较,看哪里有变化了,做对应的修改(删除、移动、更新值)等操作。
  3. 最后再将vdom渲染成真实的页面结构。

key值的作用就在第二步,当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。

2.6 避免使用onPageScroll不当

不正确的使用onPageScroll,可能会带来重复渲染的问题。因此,使用onPageScroll时,应注意以下几点:

  • 只在必要的时候监听pageScroll事件;
  • 避免在onPageScroll中执行复杂逻辑;
  • 避免在onPageScroll中频繁调用setData;
  • 避免频繁查询节点信息(SelectQuery);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
小程序性能优化总结
在小程序启动时,微信会在背后完成几项工作:下载小程序代码包、加载小程序代码包、初始化小程序首页。 初始化小程序环境是微信环境做的工作,我们只需要控制代码包大小,和通过一些相关的缓存策略控制,和资源控制,逻辑控制,分包加载控制来进行启动加载优化。
张炳
2019/08/02
8060
京喜小程序的高性能打造之路
京喜小程序自去年双十一上线微信购物一级入口后,时刻迎接着亿级用户量的挑战,细微的体验细节都有可能被无限放大,为此,“极致的页面性能”、“友好的产品体验” 和 “稳定的系统服务” 成为了我们开发团队的最基本执行原则。
用户6835371
2021/06/01
7790
京喜小程序的高性能打造之路
腾讯课堂小程序性能极致优化——综合篇
导语 | 如果你的小程序也遇到了性能问题,我们的实践经验也许可以给到你启发,我们从小程序的启动、加载到交互都进行了探索。顺便说一句,这篇文章在腾讯内部曾被小程序技术总监打赏。 1. 缘起 事情,要从一个周末惬意的下午开始说起…… 那天,手机突然被唤醒,弹出多条微信消息。原来是这周末正在校园推广的活动群发来的,想起之前大家有条不紊的开发进度,和产品沟通的友好过程,应该是活动反响不错。 现实是残酷的: “我们的小程序打开慢成狗!” “这个 loading 加载的过程也太久了!” “滚动加载有点卡,而且很容易报错
用户1097444
2022/06/29
1K0
腾讯课堂小程序性能极致优化——综合篇
存量用户运营企业微信的“用户端小程序”优化方案
企业微信端产品“C端用户小程序”,是一款服务于vivo线下代理、门店和导购,帮助导购连接用户,快速与用户进行沟通的工具。基于“C端小程序”的PU/UV量较为庞大,为了更加极致的用户体验,所以提升小程序性能优化是必然。
2020labs小助手
2021/03/16
8610
【腾讯医药微信小程序性能优化案例】从0.9秒到0.5秒,原来这么简单!
邓炜豪 腾讯医疗健康前端开发工程师,腾讯前端监控 Oteam PMC 成员,主要负责小程序监控系统的设计和开发。 听说代码无终点,坚持跑,就不会输。 前端性能优化的道路也没有终点, 只要坚持监控并优化,永远有下降的 “0.1s”。 背景 腾讯医药是一个专注为 C端用户提供方便、快捷、安全的在线购药、送药到家服务的医药电商平台。目‍‍‍前已引进诸多品牌/连锁药房,支持 B2C、O2O 购药模式,药品及各类健康品丰富多样、价格实惠、品质保障,专业的服务质量,为广大消费者的购药、用药保驾护航。  近期,在腾讯医药
腾讯云可观测平台
2022/09/02
1.8K0
【腾讯医药微信小程序性能优化案例】从0.9秒到0.5秒,原来这么简单!
京东京喜小程序的高性能打造之路
京喜小程序自去年双十一上线微信购物一级入口后,时刻迎接着亿级用户量的挑战,细微的体验细节都有可能被无限放大,为此,“极致的页面性能”、“友好的产品体验” 和 “稳定的系统服务” 成为了我们开发团队的最基本执行原则。
winty
2020/04/01
2.6K0
惊爆!掌握这些小程序性能优化技巧,让你的小程序速度飙升 10 倍
嘿,各位程序猿小伙伴们!是不是经常被自家小程序的 “蜗牛速度” 搞得焦头烂额?用户在那边疯狂吐槽,咱在这边急得抓耳挠腮。别担心,今天小编就来给大家放大招啦,只要掌握了这些小程序性能优化技巧,让你的小程序速度飙升 10 倍都不在话下!接下来,就跟着小编一起进入神奇的性能优化世界吧!
小白的大数据之旅
2025/04/27
1180
惊爆!掌握这些小程序性能优化技巧,让你的小程序速度飙升 10 倍
干货|小程序性能优化的几点实践技巧
“ 我们都知道,性能的好坏直接影响用户的体验。本文首先论述下如何评判一个小程序页面的性能情况,之后通过具体的案例重点讲解下几点实践技巧,最后再讲讲key值在渲染一个列表时发挥了一个怎么样的作用,以此来论述为啥key值对性能提升有帮助。 ” 实践技巧一 1 存在setData的数据过大 我们的功能里面有个滚动到底部加载的功能,优化前我们的做法是这样的: <!--只阐述逻辑,非真实代码--> // 1: 初始一个list,存储列表数据data = startList// 2: 监听
腾讯NEXT学位
2019/08/27
1.5K0
干货|小程序性能优化的几点实践技巧
# 小程序性能优化和异常监控
小程序的渲染层和逻辑层分别由两个线程管理,两个线程的通信由微信客户端(Native)做中转。
九旬
2023/10/17
3530
微信小程序性能监控方式
1) 用户首次访问或小程序同步更新时,命中环境预加载 2) 用户非首次访问,命中环境预加载 3) 用户非首次访问,未命中环境预加载
BLUSE
2022/11/14
2.1K0
呕心沥血整理!小程序性能优化的独家实战技巧
嘿,各位程序猿小伙伴们!今天小编我可是带着超级干货来啦!咱们都知道,在开发支付宝小程序的时候,性能优化那可是相当重要的一环。一个性能不佳的小程序,就好比一辆破破烂烂还老是熄火的老爷车,用户体验简直差到爆!所以呢,今天小编就把自己呕心沥血整理的支付宝小程序性能优化独家实战技巧分享给大家,希望能让咱们开发的小程序像超级跑车一样风驰电掣!
小白的大数据之旅
2025/05/01
940
呕心沥血整理!小程序性能优化的独家实战技巧
日访问百万级微信小程序优化技巧总结
之前负责的锡慧在线小程序是一款公益性质在线教育类小程序,因疫情影响导致流量暴增,日访问过百万
薛定喵君
2020/02/17
2.7K0
通过这些手段,99%小程序性能问题都可以解决!!
小程序的冷启动速度是用户体验的关键之一,因此,小程序开发者通常需要采取一些措施来加速小程序的冷启动速度。在本文中,我们将介绍一些常用的方法来解决小程序冷启动加速的问题。
老码小张
2023/03/06
2.4K0
通过这些手段,99%小程序性能问题都可以解决!!
微信小程序性能极致优化——独立分包和性能测速上报
当前环境下,微信小程序成为了重要的活动运营渠道。为了满足页面高效率在小程序端、H5、App 端上线和迭代的需求,大量运营和活动页面在小程序端选择了 Webview 中内嵌 H5 的形式。因此,腾讯课堂小程序实现了 common-act 页面(common-act为小程序页面名称)作为通用的小程序 Webview 承载页。
童欧巴
2021/08/20
1.8K1
微信小程序性能极致优化——独立分包和性能测速上报
聊一聊微信小程序性能优化
微信小程序的开发除了完成必要的产品功能外,性能也是非常重要的。 我们应该如何衡量小程序的性能呢?怎样的小程序才算是一个高性能小程序呢?
epoos
2022/06/06
4.4K0
聊一聊微信小程序性能优化
微信小程序入门与进阶
小时光茶社 导语:本文章的主要目的就是针对两类人: 一类是没有做过小程序开发,但是想了解小程序整个开发过程及环境和开发中需要注意哪些问题的人,你适合读本文的入门篇,可以帮你节省至少几天的时间。 另一类人就是你写过小程序,但是想对小程序更深入的了解,并想对你的小程序进行一定程度上的优化,那你更适合阅读本文进阶篇,本文给出了一些优化的方向及方法,可供参考。 好了,现在让我们来开启小程序的前生今世探险之旅吧。 目录 (一) 入门     a) 运行环境     b) 开发姿势     c)  一个DEMO  
小时光
2018/09/04
11.6K7
微信小程序入门与进阶
[猫头虎分享21天微信小程序基础入门教程]第9天:小程序的调试与优化
大家好,我是猫头虎,一名全栈软件工程师。今天我们继续微信小程序的学习,重点了解如何调试小程序并进行性能优化。掌握这些技能可以帮助你提高小程序的运行效率和用户体验。🚀
猫头虎
2024/05/26
1750
赶紧收藏!小程序开发中鲜为人知的代码优化技巧,效率提升必备
嘿,各位小程序开发的小伙伴们!是不是在开发小程序的时候,总感觉自己的代码就像那老旧的自行车,吭哧吭哧跑得慢,还老是出问题?别愁啦,今天小编就带着一堆超实用的小程序开发代码优化技巧来拯救你们啦!这些可都是鲜为人知的小秘密哦,掌握了它们,你的开发效率直接起飞,代码也会变得超级丝滑。准备好你的小本本,咱们马上发车!
小白的大数据之旅
2025/03/21
1410
腾讯课堂小程序开发实践与思考
本文由 InfoQ 整理自腾讯 CSIG 在线教育部前端高级开发工程师陈天忱在 GMTC 全球大前端技术大会(深圳站)2021 的分享《腾讯课堂小程序开发实践》。
深度学习与Python
2022/04/19
1.6K0
腾讯课堂小程序开发实践与思考
微信活动小程序性能优化实践
作者:louiszhai,腾讯增值服务项目管理员工 背景 为了满足日益复杂的小程序活动需求,腾讯增值服务项目组开发了一款Ulink活动小程序,该小程序以游戏社交圈为依托,提供游戏玩家基本的社交功能,如发帖、评论、点赞、分享等。 为了支持这些功能,进行了一系列的性能优化改进。Ulink活动小程序共有5个tab,分别提供关注人的feeds信息、所有用户的精品分享,图文发布入口、消息及个人页,如下所示。 开发过程中折腾了各种各样的挑战和难题。其中以性能问题最为棘手,主要有体现在以下几个方面: 小程序首次访问
腾讯大讲堂
2020/05/17
6.8K0
推荐阅读
相关推荐
小程序性能优化总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验