当前位置: 首页 > news >正文

原生小程序开发性能优化指南

性能优化指南

1.骨架屏

  • 业务可以在数据加载完成之前用骨架屏幕来占位,提升体验。

2.包大小优化

  • 减小包中静态资源,例如图片文件,可将图片进行压缩降低文件体积。
  • 无用文件、函数、样式剔除。
  • 除了部分用于容错的图片必须放在代码包(譬如网络异常提示)之外,建议开发者把图片、视频等静态资源都放在 CDN 上。(Base64 格式本质上是长字符串,和 CDN 地址比起来也会更占空间。)
  • 图片压缩: 推荐 tinypng,比工具更好用的图片压缩。 地址
注意:
  • 若项目中有多个页面,只打包一个页面,图片资源依然会被打进包内。
  • 若页面在usingComponents配置引入自定义组件但是未使用,会被打进包内。
  • 检查TYML中的import引用其他模板文件、TYSS中的@import其他样式文件、JS 中引用的其他模块,是否有无用但是未删除依赖关系的?
  • ray 的项目,可以通过 -a 或者 --analyze 开启打包分析,协助开发者进行优化工作。

3.渐进加载

  • 页面启动环节,尽快加载重要内容,然后在加载其他内容,可分阶段加载,尽最大可能降低用户等待时间。
  • image图片可开启lazy-load,使用懒加载。

4.启用本地缓存

  • 智能小程序提供了读写本地缓存的接口。有些页面数据变化不频繁,可考虑放入本地缓存,打开优先加载缓存数据,拉到最新数据比对后有变化再去更新,以此提升用户体验。
注意:
  • 并非所有场景都适合缓存策略,譬如对数据即时性要求非常高的场景(如抢购入口)来说,展示老数据可能会引发一些问题。
  • 数据隔离:智能小程序目前会默认按照 uid 和 小程序ID 两个维度,对缓存空间进行隔离,业务可自行根据业务需求根据 countryCode、家庭 ID 等维度进行再隔离,避免数据误展示。

5.【重要】运行时优化(setData、事件)

  • 上述表格中可以看出,在小程序的双线程通信模式,数据量在一定程度上,会指数级上升,因此运行时的优化最主要的原则就是减少通信频率,降低通信数据量
  • 业务开发阶段,开发者可以控制 setData 的频率,尽可能合并数据,减少调用次数。频次推荐为 1s 不超过 20 次,在处理一些频繁触发的事件,比如滚动或者 touchmove 时添加截流方案。
  • Touch 事件,使用前要思考是否必须要绑定该事件到逻辑层触发,是否可以在 SJS 中处理该事件
  • 开发者应该尽量减小调用 setData 的数据量,来提升通信效率。如一些逻辑层的标记型变量,预渲染无关的可直接挂在 this 变量下。
  • 在调用 渲染脚本(rjs) 的方法时也会走逻辑层到视图层的通信,因此调用 rjs 的方法的时候和 setData 一样也应传递最小变更数据。
  • setData局部变更数据。
// 局部更新数据
this.setData({'a.b.c': 1,
});
  • 去掉不必要的事件绑定:当用户事件(如 Click、Touch 事件等)被触发时,视图层会把事件信息反馈给逻辑层,这也是一个线程间通信的过程。
  • 组件节点支持附加dataset, 应避免在自定义数据中设置太多数据。

6.【重要】SJS 和 RJS

  • 将一些视图层需要计算的能力放在 SJS 中操作。
    • SJS运行在视图层。
    • SJS 可以处理视图层绑定的事件且可以获取当前所在实例的部分能力。查看详情
    • SJS并不是完全的JavaScript,仅具有部分Safe的能力。
    • SJS处理事件、工具函数,无需通信。
  • 渲染脚本(RJS)
    • 可用于处理高频的绘图需求,可以提高视图的动画渲染性能,主要应用场景 canvas 图表渲染,webGL 图形渲染等。

