Back to Hippy

Performance API

docs/feature/feature3.0/performance.md

3.4.03.6 KB
Original Source

Performance API

背景

过去 Hippy SDK 缺乏对关键性能指标的获取和监控机制,各个业务都需自行打点或者魔改 SDK 进行统计,导致 Hippy 团队和接入业务均没有一个针对性能指标的统一基准,数据解读混乱,因此由 SDK 统一提供标准化的性能监控和指标显得非常有必要。

指标

2.1 启动耗时

Web 设计了 Performance API ,其中包含了 PerformanceResourceTiming 和 PerformanceNavigationTiming 接口,用于检索和分析有关加载应用程序资源的详细网络计时数据和首屏加载耗时数据

Hippy 3.0 新架构参考 Web 标准设计了新的性能 API:

性能数据获取示例:

global.performance.getEntries(): 获取所有的性能指标对象 (PerformanceResource、PerformanceNavigation等)

global.performance.getEntriesByType('navigation'): 获取启动加载性能指标对象

global.performance.getEntriesByType('resource'): 获取资源加载性能指标对象

PerformanceNavigationTiming:

指标对应 Key
Hippy 引擎加载开始hippyNativeInitStart
JS 引擎加载开始hippyJsEngineInitStart
JS 引擎加载结束hippyJsEngineInitEnd
Hippy 引擎加载结束hippyNativeInitEnd
JS Bundle 自执行耗时bundleInfo[]
业务入口执行开始hippyRunApplicationStart
业务入口执行结束hippyRunApplicationEnd
首帧绘制开始hippyFirstFrameStart
首帧绘制结束hippyFirstFrameEnd
启动耗时duration
指标名称name
指标类型entryType

bundleInfo:

指标对应 Key
主包/分包地址url
执行js包开始时间executeSourceStart
执行js包结束时间executeSourceEnd

PerformanceResourceTiming:

指标对应 Key
资源地址name
请求资源开始时间loadSourceStart
请求资源结束时间loadSourceEnd
请求耗时duration
指标类型entryType
  • 适用版本:3.1

2.2 内存

  • 现状:2.0 已支持 JS 层通过 Performance.memory 获取到 V8 引擎的内存数据(Hermes 待定)

  • 适用版本:2.0、3.1

2.3 流畅度

流畅度可通过 FPS 和 Janky Frame 指标来衡量

浏览器里提供了 requestAnimationFrame API,浏览器会在屏幕刷新(一帧)时机调用回调函数,JS 可在回调函数中执行动画等逻辑,也可用来计算 FPS 和 janky frame。Hippy 由于 JS 线程与 UI 线程独立,渲染异步执行,若通过终端实现 requestAnimationFrame 无法做到与浏览器一致的数据精确度(JS 层获取到的帧率会小于终端的真实帧率),但也可作为一个通用能力提供给业务作为参考。

  • Hippy 3.0 基于vsync信号重新实现了 requestAnimationFrame API
  • 适用版本:3.1

三、Aegis-Hippy 接入

aegis-sdk:1.42.4