React Native Performance Simulator vs. Real Device

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React Native Performance Simulator vs. Real Device相关的知识,希望对你有一定的参考价值。

我对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加载本地图像。在模拟器上,它们几乎立即出现。在实际设备上,它们需要一些时间才能显示出来。例如,我有一个带有背景图像的屏幕。在模拟器上,它会立即显示。但是,在实际设备上,加载大约需要一秒钟。

我在应用中使用了很多动画。我正在使用动画来在UI线程上运行动画。在模拟器中,它们都非常平稳地工作,但是在实际设备上,似乎存在一些问题。它们不像模拟器那样平滑。

[另一件事:在文本输入中输入一些文本时(通过onChangeText=v => setValue(v)键入时,文本存储在useState变量中。在模拟器上帧丢失大约6-8帧,但在真实设备上再次丢失大约18-20帧。

我现在的问题是:性能差异的原因可能是什么?我想出了一些可能的答案,一个(或多个)正确吗?

原因1:都市服务器

我正在测试中在真实设备上,因此react本机代码仍在我的笔记本电脑上。该应用程序尚未在我的手机上运行,​​因此所有请求都通过将手机连接到笔记本电脑的电缆进行。这会导致一些滞后。

原因2:旧设备

我的iPhone 7很旧。我正在运行ios 13.3,但iphone已快4岁了。但是,当我在iphone 7模拟器(ios 11.4)上进行测试时,一切都可以顺利进行。

[我还注意到了一些奇怪的事情:在模拟器中运行同一应用程序所消耗的RAM内存大约是真实设备上的两倍。在模拟器上的性能监视器中,当我打开应用程序或执行某些操作时,使用的RAM内存比实际设备上的要多(大约30-40 mb,有时大约70-80 mb,这取决于模拟器的类型)和ios版本)。

我尚未通过发布版本对其进行测试,因为我的应用还远远没有完成。通过Metro服务器进行的应用程序测试与发布版本之间是否存在性能差异?

编辑:

我已经在我的真实设备上测试了发行版而不是调试版。与调试版本相比,我看到了更好的性能,所以很好。现在的问题是:我无法检查性能监视器。有人知道检查发布版本性能的好工具吗?

答案

很好的问题!

不知道对发布版本运行调试器的任何方法。就是说-您可以在物理设备上运行Debug版本。

  1. 将设备连接到Macbook
  2. 在XCode中打开ios / .xcworkspace
  3. 选择设备和产品->运行

您将获得所有典型的调试技巧-检查器,调试器,性能监视器。假设您的Release版本比Debug版本运行得更快。

以上是关于React Native Performance Simulator vs. Real Device的主要内容,如果未能解决你的问题,请参考以下文章

修复mysql:[ERROR] Native table ‘performance_schema’

Table 'performance_schema.session_status' doesn't exist和Native table 'performance_sc

解决:The APR based Apache Tomcat Native library which allows optimal performance in production...(示例代码

The APR based Apache Tomcat Native library which allows optimal performance in production environmen

The Apache Tomcat Native library which allows optimal performance in production environments was not

ERROR 1682 (HY000): Native table 'performance_schema'.'session_variables' has the wr