为了更好的帮助开发者了解和分析小程序性能状况,我们在「小程序助手」小程序上提供了性能相关的数据统计。同时,开发者也可以根据业务需要自己进行上报分析。
(1) 为什么「启动总耗时」与 「下载耗时」、「js 注入耗时」、「初次渲染耗时」之和差异很大?
虽然启动总耗时包含下载、js 注入和初次渲染的阶段,但性能数据中的 「启动总耗时」 与 「下载耗时 + js 注入耗时 + 初次渲染耗时」之间并不存在必然关联。原因有几方面:
- 这几项指标的粒度是不一致的:启动总耗时是以一次冷启动为粒度,下载耗时是以代码包为粒度,js 注入耗时是以文件为粒度,初次渲染耗时是以页面为粒度,之间并不是一对一的。
- 下载、js 注入、初次渲染都不仅发生在启动阶段。
- 下载也可能发生在页面切换、分包预下载的场景。启动过程中不一定会下载代码包,也不一定只下载一个代码包。
- js 注入也可能发生在页面切换和小程序运行过程中。启动过程中可能会注入一个或多个文件,且受到缓存等维度的影响。
- 首次渲染也可能发生在页面切换过程中,也受到缓存等维度的影响
- 这几个耗时本身是平均值,涉及不同的维度,没有对应关系,求和无意义。
- 下载耗时、js 注入耗时、初次渲染耗时只是提供给开发者参考优化每个阶段的耗时,并不能用来计算与启动总耗时的关系
- 启动过程中,除了这三部分耗时,某些条件下也存在小程序相关信息和运行环境准备的耗时。这部分耗时也与 「启动总耗时 - 下载耗时 - js 注入耗时 - 初次渲染耗时」没有必然关系。
(2) 为什么启动每个阶段耗时都下降了,总耗时反而上升了?
各阶段耗时平均值的下降不一定反应在总耗时的下降。例如
- 小程序新版本发布后,即使各阶段耗时都下降,下载比例的升高反而可能导致总耗时的上升。
- 某个很小的分包下载量突然飙升,可能降低了平均下载耗时,但是对启动没有明显影响。
(3) 为什么每次小程序版本版本发布都会导致一段时间内启动耗时的上涨?
小程序新版本发布后,为了保障用户尽快的切换到最新版本,用户启动小程序时需要等待小程序同步更新(具体策略请参考小程序更新机制)。
此外,版本更新会引起包含小程序信息缓存、Code Caching、初始渲染缓存在内的各类缓存发生更新,也会影响更新后小程序首次启动的耗时。一般来说,启动耗时会在版本发布几天内恢复到稳定水平。