返回顶部
首页 > 资讯 > 精选 >小程序怎么优化
  • 709
分享到

小程序怎么优化

2023-06-22 06:06:41 709人浏览 薄情痞子
摘要

这篇文章主要介绍了小程序怎么优化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。优化项1. 合理的使用分包微信小程序的主要特点是启动快速,为了这一特性,官方因此限制了包的大小,

这篇文章主要介绍了小程序怎么优化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

优化项

1. 合理的使用分包

微信小程序的主要特点是启动快速,为了这一特性,官方因此限制了包的大小,上限为 2M。

分包是小程序优化的第一要务,能有效提高小程序启动速度,以及页面打开速度。

包分为【主包】【普通分包】【独立分包】。

【主包】应该只放置启动页或者TabBar页面。

【普通分包】放置非TabBar页面的其他页面,推荐按照页面数量或者模块划分多个分包,减少分包的大小,当用户进入对应分包页面的时候才会去下载这个包,这也实现了包的按需加载,避免了资源浪费。当小程序从普通分包中的某个页面的时候启动时,需要首先下载主包,然后在下载分包。

【独立分包】放置一些独立性较高的页面,当小程序从独立分包中的页面启动时,只会下载独立分包,从而大大提高小程序启动速度,当用户进入TabBar页面或者其他普通分包页面才回去下载对应的包。

独立分包中不能有任何全局的东西,包括组件,登录等,引入任何其他包中的资源都会出错。

作者建议梳理好页面和功能再分包,分包的界限并不是包的大小超过了 2M,而是要灵活的根据业务和功能来进行划分。在如今正常网络情况下,2M 的分包和 500KB 的分包的下载可能用户感知差距不会特别大,但是如果是在弱网环境下,这两者会造成用户白屏的时间上就有很大的差距(亲身经历,可以说是掏心掏肺了)。

比如,我会将那些可以由TabBar页面直接进入且频率较高的二级页面放入一个分包,然后其他更深层次的页面或者那些不是那么重要的页面分成一个包,又或者将整个订单业务模块的页面分成一个包。

包分好了,自然不能少了【分包预下载】。可以按照官网的规则进行配置,当用户进入某个页面时,提前下载包。

2. 按需注入

小程序下载完包之后,会将打开页面所在包的全部js合并注入,一些未访问的页面以及未用到的自定义组件也会被注入到运行环境当中。影响注入耗时和内存占用。我们希望的是当包下载完成后,只注入我们即将打开的页面的代码就行。

这也是小程序启动或跳转进入分包页面影响白屏时间的一点。

{    "lazyCodeLoading" : "requiredComponents"}

3. 明确 setData 的几个调用原则

小程序是以微信客户端为宿主运行的,即wxmlwxswxss都是运行在客户端的,运行环境又分成了两个线程,一个渲染线程,一个逻辑线程。渲染层使用 WEBView 进行渲染, 逻辑层使用JSCore运行JS代码。wxmlwxss工作在渲染线程,而wxs工作在逻辑线程。那两个线程之间怎么通信呢?

  • 通过客户端作为中转站进行通信

渲染层触发事件响应到客户端,逻辑层通过setData传送数据到客户端,两边的数据都会被转换成字符串之后进行传输,客户端再分别做出响应,并且响应并非实时的。意味着在逻辑层触发setData页面并不会马上更新,会有一些延迟渲染层才会更新。

回到问题,setData在逻辑层调用,让渲染层快速响应取决于逻辑层到客户端的数据传输效率,而这个传输效率又取决于你传输数据的大小,所以在调用setData的时候应该尽可能减少数据传输大小。

Native会将wxml转换成 js对象,然后和setData传进来的对象做差异化对比,将差异化渲染到视图上。

