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

19

我目前在探索如何减少Android启动时间。对于iOS而言这不是问题,但对于Android来说,我看到的启动时间在6-10秒之间。目标是在3-4秒左右。

以下是我找到的研究摘要:

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

虽然有解决方案,但并不完美:

  1. LazyReactPackage(实验性的)https://github.com/facebook/react-native/commit/797ca6c219b2a44f88f10c61d91e8cc21e2f306e
  2. 移除所有暴露的反射ReactMethodshttps://github.com/facebook/react-native/pull/10084

我对这些解决方案的问题是需要使用注解处理生成类(编译时)。我正在努力弄清楚如何运行这些解决方案,但没有成功。

此外,针对减少Android启动时间的其他建议也将非常有用。

谢谢!


6
你得到任何解决方案了吗? - Alauddin Ahmed
如果有人感兴趣,这里是用于提高 Android 启动时间的整体更改: https://github.com/mattermost/mattermost-mobile/pull/1598需要进行大量测量和理解启动成本。 - howdy_miguel
3个回答

2
为此,Facebook发布了他们的新构建机制Hermes,它将增加您的启动时间速度。但是您需要使用react native 0.60>才能使用此引擎。
最初的回答:

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


0

根据上述信息,很难回答Android设备的瓶颈在哪里,因为问题缺乏很多信息,例如设备规格、您进行测试的设备、React Native版本等。

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

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

然而,如果您仍然认为应该优化启动时间,则可以查看ram bundles。这种机制允许您仅加载您在启动时需要的JS bundle的一部分(在大多数应用程序中,有很多地方用户甚至可能不会看到,在这种情况下,此功能允许您仅在需要时加载此类部分)。因此,您可以简化您的入口点并仅加载您的包的一小部分。

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


-1
在您的项目目录中使用expo optimize。您还应确保没有添加任何额外的包,因为js包将在第一次启动时下载。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接