React Native延迟渲染

时间:2018-08-03 02:46:19

标签: performance react-native render bridge

由于React本机应用程序的性能存在可怕的问题, 可以通过在几个事件中延迟渲染组件来解决?

考虑一个例子,

我有一个应用程序,该应用程序从API提取数据并将其呈现在清单中。平面列表中的每个组件都有Touchable事件。

现在的问题是发生滚动事件时桥接完成,并且我们希望在达到结束阈值后立即从API中获取更多数据。

JS将它们呈现到RCTView中,但同时也在忙于获取导致UI冻结的数据。

能否延迟最后一次渲染,直到遇到JS线程完全空闲为止?还是有更好的解决方案?

1 个答案:

答案 0 :(得分:0)

由于您正在获取主线程上的数据,并假设数据足够复杂以至于处理起来可能会延迟UI线程,所以最好等到下一次重绘来获取和处理数据。

使用requestAnimationFrame()函数将数据提取部分的执行延迟到UI完成执行为止。

let response = await fetch("https://emberall.com/user/1/recordings");
let recordingsJSON = await response.json();

function processRecording(recordingIndex) {
  if (recordingIndex < recordingsJSON.length) {
    mergeRecordingToLocalDatabase(recordings[recordingIndex]);
    requestAnimationFrame(() => processRecording(recordingIndex + 1));
  }
}
processRecording(0);

示例从https://corbt.com/posts/2015/12/22/breaking-up-heavy-processing-in-react-native.html

复制而来