7.销毁持久化内存

  • 由于逻辑层是在多页面共享,因此如计时器等逻辑在页面退出后,仍会执行。正确的做法是,在页面 onHide 的时候手动把定时器清理掉,有必要时再在 onShow 阶段恢复定时器。

8.其他

  • vConsole:是挂载到视图层的调试工具,逻辑层的日志会通过通道发到视图层,日志打印频繁可能会阻塞通道,遇到性能要求较高的页面调试,去掉 vConsole 调试工具,减少通道占用。
  • 视频:由于视频组件比较占用内存,在列表中多个出现,建议用 cover 图占位,当用户点击时候再去加载 video 组件
  • 长列表:扩展组件提供长列表组件,支持虚拟滚动遇到长列表场景可使用该长列表组件减少页面节点渲染数量提升性能。
  • 控制页面复杂度:如节点数量,事件绑定数量,不要在一个页面做太多的业务逻辑。

9.总结性能指标

  • 首屏时间不超过 5 秒。
  • 渲染时间不超过 500ms。
  • 每秒调用 setData 的次数不超过 20 次。
  • setData 的数据在 JSON.stringify 后不超过 256kb。
  • 页面 TYML 节点少于 1000 个,节点树深度少于 30 层,子节点数不大于 60 个。
  • 所有网络请求都在 1 秒内返回结果。

相关文章:

原生小程序开发性能优化指南

性能优化指南 1.骨架屏 业务可以在数据加载完成之前用骨架屏幕来占位,提升体验。 2.包大小优化 减小包中静态资源,例如图片文件,可将图片进行压缩降低文件体积。无用文件、函数、样式剔除。除了部分用于容错的图片必须放在代码包&#xf…...

「51媒体网」邀请媒体采访报道对企业宣传有何意义?

传媒如春雨,润物细无声的,大家好,我是51媒体网胡老师。 邀请媒体采访报道对企业宣传具有多重意义: 提升品牌知名度和曝光度:媒体是信息传播的重要渠道,通过媒体的报道,企业及其活动、产品能够迅…...

用动态IP采集数据总是掉线是为什么?该怎么解决?

动态IP可以说是做爬虫、采集数据、搜集热门商品信息中必备的代理工具,但在爬虫的使用中,总是会遇到动态IP掉线的情况,从而影响使用效率,本文将探讨动态IP代理掉线的几种常见原因,并提供解决方法,以帮助大家…...

MySQL操作DDL

目录 1.概述 2.数据库的增删改查 3.表的增删改查 3.1.创建和查看表结构 3.2.修改表 3.3.查看所有的表 3.4.删除表 4.用户 5.DDL在实际应用场景中的作用 5.1.数据库设计 5.2.数据库维护 ​​​​​​​5.3.数据库迁移或重置 ​​​​​​​5.4.优化性能 ​​​​​…...

程序员如何搞副业

目录 1.概述 2.个人项目开发 3.在线教育和培训 4.技术博客和内容创作 1.概述 程序员通过副业实现个人价值最大化和增加收入的途径多种多样,以下是一些方法: 自由职业: 程序员可以在业余时间提供自由职业服务。包括为客户开发软件、网站或应用程序、…...

【嵌入式开发 Linux 常用命令系列 4.3 -- git add 不 add untracked file】

请阅读【嵌入式开发学习必备专栏 】 文章目录 git add 不add untracked file git add 不add untracked file 如果你想要Git在执行git add .时不添加未跟踪的文件(untracked files),你可以使用以下命令: git add -u这个命令只会加…...

git 常用命令和使用方法

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…...

程序员如何搞副业?

程序员不仅拥有将抽象概念转化为实际应用的能力,还通常具备强大的逻辑思维和问题解决能力。然而,许多程序员并不满足于仅仅在一家公司工作,他们渴望通过副业来实现个人价值的最大化,增加收入,甚至探索自己的创业梦想。…...

深入浅出 -- 系统架构之负载均衡Nginx实现高可用

