React Native 的性能可分为两部分:启动性能和运行时性能,后者较为普遍,官方文档中也有着详细的说明如何去分析及优化 UI 性能。本文着重讲述如何进行启动性能分析。
Systrace 是内置在 Android 里的性能分析工具,React Native Android 也采用了这套工具。按照官方的介绍使用命令行进行数据采集 ./systrace.py --time=10 -o trace.html sched gfx view -a com.example.rndemo
等待许久之后还是卡在 Tracing completed. Collecting output…
,没有结果 。
没有心思去给 systrace.py
找 bug,还是曲线救国算了,还有 GUI 可以用。打开 Android Studio 后,在 Tools> Android> Android Device Monitor
里是有 Systrace 选项的,如下图:
这里有两个小 Trick,因为我们要分析的是 RN 的启动性能,所以应该先开始测量再打开 App,然而在 App 关闭的状态下是无法选取到要测量的 App 的。应该在 App 打开的状况下选取该 App,然后关闭 App (在设置里强制停止),然后开始测量。为了使测量结果不包含太多冗余信息,可以只勾选 View System
、Activity Manager
和 Application
三项,如下图:
用 Chrome 打开 trace.html
就可以看到结果了,这个界面的操作不是非常直白,需要熟悉一下。利用好右上角的搜索框,Chrome 自带的搜索在这里用处不大。我们关注的线程主要有三个:
-
UI 线程,可以通过搜索
setupReactContext
找到 -
Native Module 线程,可以通过搜索
createCatalystInstance
找到 -
JS 线程,可以通过搜索
findMethod
找到
然后就可以慢慢分析整个 React Native 的启动过程啦。