概述收藏我的收藏
收藏
我的收藏小程序启动是小程序用户体验中极为重要的一环,启动耗时过长会造成小程序用户流失,影响用户体验。
本章节的「启动」特指小程序冷启动,不包括小程序后台切前台的热启动。关于冷/热启动的定义,请参考小程序运行机制。
小程序启动含义
小程序的启动过程以「用户打开小程序」为起点,到小程序「页面最大元素渲染完成」为止。
用户打开小程序:可以通过扫码、小程序跳小程序或从 App 打开小程序等入口触发。
举例说明:
- •启动页为 A,启动后停留在启动页面,则启动耗时为启动 -> 页面 A 的 LCP 到达耗时。
- •启动页为 A,启动后在 A 渲染完成前路由至 B,则启动耗时为启动 -> 页面 B 的 LCP 到达耗时。
启动性能指标
冷启动耗时
冷启动打开率
冷启动次数
指标含义:各场景入口点击冷启动小程序的次数,即小程序冷启动 PV。
冷启动流失人数
指标含义:场景入口点击冷启动小程序,在页面最大元素渲染完成前主动离开的人。即。
冷启动流失人数 =(1 - 冷启动打开率)* 冷启动人数
。首次有意义渲染耗时
启动性能数据 FAQ
(1) 为什么「冷启动耗时」与各个过程指标之和差异很大?比如「代码包下载耗时」、「HTML 和 CSS 加载耗时」「页面首次渲染耗时」等。
虽然冷启动耗时包含代码包下载、创建 App 等阶段,但性能数据中的 「冷启动耗时」 与各过程指标之和并不存在必然关联。原因有几方面:
- •这几项指标的粒度是不一致的:冷启动耗时是以一次冷启动为粒度,下载耗时是以代码包为粒度,首帧渲染耗时是以页面为粒度,之间并不是一对一的。
- •包下载不仅发生在启动阶段。
- ◦下载也可能发生在页面切换、分包预下载的场景。启动过程中不一定会下载代码包,也不一定只下载一个代码包。
- •HTML 和 CSS 加载耗时不一定影响启动耗时。
- ◦该过程加载也可能发生在预加载(即启动前)减少对冷启动耗时的影响。
- •这几个耗时本身是 80 分位值,涉及不同的维度,没有对应关系,直接求和无意义。表示的是发生该阶段的耗时水平,用于开发者参考优化每个阶段的耗时,耗时越高表示对冷启动耗时影响可能性越大。
- •启动过程中,除了平台列出的过程耗时,某些条件下也存在小程序相关信息和运行环境准备的耗时。这部分耗时也与 「启动总耗时 - 下载耗时 - 初次渲染耗时。.」没有必然关系,因框架过程对于开发者来说无优化空间,平台暂不提供,仅给出开发者有操作空间的流程。
(2) 为什么启动每个阶段耗时都下降了,总耗时反而上升了?
各阶段耗时平均值的下降不一定反应在总耗时的下降。例如。
- •小程序新版本发布后,即使各阶段耗时都下降,下载比例的升高反而可能导致总耗时的上升。
- •某个很小的分包下载量突然飙升,可能降低了平均下载耗时,但是对启动没有明显影响。
(3) 为什么每次小程序发布新版本 都会导致一段时间内启动耗时的上涨?
小程序新版本发布后,部分场景会阻塞小程序的启动流程,影响小程序的启动耗时。发生在首次访问小程序或包被清理时。一般来说,启动耗时会在版本发布几天内恢复到稳定水平。
(4) 三方框架小程序如何优化?
可以结合三方框架官网(taro / uniapp)的建议和小程序平台提供的优化手段。小程序平台提供的优化手段都是通用优化手段,不区分框架或原生。
(5) 计算冷启动耗时是算的落地页吗?如果有立即路由会影响么?
冷启动耗时是指「从场景入口点击冷启动小程序,到进入小程序页面且页面内最大元素渲染完成的耗时」,即用户首次看到页面内容的耗时。如果在启动阶段立即路由,如:启动页为 A,启动后在 A 渲染完成前路由至 B,则启动耗时为启动 -> 页面 B 的 LCP 到达耗时。
启动后立即路由一定会影响小程序启动耗时,主要劣化原因有:
- 1.启动时小程序框架层优化有预创建小程序运行环境、预加载资源等,次页环境准备较晚,立即路由导致次页无法命中框架优化。
- 2.小程序触发次页路由时机偏晚(依赖业务逻辑的加载)。