react原生应用中的Redux包含大量数据的速度非常慢

时间:2019-01-11 00:53:39

标签: reactjs performance react-native redux react-redux

我将大量json对象存储在一个redux变量中(约8k项,每个项的对象约1 KB,总计8mb)。即使对于实际上不执行任何操作的大多数琐碎动作和减速器,这似乎也会使redux调用变慢。例如,调用此doNothing()操作和reducer会在设备上产生500ms的等待时间,而无需在调试器上运行:

// action
export const doNothing = () => {
  return {
    type: DO_NOTHING
  };
};

// reducer
export default (state = INITIAL_STATE, action) => {
  switch (action.type) {
    case DO_NOTHING: {
      return state;
    }
    default:
      return state;
  }
};

解决这个问题的最佳尝试是通过slowlog,这是我在react组件中为redux调用提供500ms数字的地方。对于较小的数据集(约500个项目),我仍然需要等待,但接近100毫秒。这些都在设备上,并且在模拟器和调试器上会变慢。我在一个简单的视图上用一个按钮进行测试,以排除昂贵的重新选择和重新渲染带来的麻烦。可能的麻烦是,我正在使用redux-offline将Redux存储持久存储到AsyncStorage,但是当我关闭持久性时,我的性能同样会很差。

理想情况下,我直接解决了瓶颈问题,但是我也可以解决问题。我尝试将动作调用包装在setTimeout中,但这似乎只是延迟了我的本机应用程序的运行速度。

提前感谢您的任何建议!

2 个答案:

答案 0 :(得分:0)

只需阅读以下文章,您就会了解 U 发生了什么以及如何解决该问题:

Click Here

答案 1 :(得分:0)

在 redux 状态下存储大量数据并间接存储在 RAM 中并不是一种可靠的方法。

最佳做法是使用本地数据库,以便将数据存储在存储内存中。

对于 ReactNative,有一个流行的数据库 Watermelon DB 适合这种场景

请查看它的文档:https://nozbe.github.io/WatermelonDB/

这就是它解决的问题

<块引用>

对于简单的应用程序,使用 Redux 或 MobX 和持久化适配器是最简单的方法。但是,当您开始扩展到数千或数万条数据库记录时,您的应用程序现在启动速度会很慢(尤其是在速度较慢的 Android 设备上)。将一个完整的数据库加载到 JavaScript 中是很昂贵的!

<块引用>

西瓜通过懒惰来修复它。在请求之前不会加载任何内容。由于所有查询都是直接在独立的原生线程上的坚如磐石的 SQLite 数据库上执行的,因此大多数查询都会立即解决。

使用西瓜数据库存储/检索大数据

同时,使用 redux 状态只存储小数据。

希望对你有帮助?