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

聊一聊微信小程序性能优化

作者头像
epoos
发布于 2022-06-06 08:31:37
发布于 2022-06-06 08:31:37
4.4K01
代码可运行
举报
文章被收录于专栏:epoos.comepoos.com
运行总次数:1
代码可运行

一、如何衡量小程序性能

微信小程序的开发除了完成必要的产品功能外,性能也是非常重要的。 我们应该如何衡量小程序的性能呢?怎样的小程序才算是一个高性能小程序呢?

个人觉得,所谓的高性能无非就两个点:打开速度够快、交互够流畅。 只要打开够快就能让用户最快的看见,只要交互够流畅,就能让用户没有”反悔“的时间。 那么如何才能做到速度快并且交互流畅呢? 接下来咱们就一起来探讨一下。

关于小程序的性能优化,微信小程序官方文档的《性能与体验》模块其实说的很详细了,甚至还有官方评分规则。

《性能与体验》

所以,一般情况下按照这些规则指标去优化,并做到了100分,那么小程序性能也不会太差了。 并且,这些指标的绝大多数问题都能在小程序开发者工具上在本地检测出来,只需要在开启检测并发现问题之后按照上面的指标一一处理掉,拿到评测高分即可。

难道做到小程序的高性能就这样?这也太容易了吧? 当然不止如此,上述官方指标只是给小程序的性能优化指个大致的方向,让其在平台上运行的小程序不至于太差,应该算是一个指导性文件,作为开发者我们尽可能的按照官方指导去优化小程序理论上不会把路子走歪。

除此之外,有一些跟用户息息相关的一些比较复杂的指标才是我们本文会重点介绍的。 比如:脚本执行时间、首屏时间、渲染时间、请求耗时等

这些指标在跟不同的机型、版本与网络环境等多种多样复杂的内外部因素有关,本地检测是很难正确的反应出实际情况的。 除此之外,还有其它的一些性能指标,比如 setData 耗时、各个生命周期执行耗时等很难在本地或者单个检测目标获得准确的评估值。

对于如何收集这些数据,以前 web 端已经玩的很熟练了,这种情况最好的解决方案就是埋点+数据收集上报了。 制定指标、然后埋点上报获得性能指标相关的数据,用数据说话,通过数据分析找出相关性能瓶颈,最后解决问题。

因此,要做性能优化,我们首先要做的就是制定一些能够量化的指标,然后收集衡量对应指标所需要的相关数据。

二、小程序运行原理与过程

我们知道,在 web 端,一个网页的简单生命周期

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- 拉取html页面数据 
- 拉取css数据 
- 页面初次渲染 
- 拉取js数据
- 用户交互 
- 最后关闭。

根据这些过程我们制定了相关的性能指标:首屏加载时长、白屏时长、页面加载完成时长、可交互时长等等指标。

对于小程序呢? 小程序以微信为宿主,实现了自己的渲染逻辑,和web端的网页生命周期是有差异的,要想做小程序的性能优化,小程序的运行原理和生命周期是绕不开的。 因此,接下来咱们一起来对小程序的运行原理和过程和生命周期做一个基本介绍。

1.小程序启动过程

上图就是小程序的启动过程,这个启动过程步骤比较多,看起来耗时也不会短。 微信方为了缩短这个过程多了很多工作,比如各个流程能并行的都做了并行,能缓存的尽可能都做了缓存。

上小程序的启动过程官方给分为了冷启动、热启动两种。 但是实际上冷启动还应该分为“初次冷启动、再次冷启动”。

小程序官方文档有一句话

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
代码包下载到客户端后会被缓存起来,以便于下次离线打开。代码包清理的时机由算法动态计算,但可以认为在手机存储空间足够的情况下,代码包都不会被主动清理。当用户主动在历史列表删除小游戏(下拉任务栏删除不算)时,代码包会被清理。

这也就意味着,非首次打开小程序,即使是冷启动,只要本地代码包还存在且代码不是太旧,就可以复用原来的代码。 这相对于初次启动,打开速度会快很多。

2.小程序生命周期

想要做指标分析和数据埋点,除了理解小程序的启动过程,对于小程序的生命周期是必须要理解的。 我们从官方文档可以知道,小程序的逻辑层和渲染层是分两个线程来管理的,因此其页面的生命周期也是两个线程共同协作完成的。

小程序官方文档有一份完整的生命周期图

