【发布时间】:2020-09-29 01:30:36
【问题描述】:
我对 React Native 应用的性能有一些疑问。
我正在开发一个 React Native 应用程序 (RN 0.62.2)。我正在各种 IOS 模拟器以及真实设备(iPhone 7、ios 13.3)上进行测试。
我主要使用模拟器,因为它是检查代码输出的最快方法,但是当我在 iPhone 7 上进行测试时,我发现了一些性能问题。
首先:我正在使用反应导航。当我在模拟器上打开性能监视器并导航到新屏幕(在同一个堆栈导航器中)时,JS 线程下降了大约 6-8 帧(从 60 到 52-54)。在具有 18-20 帧(从 60 到 40-42)的真实设备上。我导航到完全相同的屏幕。
其次,我通过 require 加载本地图像。在模拟器上,它们几乎立即出现。在真实设备上,它们需要一些时间才能出现。例如,我有一个带有背景图像的屏幕。在模拟器上,它会立即显示出来。然而,在真实设备上,加载大约需要一秒钟。
我在我的应用程序中使用了很多动画。我正在使用 reanimated 在 UI 线程上运行动画。在模拟器中,它们都工作得非常顺利,但在真实设备上,它们似乎遇到了一些问题。它们不像在模拟器上那么流畅。
另一件事:在 textinput 中输入一些文本时(文本存储在 useState-variable 中,同时通过onChangeText={v => setValue(v)} 键入。在模拟器上丢帧约 6-8 帧,但在真实帧上再次下降约 18-20 帧设备。
我现在的问题是:造成这种性能差异的原因可能是什么?我想出了一些可能的答案,其中一个(或多个)正确吗?
原因 1:metro 服务器
我在真实设备上测试,所以反应原生代码仍在我的笔记本电脑上。该应用程序尚未在我的手机上运行,因此所有请求都通过将我的手机连接到我的笔记本电脑的电缆。这会导致一些滞后。
原因 2:旧设备
我的 iphone 7 旧了。我正在运行 ios 13.3,但 iphone 已经快 4 年了。但是,当我在 iphone 7 模拟器(ios 11.4)上进行测试时,一切正常。
我还注意到一些奇怪的事情:在模拟器中运行相同的应用程序消耗的 RAM 内存大约是真实设备上的两倍。在模拟器的性能监视器中,当我打开应用程序或执行某些操作时,使用的 RAM 内存比真实设备上的多(大约 30-40 mb,有时大约 70-80 mb,取决于模拟器类型和ios版本)。
我还没有使用发布版本对其进行测试,因为我的应用还远未完成。通过 Metro 服务器测试的应用与发布版本之间是否存在性能差异?
编辑:
我已经在我的真实设备上测试了发布版本而不是调试版本。我看到比调试版本更好的性能,这很好。现在的问题是:我无法检查性能监视器。有人知道检查发布版本性能的好工具吗?
【问题讨论】:
标签: ios performance react-native