一、Nginx的高可用 线上如果采用单个节点的方式部署Nginx,难免会出现天灾人祸,比如系统异常、程序宕机、服务器断电、机房爆炸、地球毁灭....哈哈哈,夸张了。但实际生产环境中确实存在隐患问题,由于Nginx作为整个系统的网关层接入…...

鲸鱼优化算法(Whale Optimization Algorithm)

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 算法背景 鲸鱼优化算法(Whale Optimization Algorithm, WOA)是一种模拟鲸鱼捕食行为的优化算法。想象一下,你…...

C++内存管理new-delete大法及实现原理

目录 前言: 一:C语言中区域划分的回顾及各个变量存在的位置 1.经典例题 ​编辑2.C/C中内存区域的划分 二:C内存管理方式 new delete操作符 1.对于内置类型 2.对于自定义类型 三:operator new和operator delete函数 1…...

Spring WebFlux响应式实现WebFilter解决跨域问题

WebFilter 是 Spring Framework 中用于处理 Web 请求的过滤器接口,它是在基于 Servlet 3.0 规范的基础上,为了支持响应式编程模型而引入的。与传统的 Servlet 过滤器相似,WebFilter 也允许开发者对进入的请求和返回的响应进行拦截、修改或者增…...

第4章 Redis,一站式高性能存储方案,笔记问题

点赞具体要实现功能有哪些? 可以点赞的地方:对帖子点赞,对评论点赞点一次是点赞,再点一次是取消赞统计点赞的数量(计数,string),帖子被点赞的数量,某个用户被点赞的数量…...

UVA540 Team Queue 解题报告

UVA540 Team Queue 解题报告 题目链接 https://vjudge.net/problem/UVA-540 题目大意 有t个团队的人正在排一个长队。每次新来一个人时,如果他有队友在排队,那么这个新人会插队到最后一个队友的身后。如果没有任何一个队友排队,则他会排到…...

基础贪心问题

1.部分背包问题 #include<iostream> #include<algorithm> using namespace std; const int N 110; double v[N], w[N]; pair<double, int> a[N]; int n, m;int main(){cin>>n>>m;double x, y;for(int i 0; i < n; i){cin>>v[i]>&g…...

day13 java final 类和对象的初始化执行顺序

final [面试题]请简述final关键字final修饰类&#xff08;最终的类&#xff09;-太监类&#xff1a;该类不能被继承。(比如&#xff1a;String StringBuilder,....) final修饰方法&#xff08;最终的方法&#xff09;&#xff1a;不能被重写 final修饰的变量 &#xff1a;值不…...

蓝桥杯gcd汇总

gcd3014 问题描述 小明和小红是一对恋人&#xff0c;他们相爱已经三年了&#xff0c;在今年的七夕节&#xff0c;小明准备给小红一个特殊的礼物。他想要送给小红一些数字&#xff0c;让小红算出有多少对正整数 (a,b) 满足以下条件&#xff1a; clcm(a,b)−dgcd(a,b)x其中 c,…...

极市平台 | 综述:一文详解50多种多模态图像融合方法

本文来源公众号“极市平台”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;综述&#xff1a;一文详解50多种多模态图像融合方法 0 极市导读 本工作总结了50篇论文中Lidar和camera的多模态融合的一些概念方法。笔者结合原文以及自…...

数据结构系列-队列的结构和队列的实现

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 队列 队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO&#xff0c;…...

MySQL——查询数据的处理

一、并列 连接两个数据列的值&#xff0c;并进行输出的格式化处理&#xff08;显示为一种统一的格式&#xff09; concat( 列 1 格式化字 符 ) mysql> select concat(vend_name, vend_country) from vendors; --------------------------------- | concat(vend_name, ve…...

不用示波器也能看波形!Keil软件仿真Logic Analyzer的隐藏技巧大公开

不用示波器也能看波形&#xff01;Keil软件仿真Logic Analyzer的隐藏技巧大公开 在嵌入式开发中&#xff0c;调试GPIO波形是每个工程师都会遇到的场景。传统方式需要依赖示波器或逻辑分析仪&#xff0c;但硬件设备不仅成本高昂&#xff0c;还受限于使用环境。Keil MDK内置的Log…...