上图中的 view Thread 是用来渲染view组件的,是内置的 webkit 内核的浏览器,支持前进、后退、浏览历史、放大缩小等功能,无地址栏和导航栏,单纯的展示网页界面。 上图中的Appservice Thread 是一个javascript解释器(javascriptCore|jsCore)专门处理业务逻辑。 二者通过 native 中转进行事件和数据传递。

下面是对于官网的生命周期图自己的理解,并截取的页面首次渲染的生命周期图

如上两图可以看出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
小程序开始运行时,view的渲染和appServer逻辑层是各自开始的
view初始化完成之后会通知逻辑层,同时会等待逻辑层的初始数据的传递。
逻辑层初始化完成之后会等待view的“初始化完成通知”,接到通知之后会将初始数据发送给view层。
view层接收到初始数据之后就开始执行第一次页面渲染,初次渲染完成即表明用户已经看到小程序的页面了。
待页面初次渲染完成之后,view就会通知逻辑层,此时的逻辑层就会执行 onReady 事件。
onReady即代表小程序首次渲染结束。

根据上面的生命周期图,小程序启动、到 Page.onReady 执行的顺序如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
App:App.onLaunch -> App.onShow
组件:Component.created -> Component.attached
页面:Page.onLoad -> Page.onShow
Ready:执行 Component.ready -> Page.onReady

组件是页面的一部分,页面要想 onLoad 肯定需要组件预先初始化完成 上图中,页面 create 阶段,就包含了组件的初始化,组件attached事件表示组件已解析完成并合并入了页面的节点树。 组件初始化完成之后,才会执行页面的 onLoad,onLoad表示整个页面的节点树创建并加载完成。 最后就是页面的UI绘制了,组件UI是页面UI的一部分,因此,页面的 ready 事件一定是在组件 ready之后才触发 PS:(这里的组件是指页面首次渲染需要的组件,并不包括后期setData触发的组件显示和更新)。

了解了小程序的生命周期之后,接下来就是制定指标了。 下面总结的7个指标,这些指标跟上面的生命周期息息相关,理解了页面和组件的生命周期才能够更好的理解下面的性能指标。

3.指标定义

指标

描述

js注入时间

从代码包中读取配置和代码,注入到js引擎中耗时 App.onLaunch

小程序启动时间

从用户点击访问小程序到小程序首屏渲染完成 Page.onReady

页面首次渲染时间

开发者代码注入完成后,结合逻辑层的数据和渲染层的页面结构、样式,小程序框架进行小程序首页渲染,展示首屏,并触发首页的 Page.onReady 时间。

页面可用耗时

页面用户可见,所需的基本数据下载并渲染完成,可交互

路由切换时间

路由切换耗费的时间

接口请求耗时

request 异步请求所耗费的时间

setData耗时

setData 方法触发到页面渲染耗费的时间

4.收集指标

前面定义了性能指标,那么接下来就是想办法来获取和收集这些指标了。 做过web端性能优化的同学应该知道,对于H5页面,Chrome 浏览器提供了一个性能Api(performance API)。 这个api提供了源自浏览器自己收集的丰富的网页性能数据。

而我们知道,微信小程序底层的界面实现也是webview,因此理论上也会有类似的接口。 从官方文档可以找到,这个接口就是 wx.getPerformance();

getperformance 能获取到三个指标类型的数据:路由、渲染、脚本。

小程序创建过程中,每个阶段包含了相应的执行耗时。 其中AppLaunch 的 startTime 为点击小程序图标的时间。 navigationStart 表示路由真正响应开始时间。

在页面生命周期中通过调用 wx.getPerformance() 可以获取当前阶段之前的小程序的相关性能情况。 但是在埋点过程中发现,若是将该方法放在 Page.onLoad 的时候会获取不到当前页面的性能数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({
  onLoad() {
    // 可能获取不到当前页的数据
    console.log(wx.getPerformance())
  }
})

wx.getPerformance() 获取到的性能数据是小程序自己收集的,不管我们用不用,什么时候用它都在那里默默地收集。 但是,getPerformance() 性能收集是一个异步过程,如果直接在onLoad事件调用,此时该页面的数据很可能还未收集完成。 因此,在实际使用中推荐使用事件监听的方式获取性能指标数据。 事件监听的绑定需要放在被监听页面打开之前(比如App.onLaunch()的时候 或者 App()方法执行之前)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function logPagePerformance() {
  const performance = wx.getPerformance();
  const observer = performance.createObserver((entryList) => {
    const entries = entryList.getEntries();
    const result = {}
    entries.forEach(entry => {
      result[entry.name] = entry
    });
    console.log(result)
  });
  observer.observe({ entryTypes: ['navigation', 'render', 'script'] });
}