综上原理,我们调用setData应该遵循几个原则:

  • 尽可能减小需要 setData 数据的大小,JSON.stringify后不超过 256KB

  • 避免将不需要渲染的数据(不在wxml中绑定的数据)传入setData,减少差异对比耗时。

  • 避免过于频繁调用setData,会导致逻辑层业务繁忙,一直在处理setData的传输队列,而导致抽不开身去处理渲染层的响应,从而导致渲染阻塞,页面出现卡顿,甚至setData无效。如果可以的话,可以采用节流等方式进行优化。

  • 尽可能将多个需要更新的数据合并为一次setData,减少通信过程。

  • 避免后台页面触发setData,也会占用Js线程,有可能会造成阻塞,导致真正需要setData的数据没有响应

减小setData的数据大小通常在列表场景中,通常只更新需要更新的下标:

const needRefresh = `list[${index}]`// 写法一setData({    [needRefresh]: '新值'})// 写法二setData({    [`list[${index}]`]: '新值'})// 写法三setData({    'list[0]': '新值'})// 写法四const needRefresh = `list[${index}].disabled`setData({    [needRefresh]: '新值'})// 写法5 更新对象setData({    'personal.name':'xxx'})

如果有变量,就需要放在[]内。

4. 控制图片大小比例

图片太大会增加下载时间和内存的消耗,并且为了用户体验,应该控制图片的高宽比例,防止图片变形或者被裁切(这个问题可以根据imagemode属性进行调整)。

一个合格的图片应该满足以下两点:

  • 图片宽高乘积 <= 实际显示宽高乘积 * (设备像素比 ^ 2)

  • 显示的高/宽与原图的高/宽不超过 15%

由于这些图片都出自 UI,所以在这一条优化上你需要做的是:拿着这两条指标去跟 UI battle。

Good lucky ~

以上第一条就是和设备的【dpr】相关,移动端开发一定要理解【dpr】,这里就不多赘述了

我们应该合理的采用图片资源,例如在【dpr】为 2 的设备上,一个 60x60 的元素区域显示的图片为了兼顾清晰度与资源大小,图片大小不应该超过 120x120, 同理,【dpr】为 3 设备,图片应该不超过 180x180。

我们小程序的资源都放在cdn上,可以利用cdn的图片云处理功能对资源请求进行控制,我司用的七牛云和又拍云,如下:

// 七牛云`${_src}?imageMogr2/thumbnail/!${scaleRatio}p`// 又拍云`${_src}!/scale/${scaleRatio}`

