理解在回放原生状态中的懒惰加载

React Industrict已经成为跨平台移动开发的平台,允许开发者用JavaScript和React来构建本地级的应用程序。随着应用程序的规模,性能瓶颈经常出现 — — 特别是在初始负荷期间。缓解这些问题的最有效策略之一是[ 懒惰的加载[。这一技术将组件、屏幕和资产的加载推迟到实际需要时,从而减少应用程序的启动时间和内存足迹。在这个扩展指南中,我们将深入执行React Indust里懒惰的加载,探索从基本模式到高级与导航和图像处理的结合的一切。

什么是懒惰装填?

懒惰加载是一种设计模式,它将对象、组件或资源的初始化推迟到需要时。在React Natural语境中,这意味着屏幕或组件不会被加载和提供,直到用户导航到它或它的能见度变得迫在眉睫。

  • 较快的初始渲染 – 应用程序的发射只有基本组件,因此用户更快地看到内容.
  • 下层内存使用 – 未使用的组件不保存在内存中.
  • 改进的响应性 – 主线在启动期间不会被大量进口阻塞.

在React Industrial中,懒惰加载一般通过使用的动态导入来进行,或者通过像 反应导航[这样的库专用解决方案来进行屏幕级懒惰加载.

反应中懒惰加载的好处

采用懒惰的装载方式,可产生广泛的性能改进:

  1. 减小初始捆绑大小 – 代码拆分允许JavaScript捆绑被拆解成按需装入的较小块,这至关重要,因为React Industrial apps 运送一个必须在发射时解析和执行的JavaScript捆绑.
  2. 更早时间进行交互(TTI) – 该应用程序由于重计算和大型库导入被推迟而变得可以更早使用.
  3. 更好的电池寿命 – 离子资源不装载,降低CPU的使用率并保存电池.
  4. 易维护 – 懒惰加载鼓励模块化代码,使代码库更容易导航和测试.

虽然这些好处是普遍的,但是懒惰的加载对于许多屏幕,复杂的图表,丰富的媒体,或者第三方SDK的应用来说特别有价值.

执行Lazy Larging with React.lazy 和 Suspense 的懒惰加载

反动原创支持和自0.62版本以来,但与网络反动相比,还是有细微差别的。 让我们走过具体的执行。

基本设置

首先,确保您使用兼容的React Industrial版本( ⁇ 0.62),并确保您的捆绑器(Metro)配置支持动态导入. Metro支持动态导入自0.59版本起的外框外框.

步骤1 - 懒惰装入组件

创建重件, 例如一个复杂的图表或一个大列表, 并使用 导入 :

步骤2 - 与悬念相接

装入组件时提供倒置的 UI :

反应土著的重要洞穴

在网络上, [[FLT: 7] 与 React. lazy 进行无缝的工作。 在 React Indust, [[FLT: 8]] 中, 并非所有组件类型都在其内部完美工作, 特别是依赖 [[FLT: 9] 的遗留类组件或组件。 总是在真实设备上测试懒惰的组件。 对于大多数使用钩子的功能组件来说, 效果很好 。

高级懒惰加载技术

屏幕层懒惰加载中反弹导航

移动应用程序中懒惰加载的最常用例是延时屏幕加载。 React Navigation,事实上的导航库,通过它的 prop和动态支持这个模式退出框中。

带有 React 导航 6 的示例 :

[]]

您可以通过使用 预留 来进一步优化: 当一个用户在标签上徘徊或导航到屏幕时, 您可以使用 或手动 调用开始提前加载下一个屏幕 。

懒惰的装入图像

图像往往是移动应用程序中最重的资产。 懒装图像意味着推迟下载到接近视图。 您可以使用库实现这一点, 如 [[FLT: 0]] 反应- 内在- 快速图像 或 [[FLT: 2]] expo- image [ , 这两个库都支持懒装和从框中跳出。 对于自定义的解决方案, 请通过 [ [[FLT: 16] 或 [ [[FLT: 17]] 的 [[FLT: 18]] 的 prop 。

仅使用 FlatList 来懒惰地加载可见行的例子 :

[]]

这种方法确保只提供可见窗口内的项目,而其他项目则虚拟化。

以 React.lazy 和 React 导航屏幕进行代码分割

对于大型应用程序,您也可以使用React.lazy与React Navigation的功能组合,将JavaScript捆绑每个屏幕从React Navigation v5中分割开来,然而,请注意React Navigation v6直接使用组件,这样您就可以如上所示懒惰地包扎.

反应原生的懒惰加载最佳做法

  • 识别懒惰加载的 – 描述您的应用程序以找到最重的组件。 通常这些是图表、地图、视频播放器、复杂形式,并显示用户很少访问。
  • 提供有意义的倒置 – 使用骨架屏幕,闪烁效果,或活动指示器,使用户知道正在发生什么.
  • 与caching 的战斗 — 一旦一个组件被装入,考虑使用状态管理(如Redux,Recoil)或]将其保存在内存中以避免重挂.
  • 避免懒惰地装入琐碎的部件[ –动态导入和悬浮的间接费用可以超过非常小的部件的效益(例如,单]]).
  • 低端设备的测试 — 性能增益在内存有限且CPU较慢的设备上最为显著. 模拟这些条件.
  • 使用 Metro 的内线要求 — 对于无法使用动态导入的旧项目, Metro 支持在 Metro 配置中使用 推迟模块加载。这是低级方法,但有效。

常见的陷阱和如何避免它们

1. 超负荷装载

懒惰地加载每个单个组件都会导致用户体验到过度的加载旋转器,只关注屏幕和昂贵的组件.

2. 过渡期间的懒惰装入

如果您懒惰地加载用户通过堆栈或制表符转换导航到的屏幕,则加载状态会引发一个罐形延迟。当上一个屏幕挂载时或者当用户在按钮上徘徊时,考虑预拖放。

3. 不处理错误

动态导入可能因网络问题或捆绑腐败而失败。 使用 [[FLT: 25]] 来捕捉悬浮回落错误 :

]]

4. 跨平台的不一致行为

iOS和Android可能处理不同,总是在两个平台上进行测试.

业绩计量和监测

在部署懒惰加载之前,使用诸如 React Index Performance Monitor(通过开发者菜单提供),Flipper[,或 React DevTools等工具建立基线度量. Track:

  • 初始渲染时间( TTIR)
  • 交互时间( TTI)
  • 懒惰加载前后的内存使用
  • 每个块的套装大小

实施后,重新测量以量化改进。 在许多现实世界中,“反动原生”应用程序(例如])中,“跳跃”的应用程序[ , 懒惰的加载将启动时间减少了40 % 。

外部资源和进一步阅读

结论

懒惰的加载并不是银弹,但如果应用正确,它就是一个反动原开发者性能工具包中最强大的工具。 通过推迟非基本组件、图像和屏幕的加载,你可以大幅缩短初始加载时间,降低内存压力,并向用户传递丝绸的烟雾体验。 从应用中最重的罪犯开始 — — 像是溅射屏幕、复杂的图表,或者很少访问标签 — — 并逐渐将懒惰的加载扩展到其他部分。 记住,在真实设备上进行测量,并提供优雅的反弹。 懒惰的加载将让您的反动原应用感觉更快、更专业。