通过上述方法我们可以获得页面的启动、脚本注入、初次渲染、路由切换的消耗时间。 而页面可用耗时因为跟可用的定义有关,比如有的是需要等待图片渲染完成,有的是初次 setData() 之后页面初次渲染完成。 因此,这个点只需要用户在相应的位置取一个 Date.now(),然后减去小程序启动开始时间 appLaunch 的 startTime 即可。

接口请求耗时的收集页很简单。 直接包装 wx.request() 方法即可(重写方法见后文)

5.setData耗时

setData是小程序中一个非常重要的方法,小程序页面更新的核心方法 页面的更新就是通过setData将数据从逻辑层通过native发送至webview层触发更新的。 因此 setData 的性能直接影响到页面的流畅性。 而小程序官方除了给了很多 setData 的优化建议之外,也提供了一个性能监听方法 setUpdatePerformanceListener 来获取更新性能统计信息。它将返回每次更新中主要更新步骤发生的时间戳

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// setData 性能监听
this.setUpdatePerformanceListener({ withDataPaths: true }, (res: any) => {
  // 更新运算结束时的时间戳,更新运算开始时的时间戳,此次更新进入等待队列时的时间戳
  const { updateStartTimestamp, updateEndTimestamp, pendingStartTimestamp, dataPaths = [] } = res;
  const cost = updateEndTimestamp - updateStartTimestamp;
  const waiting = updateStartTimestamp - pendingStartTimestamp;
  console.log({ duration: cost, waiting, from: this.is, dataPaths });
});

官方文档说明了,此方法需要放在Page.onReady 或者 Component.attached 生命周期之中执行。 而且 setUpdatePerformanceListener 只会激活当前组件或页面的统计。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({ onReady() { /** 在页面里面将监听方法放在 onReady生命周期触发之后 **/ } })
Component({ attached() { /** 在组件里面将监听方法放在 attached生命周期触发之后 **/ } })

为什么需要放在这两个生命周期方法里面呢? 其实很容易理解,因为setUpdatePerformanceListener统计的是更新性能统计信息。 而所谓更新,一定是需要页面或者组件被渲染之后才会发生。 从前面的生命周期图可以看出: 对于页面,onReady 事件发生就代表着页面首次渲染完成,既然首次渲染完成,再触发 setData 那就是页面更新了。 对于组件,attached 事件发生的时机为 组件实例进入页面节点树时。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
listeners 返回携带一个 res 对象,表示一次由 setData 引发的 更新过程 
根据 setData 调用时机的不同,更新过程大体可以分为三类
基本更新 ,它有一个唯一的 updateProcessId ;
子更新 ,它是另一个基本更新的一个子步骤,也有唯一的 updateProcessId ,但还有一个 parentUpdateProcessId;
被合并更新 ,它被合并到了另一个基本更新或子更新过程中,无法被独立统计。

上面是官方原话,介绍了三种更新形式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const { updateStartTimestamp, updateEndTimestamp,pendingStartTimestamp, dataPaths } = res;
const cost = updateEndTimestamp - updateStartTimestamp;
const waiting = updateStartTimestamp - pendingStartTimestamp;

其中dataPaths为当次setData传入的数据。 计算结果 cost 的值为页面更新花费的时间。

每次成功的 setData 调用都会产生一个更新过程,使得 listener 回调一次。 不过 setData 究竟触发了哪类更新过程很难判断,更新性能好坏与其具体是哪类更新也没有必然联系,只是它们的返回值参数有所不同。

值得注意的是: setData 在逻辑层执行是同步过程,但是当数据传入渲染层之后,渲染层的渲染逻辑是异步执行的。 因此如果需要监测 setData 整个执行耗时,可以在 setData 执行前埋点t1,然后在 setData 回调方法里面埋点t2,t2-t1(二者相减)即为整个 setData 耗时T1。 经过测试 T0 耗费的时间是远大于 setUpdatePerformanceListener监听中算出来的cost的值的。 原因是,cost 表示的是 由 setData 引发的 更新过程,仅仅是更新过程;而 T1 表示的是从 setData 执行开始到页面渲染完成。 整个过程除了UI更新,还有逻辑层的编码处理过程、逻辑层像UI层数据的传递过程、更新进入等待队列时的时间以及异步回调可能遇到的线程阻塞等等。