更多云处理功能可以挪步官网:七牛云(https://developer.qiniu.com/dora/8255/the-zoom)  和又拍云(Https://help.upyun.com/knowledge-base/image/)

我们在小程序内自定义了图片组件 cus-image , 该组件会根据【dpr】对图片进行云处理。并提供了 ratio 属性灵活调整图片大小(因为运营方上传的图片可能在不同尺寸的元素区域内引用,所以需要开发人员灵活控制)。

5. 避免短时间内发起太多请求

小程序中wx.requestwx.uploadFilewx.downloadFile的发起的网络请求短时间内最大并发限制是 10 个,超过 10 个就会导致请求阻塞。而图片请求的并发最大数量为6

短时间怎么去界定呢?

  • 【网络请求】耗时超过 300ms 的请求并发数不超过 10 个(一般不会出现这个问题,如果有这个问题那可能该考虑拆分页面、拆分业务或者合并接口了。)

  • 【图片请求】同域名耗时超过 100ms 的图片请求并发数不超过 6 个

例如:300ms内发送了12个请求,其中10个请求在300ms内就请求完成了,只有2个请求超过300ms,这样是没有问题的。

【解决方案】

  • 在接口请求上我们应该尽可能的减少请求数量。

  • 图片可以设置懒加载lazy-load

  • 图标可以使用雪碧图。

  • 将图片资源拆分在多个域名下。

  • 自定义一个分片处理函数,将请求拆分成数个阶段发出。

function interelTasks(task,wait){    this.data.timer = setInterval(()=>{        task()    }, wait)}async function task(promiseList = []){    const result = await promise.all(promiseList)    // do something}

叨扰一句:有些时候在请求数量限制范围内,我们应该对没有先后顺序的接口进行并发处理,提高接口处理效率。

6. 请求耗时优化

这一点主要体现在两个方面——【接口】和【静态资源】。

【接口】基本上不应该超过1000ms,哪怕是几百毫秒也可能需要做一些优化了,基本上正常速度在10-200ms,个别接口几百也正常,大部分都应该不超过500ms(后端大佬请消消气)。

【静态资源】首先从资源的大小考虑出发,大部分资源是图片,可以参考上面的图片大小标准。其次考虑资源缓存,对于小程序而言,静态资源基本上是存放在cdn上的,设置缓存可以有效的提高客户端表现性能。

这边给大家分享一个图片压缩网站:https://tinypng.com/

7. 避免使用过大的 WXML 节点数目

建议一个页面使用少于 1000 个 WXML 节点,节点树深度少于 30 层,子节点数不大于 60 个。一个太大的 WXML 节点树会增加内存的使用,样式重排时间也会更长,影响体验。

页面的节点数包含所有子节点数,需要注意的是子节点数,若一个子节点数大于60的时候,或许你就该考虑对组件或者页面进行重新划分了。

基本功!

8. 使用骨架屏

骨架屏相信大家都不陌生,如果我们的优化手段都用尽了,页面需要加载的资源本身就比较多,那骨架屏也是我们退而求其次的最佳方案了,也算是“曲线救国“了。

实现骨架屏的方式有多种,你可以自己写一个骨架组件,也可以用一些生成骨架屏的插件。除此之外,小程序还提供了白嫖方案,开发者工具提供了自动生成骨架屏代码的能力。

详情请访问 https://developers.weixin.qq.com/miniprogram/dev/devtools/skeleton.html

9. 合理的进行组件拆分并减小data的大小

微信小程序的更新是基于组件的,自定义组件的更新只会在组件内部,这能减少差异比较带来的耗时。

控制data的大小主要是为了减少内存消耗,比如在data中定义一些图片路径的变量,如果可以,我更推荐通过background的方式去加载一些图片。

10. 滚动区域设置惯性滚动

惯性滚动会使滚动比较顺畅,在安卓下默认有惯性滚动,而在 iOS 下需要额外设置 -webkit-overflow-scrolling: touch 的样式。

11. 扩大点击元素的可点击区域

微信规定最小可点击区域应该不小于 20x20 像素。这种样式问题不多赘述了,八仙过海,各显神通。

感谢你能够认真阅读完这篇文章,希望小编分享的“小程序怎么优化”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: 小程序怎么优化

本文链接: https://lsjlt.com/news/303122.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 小程序怎么优化
    这篇文章主要介绍了小程序怎么优化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。优化项1. 合理的使用分包微信小程序的主要特点是启动快速,为了这一特性,官方因此限制了包的大小,...
    99+
    2023-06-22
  • 微信小程序怎么优化
    这篇文章主要介绍了微信小程序怎么优化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。页面跳转优先采用navigator组件小程序提供了两种页面路由方式:a. navigator...
    99+
    2023-06-20
  • 微信小程序怎么做优化
    微信小程序可以从这几方面优化:1.样式优化,小程序整体风格统一;2.布局优化,小程序各版块要有逻辑;3.搜索优化,标题使用行业关键词;4.使用优化,针对页面反应速度及导航设置进行优化;微信小程序可以从以下几方面来优化样式优化小程序整体风格样...
    99+
    2024-04-02
  • 小程序商城怎么运营优化
    这篇“小程序商城怎么运营优化”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“小程序商城怎么运营优化”文章吧。一、解决方案:关键...
    99+
    2023-06-26
  • 微信小程序中怎么优化性能
    微信小程序的性能优化可以从多个方面入手,以下是一些优化性能的方法: 减少页面的渲染元素和层数:尽量减少页面中的元素数量和嵌套层数...
    99+
    2024-04-09
    微信小程序
  • 微信小程序怎么做好界面优化
    这篇文章主要讲解了“微信小程序怎么做好界面优化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序怎么做好界面优化”吧!  微信小程序如何做好界面优化  1、页面新颖有趣  为了更好地以...
    99+
    2023-06-26
  • 如何优化微信小程序
    小编给大家分享一下如何优化微信小程序,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!避免使用本地大图片、大资源文件请避免在小程序的...
    99+
    2024-04-02
  • 如何优化J2ME程序大小
    这篇文章主要讲解了“如何优化J2ME程序大小”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何优化J2ME程序大小”吧!如果说j2me和j2se有什么最大的区别,那就是他们运行环境的不同.J...
    99+
    2023-06-03
  • 小程序多图列表怎么实现性能优化
    小编给大家分享一下小程序多图列表怎么实现性能优化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么造成的性能问题简单的来说: D...
    99+
    2024-04-02
  • 小程序redux性能优化的方法
    这篇文章主要介绍“小程序redux性能优化的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“小程序redux性能优化的方法”文章能帮助大家解决问题。首先了解小程序的工作原理和性能关键点。1工作原理...
    99+
    2023-06-26
  • 微信小程序性能如何优化
    这篇文章主要介绍了微信小程序性能如何优化的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序性能如何优化文章都会有所收获,下面我们一起来看看吧。为什么要做性能优化?一切性能优化都是为了体验优化1. 使用小程...
    99+
    2023-06-26
  • uni-app小程序加载图片优化
    场景:较大的图片加载很慢,会出现较长时间的白屏,体验感差。   解决方案:一进入页面,图片未加载成功前,进行loading…;图片加载完成后会触发@load事件; export default { data (...
    99+
    2023-09-01
    uni-app
  • 家政服务小程序开发怎么优化用户体验
    本篇内容介绍了“家政服务小程序开发怎么优化用户体验”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  家政服务小程序开发如何优化用户体验  1...
    99+
    2023-06-26
  • 怎么优化void程序的性能
    这篇文章主要介绍“怎么优化void程序的性能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么优化void程序的性能”文章能帮助大家解决问题。我们的编译器已经提供了很好的优化机制,但是还有很多细节编...
    99+
    2023-06-04
  • 小程序绑定用户的优化示例
    这篇文章将为大家详细讲解有关小程序绑定用户的优化示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。预先绑定类该类小程序在使用之前就需要绑定用户信息。常见于线下门店类功能性...
    99+
    2024-04-02
  • 小程序购物车动画如何优化
    这篇文章将为大家详细讲解有关小程序购物车动画如何优化,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。小程序购物车动画优化公司小程序点击加购时,会绘制一个抛物线动画,这个抛物线动画是计算出来的贝塞尔曲线上每个...
    99+
    2023-06-22
  • 微信小程序代码包大小的优化方法
    这篇文章主要讲解了“微信小程序代码包大小的优化方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序代码包大小的优化方法”吧!setDatasetData是小程序开发中使用最频繁的接口...
    99+
    2023-06-26
  • 小程序有什么优势
    这篇文章将为大家详细讲解有关小程序有什么优势,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是小程序什么是小程序? 小程序建立在微信上。该应用程序无需下载即可使用。它的大小非常小,每个不超过2 MB。通...
    99+
    2023-06-27
  • Linux程序设计代码怎么优化
    本篇内容主要讲解“Linux程序设计代码怎么优化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux程序设计代码怎么优化”吧!全局变量VS函数参数全局变量在Linux下的驱动编程里边,用的是...
    99+
    2023-06-16
  • 小程序怎么制作小程序码
    这篇文章主要介绍“小程序怎么制作小程序码”,在日常操作中,相信很多人在小程序怎么制作小程序码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”小程序怎么制作小程序码”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作