如何减少React Native Android应用程序的启动时间

时间:2017-12-06 17:06:43

标签: android gradle react-native startup annotation-processing

我目前正试图弄清楚如何减少Android启动时间。它不是iOS的问题,但对于Android,我看到的时间是6-10秒。目标是大约3-4秒。

以下是我遇到的研究摘要

  • createReactContext :反应桥初始化并开始加载所有本机模块
  • getMethodDescriptors :使用反射,它使用ReactMethod
  • 编译(运行时)所有公开方法的列表

解决方案存在但不完美:

  1. LazyReactPackage (实验性)https://github.com/facebook/react-native/commit/797ca6c219b2a44f88f10c61d91e8cc21e2f306e
  2. 删除所有曝光的反射 ReactMethods https://github.com/facebook/react-native/pull/10084
  3. 我对这些解决方案的问题在于使用注释处理来生成类(编译时)。我正在试图弄清楚如何让这些解决方案运转起来没有运气。

    此外,关于减少Android启动时间的其他建议也会有所帮助。

    谢谢!

3 个答案:

答案 0 :(得分:2)

为此,Facebook发布了其新的构建机制Hermes,它将提高启动时间。但是您需要react native 0.60>才能使用此引擎。 https://facebook.github.io/react-native/blog/2019/07/17/hermes

答案 1 :(得分:0)

在项目目录中使用expo优化。 您还应确保未添加任何额外的软件包,因为js软件包将在首次启动时下载。

答案 2 :(得分:0)

根据上述信息,很难回答 Android 设备的瓶颈是什么,因为该问题缺少大量信息,例如设备规格、您进行测试的设备、react-native 版本等。

这个问题很久以前就被问到了,我觉得当时主要的瓶颈是在旧的JSC的使用上。由于RN仅从0.59版本开始使用自己的JSC(不是Android默认)。正如其他人指出的那样,从 RN 0.60 开始,他们还添加了使用 Hermes 引擎的功能(iOS 上的 RN 0.64 也可以使用)。所有这些优化都是为了提高 Android 设备的性能。

我现在认为,将 RN 0.60 与新的 JSC 或 Hermes 一起使用不会有问题。并且启动时间将与在 iOS 上大致相同(甚至可能更快)(假设您将在类似设备上进行测试)。

但是,如果您仍然认为应该优化启动时间,可以查看ram bundles。这种机制允许你只加载 JS 包的一部分,你在启动时需要(在很多应用程序中有很多地方,用户甚至可能看不到,这个功能允许你加载这些部分,只有当它们必需的)。因此,您可以简化入口点并仅加载包的一小部分。

你可以看看react-native-bundle-splitter。该库与几乎所有流行的导航库完美集成,并允许您推迟特定路线的加载。例如,如果您有一个登录屏幕,您可以在启动时仅加载此屏幕,而所有其他屏幕仅在用户可以看到它们时才在后台加载或开始加载它们。并且您的复杂应用程序的启动时间几乎与“Hello world”应用程序的启动时间相同。

相关问题