高性能的使用setData 关于setData的运行时性能优化建议,官方文档总结起来有三句话

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
不要频繁的去 setData
每次 setData 不要传递大量新数据
不要在后台状态页面中进行 setData

第3点很容易理解,后台状态的页面用户都不可见了也没必要进行 setData,造成资源浪费。

对于1和2,刚开始看到句话我就有点困惑了 不要频繁的触发 setData,意思不就是将数据合并传递吗? 不要一次传递大量数据,意思不就是拆分数据传递吗? 这两句看起来有冲突啊。

其实并不冲突,理解了 setData 原理之后就知道为什么会这样说了。 setData 主要性能开销包括

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
将逻辑层代码用 jsBridge 方式通过传入 Native,然后 Native 再与 webiew 交互
webview 线程执行脚本,渲染UI
在 webview 里面执行就是一个 evaluateJavascript 的过程,当数据量过大的时候脚本的编译执行会占用 webview 的js线程,导致页面卡顿。

因此,要提高页面更新性能就需要尽可能少的触发更新操作,在不阻塞页面渲染的前提下一次性更新更多的 setData 数据。

三、其它性能收集

其它系统信息、网络信息、错误信息的收集就不过多介绍了,官方提供了强大的收集这些信息的API。 一看便知。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 设备信息收集/系统信息收集、网络信息收集
env.getSystemInfo({
  success(res) {
    console.log(res)
  }
})
wx.getNetworkType({
  success (res) {
    console.log(res.networkType)
  }
})

// 错误事件处理
// 接口请求错误建议在 wx.request 请求的代理上去做
// 小程序有未处理的 Promise 拒绝时触发
App.onUnhandledRejection(() => {})
wx.onUnhandledRejection(() => {})
wx.onError()

四、无侵入式埋点

本文介绍了小程序的启动过程、相关生命周期以及小程序官方提供的性能监控Api及相关使用方法。 知晓了这些,再做小程序的性能监控就容易的多了。

当然性能监控埋点上报最好就是能够做到无侵入式埋点,对于上面提到的性能指标,除了各个业务方定制的页面可用耗时(可能包含异步请求数据的渲染) 其它指标都可以通过重写小程序Api的形式实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 重写 Page
const OriginPage = Page;
Page = (page)=> {
  const originalOnReady = page.onReady;
  page.onReady = () => {
    // onReady 方法里面监听性能
    this.setUpdatePerformanceListener({ withDataPaths: true }, (res: any) => {
      const { updateStartTimestamp, updateEndTimestamp, dataPaths = [] as string[] } = res;
      const cost = updateEndTimestamp - updateStartTimestamp;
      console.log(cost);
    });
    return originalOnReady.call(this);
  }
  return OriginPage(page);
}

// 重写 Component
const OriginComponent = Component;
Component = (comp) => {
  const originalAttached = comp.attached;
  comp.attached = function () {
    this.setUpdatePerformanceListener({ withDataPaths: true }, (res: any) => {
      const { updateStartTimestamp, updateEndTimestamp, dataPaths } = res;
      const cost = updateEndTimestamp - updateStartTimestamp;
      console.log(cost);
    });
    return originalAttached.call(this);
  };
  return OriginComponent(comp);
}

// 重写 wx.request API
Object.defineProperty(wx, 'request', {
  get: () => hackHandler.bind(this),
});
function hackHandler() {
  return new Promise((resolve, reject) => {
    const startTime = Date.now();
    wx.request({
      ...opts,
      success: (res) => {
        resolve(res);
      },
      fail: (res) => {
        reject(res);
      },
      complete: (res) => {
        console.log('接口请求耗时:', Date.now() - startTime)
      },
    });
  });
}

五、总结

一个优秀的小程序,完备功能是基础,好用易懂的交互是加分项,高性能是提升用户信任度的一个重要指标。 当然,我们还得综合考虑其安全性、稳定性,不能为了性能优化而性能优化。

相关链接

