性能

环境变量

注意 DEV 环境变量是否开启对性能会有直接的影响.

线程

分为三种 UI Thread, JS Thread, Native Modules Thread.

由于 js 性能差距, 一般性能问题都在 js 中查找. 调试的方案在文档中有写:

https://facebook.github.io/react-native/docs/android-ui-performance.html

ListView

一方面是首次渲染的性能, 一方面是更新时的性能.

首次渲染通过 ListView 可以控制只渲染一屏多的内容, 节省时间.

更新过程通过 shouldComponentUpdate 就可以节省大部分的时间. 另外用 ListView 的话, row 更新的判断逻辑通过不可变数据也许可以加快:

let dataSource = new ListView.DataSource({
  rowHasChanged: (r1, r2) => r1 !== r2
});

图片懒加载

React Native 当中的默认列表挂载时会抓取全部的图片.

Demo 中对 Android 做了手工处理, 只渲染可见区域的图片, 其他图片位置用空的 View 代替.

网上有找到一个组件, 在组件中遍历组件树加载可见的图片. 但不清楚是否会导致副作用.

https://github.com/IskenHuang/react-native-scrollview-lazyload

性能调试

对于 JavaScript 线程可以连接到 Chrome DevTools 当中通过 Timeline 查看.

对于 Android 性能, 可以参考文档用 systrace.py 抓取数据通过 chrome://tracing 查看. 不过没有比较多经验从 Android 的图表中大看不到什么, 一般性能问题应该在 JavaScript 里.

https://facebook.github.io/react-native/docs/android-ui-performance.html

调试菜单中开启 Perf Monitor 能显示帧率.

results matching ""

    No results matching ""