• 开发教程与代码示例
  • 入门
  • 小程序框架
  • 小程序运行时
  • 自定义组件
  • 基础教程
  • 能力教程
  • 性能优化
  • 概述
  • 性能优化辅助平台/工具
  • 性能优化方法
  • 启动性能
  • 小程序启动流程
  • 小程序启动性能优化
  • 概述
  • 运行时性能
  • 小程序白屏&渲染异常问题优化
  • 安全
  • 概述
    收藏
    我的收藏

    小程序启动是小程序用户体验中极为重要的一环,启动耗时过长会造成小程序用户流失,影响用户体验。
    本章节的「启动」特指小程序冷启动,不包括小程序后台切前台的热启动。关于冷/热启动的定义,请参考小程序运行机制。

    小程序启动含义

    小程序的启动过程以「用户打开小程序」为起点,到小程序「页面最大元素渲染完成」为止
    用户打开小程序:可以通过扫码、小程序跳小程序或从 App 打开小程序等入口触发。
    页面最大元素渲染完成:以启动后第一个 LCP(LargestContentfulPaint)到达作为标识。
    举例说明:
      启动页为 A,启动后停留在启动页面,则启动耗时为启动 -> 页面 A 的 LCP 到达耗时。
      启动页为 A,启动后在 A 渲染完成前路由至 B,则启动耗时为启动 -> 页面 B 的 LCP 到达耗时。
    要了解小程序启动的具体流程,请参考《小程序启动流程》章节的介绍。

    启动性能指标

    数据获取见文档《性能指标获取方式》。

    冷启动耗时

    指标含义:从场景入口点击冷启动小程序,到进入小程序页面且页面内最大元素渲染完成的耗时,对应指标 LCP(largest contentful paint)

    冷启动打开率

    指标含义:从场景入口点击冷启动小程序,且页面最大元素渲染完成次数 / 场景入口点击冷启动小程序次数,即启动 LCP 指标到达占比。

    冷启动次数

    指标含义:各场景入口点击冷启动小程序的次数,即小程序冷启动 PV。

    冷启动流失人数

    指标含义:场景入口点击冷启动小程序,在页面最大元素渲染完成前主动离开的人。即。
    冷启动流失人数 =(1 - 冷启动打开率)* 冷启动人数

    首次有意义渲染耗时

    指标含义:从场景入口点击冷启动小程序进入页面,页面第一个有意义元素渲染完成耗时,该指标为开发者调用 tt.performance.mark 上报的 FMP,无上报逻辑则没有该指标。

    启动性能数据 FAQ

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