performanceApi setUpdatePerformanceListenerApi 性能与体验优化官方文档

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
呕心沥血整理!小程序性能优化的独家实战技巧
嘿,各位程序猿小伙伴们!今天小编我可是带着超级干货来啦!咱们都知道,在开发支付宝小程序的时候,性能优化那可是相当重要的一环。一个性能不佳的小程序,就好比一辆破破烂烂还老是熄火的老爷车,用户体验简直差到爆!所以呢,今天小编就把自己呕心沥血整理的支付宝小程序性能优化独家实战技巧分享给大家,希望能让咱们开发的小程序像超级跑车一样风驰电掣!
小白的大数据之旅
2025/05/01
880
呕心沥血整理!小程序性能优化的独家实战技巧
【腾讯医药微信小程序性能优化案例】从0.9秒到0.5秒,原来这么简单!
邓炜豪 腾讯医疗健康前端开发工程师,腾讯前端监控 Oteam PMC 成员,主要负责小程序监控系统的设计和开发。 听说代码无终点,坚持跑,就不会输。 前端性能优化的道路也没有终点, 只要坚持监控并优化,永远有下降的 “0.1s”。 背景 腾讯医药是一个专注为 C端用户提供方便、快捷、安全的在线购药、送药到家服务的医药电商平台。目‍‍‍前已引进诸多品牌/连锁药房,支持 B2C、O2O 购药模式,药品及各类健康品丰富多样、价格实惠、品质保障,专业的服务质量,为广大消费者的购药、用药保驾护航。  近期,在腾讯医药
腾讯云可观测平台
2022/09/02
1.8K0
【腾讯医药微信小程序性能优化案例】从0.9秒到0.5秒,原来这么简单!
微信小程序----全局状态管理 (便于全局埋点等操作)
说明 由于我是一个有着一颗玻璃心的博主,导致在2018年后博客很少更新。原因是由于我的分享并没有解决到部分人的问题,而导致被骂了。当时这颗玻璃心就碎了,所以这两年以来很是消极,博客很少更新。这里给那些关注我,支持我的朋友说声【对不起】!前段时间,看了一个工作两年时间博主的 2021 年 flag,突然回首,还有很多记忆。所以,我决定以后每周最少一篇博客,记录我的学习和成长。谢谢! 需求场景 小程序开发完成,接到需求:需要对小程序的所有页面【onLoad】生命周期进行埋点,对页面中的点击事件进行埋点。
Rattenking
2021/02/01
3.2K0
小程序架构
小程序上线以来,一向被称为“便携版”的APP,关于两者之间的区别,无外乎小程序相对轻便、开发成本低,下面让我们来看一下小程序的“庐山真面目”!
只喝牛奶的杀手
2019/08/26
1.9K0
小程序架构
# 小程序性能优化和异常监控
小程序的渲染层和逻辑层分别由两个线程管理,两个线程的通信由微信客户端(Native)做中转。
九旬
2023/10/17
3490
干货|小程序性能优化的几点实践技巧
“ 我们都知道,性能的好坏直接影响用户的体验。本文首先论述下如何评判一个小程序页面的性能情况,之后通过具体的案例重点讲解下几点实践技巧,最后再讲讲key值在渲染一个列表时发挥了一个怎么样的作用,以此来论述为啥key值对性能提升有帮助。 ” 实践技巧一 1 存在setData的数据过大 我们的功能里面有个滚动到底部加载的功能,优化前我们的做法是这样的: <!--只阐述逻辑,非真实代码--> // 1: 初始一个list,存储列表数据data = startList// 2: 监听
腾讯NEXT学位
2019/08/27
1.5K0
干货|小程序性能优化的几点实践技巧
小程序 | 5-页面生命周期
小程序中的每个页面都有一个对应的 js 文件,在小程序初始化过程中,会调用其中的 Page() 实现该页面实例的注册。
CnPeng
2021/05/17
5280
小程序 | 5-页面生命周期
通过这些手段,99%小程序性能问题都可以解决!!
小程序的冷启动速度是用户体验的关键之一,因此,小程序开发者通常需要采取一些措施来加速小程序的冷启动速度。在本文中,我们将介绍一些常用的方法来解决小程序冷启动加速的问题。
老码小张
2023/03/06
2.4K0
通过这些手段,99%小程序性能问题都可以解决!!
微信小程序性能极致优化——独立分包和性能测速上报
当前环境下,微信小程序成为了重要的活动运营渠道。为了满足页面高效率在小程序端、H5、App 端上线和迭代的需求,大量运营和活动页面在小程序端选择了 Webview 中内嵌 H5 的形式。因此,腾讯课堂小程序实现了 common-act 页面(common-act为小程序页面名称)作为通用的小程序 Webview 承载页。
童欧巴
2021/08/20
1.8K1
微信小程序性能极致优化——独立分包和性能测速上报
别再瞎摸索!一文吃透小程序开发性能优化,速度提升500%
嘿,各位程序猿小伙伴们!是不是在小程序开发的路上,总感觉自己像个无头苍蝇,各种性能问题搞得焦头烂额?一会儿小程序加载慢得像蜗牛,一会儿页面切换卡顿得让人怀疑人生。别担心,今天小编就来拯救你们啦!这篇文章可是小程序开发性能优化的 “武林秘籍”,只要吃透它,小程序速度提升 500% 不是梦哦!
小白的大数据之旅
2025/04/18
1370
别再瞎摸索!一文吃透小程序开发性能优化,速度提升500%
小程序性能优化总结
在小程序启动时,微信会在背后完成几项工作:下载小程序代码包、加载小程序代码包、初始化小程序首页。 初始化小程序环境是微信环境做的工作,我们只需要控制代码包大小,和通过一些相关的缓存策略控制,和资源控制,逻辑控制,分包加载控制来进行启动加载优化。
张炳
2019/08/02
8050
[猫头虎分享21天微信小程序基础入门教程]第18天:小程序的性能监控与优化
大家好,我是猫头虎,一名全栈软件工程师。今天我们继续微信小程序的学习,重点了解如何进行性能监控与优化。这些内容对于提升小程序的运行效率和用户体验至关重要。🌟
猫头虎
2024/05/28
2650
微信小程序性能监控方式
1) 用户首次访问或小程序同步更新时,命中环境预加载 2) 用户非首次访问,命中环境预加载 3) 用户非首次访问,未命中环境预加载
BLUSE
2022/11/14
2.1K0
同程艺龙小程序性能监控系统的探索与实践
导语 |近日,云+社区开发者大会(苏州站)圆满落幕。本次开发者邀请了腾讯内部及业内行业大咖就物联网、小程序、微服务等当前互联网领域的热点技术的落地实践问题进行了深度探讨。本文是同程艺龙资深架构师牛提罚老师,关于小程序性能监控系统全方位的实践分享。
coder_koala
2019/12/12
6300
同程艺龙小程序性能监控系统的探索与实践
小程序的页面切换性能优化
在小程序的开发过程中,页面切换是用户与应用交互的重要环节。页面切换的流畅性直接影响到用户体验。然而,随着功能的增多和页面复杂度的提升,页面切换可能会变得卡顿或延迟。因此,页面切换性能优化成为了小程序开发中的一个关键任务。
LucianaiB
2025/01/28
1410
WePY 在小程序性能调优上做出的探究
导语 性能调优是一个亘古不变的话题,无论是在传统H5上还是小程序中。因为实现机制不同,可能导致传统H5中的某些优化方式在小程序上并不适用。因此必须另开辟蹊径找出适合小程序的调估方式。 预先加载 这一节
Gcaufy
2017/05/09
4.9K1
WePY 在小程序性能调优上做出的探究
小程序的生命周期与性能调优
在小程序的开发中,生命周期和性能优化是两个至关重要的领域。生命周期是指小程序中各个页面或组件的创建、渲染、销毁等过程,它决定了开发者在各个时刻能访问到的状态。而性能优化是确保小程序流畅运行、减少资源消耗、提高用户体验的必要手段。
LucianaiB
2025/01/28
1250
【愚公系列】《微信小程序与云开发从入门到实践》030-关于自定义组件的高级用法
在微信小程序的开发中,自定义组件是实现灵活、可复用代码的重要工具。随着小程序生态的不断发展,开发者对于组件的需求也日益增长,从基础的组件使用到高级的技巧与模式,掌握自定义组件的高级用法已成为提升开发效率和用户体验的关键所在。
愚公搬代码
2025/01/21
2210
微信小程序函数处理之保姆级讲解
在使用Page()构造器注册页面时,需要使用生命周期函数,包括onLoad()页面加载时生命周期函数、onShow()页面显示时生命周期函数、onReady()页面初次渲染完成时生命周期函数、onHide()页面隐藏生命周期函数和onUnload()页面卸载生命周期函数。
淼学派对
2022/11/20
1.1K0
微信小程序函数处理之保姆级讲解
主流小程序框架性能分析
小程序官方把性能指标简单分为启动性能和运行时性能两个主题。「启动性能」让用户能够更快的打开并看到小程序的内容,「运行时性能」保障用户能够流畅的使用小程序的功能。小程序官方没提供最权威的性能指标参考值,但是文档里提供了不少获取性能数据的方法,我们需要整理一下我们关心的性能数据。
骑猪耍太极
2022/08/01
1.2K0
主流小程序框架性能分析
推荐阅读
相关推荐
呕心沥血整理!小程序性能优化的独家实战技巧
更多 >
LV.1
某大厂前端开发工程师
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验