3ds Max模型优化指南:用Attach命令合并物体时如何避免顶点爆炸(2024版)

3ds Max模型优化指南&#xff1a;用Attach命令合并物体时如何避免顶点爆炸&#xff08;2024版&#xff09; 在影视和游戏制作流程中&#xff0c;模型拓扑的整洁度直接影响后续的UV展开、动画绑定和实时渲染效率。作为3ds Max用户最常用的建模命令之一&#xff0c;Attach看似简单…...

信奥赛C++提高组csp-s高频考点知识详解

信奥赛C提高组csp-s高频考点知识详解 高频考点&#xff1a;并查集、最小生成树、拓扑排序、欧拉回路、强连通分量、二分图、Dijkstra、Floyd、Bellman-Ford、SPFA、树状数组、线段树、哈希、哈希表、离散化、KMP、Trie字典树、AC自动机、单调栈、单调队列、快速幂、倍增算法、反…...

Pandas中groupby+agg的两种写法区别小结

在使用 Pandas 做数据统计时&#xff0c;groupby agg 是绕不开的操作。但很多人&#xff08;包括我自己&#xff09;在实际项目中都会遇到一个问题&#xff1a;为什么明明只是做个统计&#xff0c;结果 DataFrame 却变成了 MultiIndex&#xff0c; 后面 merge、导 Excel、画图…...

游戏盾导致 Unity/UE 引擎崩溃的主要原因排查?

做游戏上线的都知道&#xff0c;游戏盾是必装的——毕竟要防外挂、防攻击&#xff0c;不然刚上线就被搞崩&#xff0c;损失太大。但最近帮几个同行排查问题&#xff0c;发现好多项目接入游戏盾后&#xff0c;Unity和UE引擎动不动就崩&#xff0c;要么内存飙到爆&#xff0c;安卓…...

Python 实战:数据归一化 4 种核心方法对比 + 代码实现(机器学习必看)

在机器学习、深度学习的数据预处理中&#xff0c;数据归一化是绕不开的关键步骤。不同特征往往量纲不同&#xff08;比如年龄 18-60、收入 1000-100000&#xff09;&#xff0c;直接训练模型会导致&#xff1a;梯度下降收敛慢、难以最优解距离类算法&#xff08;KNN、K-Means、…...

一种改进的鹈鹕优化算法(IPOA)用于函数寻优研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真咨询…...

OpenClaw × 88API:10 分钟搭好本地网关,解决 API 超时和多渠道切换(2026 完整教程)

你可能也踩过这些坑&#xff1a;项目快提测了&#xff0c;Claude API 突然超时&#xff0c;重试半天还是报错想临时换一个中转站兜底&#xff0c;结果又要改一遍 base_url、api_key、模型名一个渠道支持 Claude&#xff0c;不支持 Gemini&#xff1b;另一个支持 GPT&#xff0c…...

SEO_中小企业如何低成本做好SEO?实用方案分享

为什么中小企业需要关注SEO 在当今数字化经济时代&#xff0c;中小企业如果想要在竞争激烈的市场中脱颖而出&#xff0c;关注SEO&#xff08;搜索引擎优化&#xff09;是必不可少的。SEO不仅能够提升网站的搜索引擎排名&#xff0c;还能有效带来更多的潜在客户。许多中小企业在…...

**AI仿真人剧厂家2025推荐,专业定制与沉浸式体验的行业标杆**据中国信通院2025年人工智能数字内容产业白皮书显示,2025年国内AI仿真人剧市场规模预计突破120亿元,年增长率高达65%。

AI仿真人剧厂家2025推荐&#xff0c;专业定制与沉浸式体验的行业标杆据中国信通院《2025年人工智能数字内容产业白皮书》显示&#xff0c;2025年国内AI仿真人剧市场规模预计突破120亿元&#xff0c;年增长率高达65%。然而&#xff0c;行业调研数据显示&#xff0c;超过70%的内容…...