tas*_*ock 6 performance reactjs react-native redux react-redux
我将大量JSON对象存储在单个Redux变量中(约8k项,每个项的对象约1kb,总计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;
}
};Run Code Online (Sandbox Code Playgroud)
解决这个问题的最佳尝试是通过slowlog,这是我在React组件中为Redux调用得出500毫秒数字的地方。对于较小的数据集(约500个项目),我仍然需要等待,但接近100ms。这些都在设备上,并且在模拟器和调试器上会变慢。我在一个简单的视图上用一个按钮进行测试,以排除昂贵的重新选择和重新渲染带来的麻烦。可能的麻烦是,我正在使用redux-offline它将Redux存储AsyncStorage持久化到,但是当我关闭持久性时,我的性能同样会很差。
理想情况下,我直接解决瓶颈问题,但是我也可以解决问题。我尝试将动作调用包装在中setTimeout,但这似乎延迟了我的React Native应用程序的运行速度。
在此先感谢您的任何建议!
小智 2
在 redux 状态下存储大量数据并间接存储在 RAM 中并不是一种可靠的方法。
最佳实践是使用本地数据库,以便将数据存储在存储内存中。
对于ReactNative来说,有一个流行的数据库Watermelon DB适合这种场景
请查看它的文档: https: //nozbe.github.io/WatermelonDB/
这是它解决的问题
对于简单的应用程序,使用 Redux 或 MobX 以及持久性适配器是最简单的方法。但是,当您开始扩展到数千或数万条数据库记录时,您的应用程序现在启动速度会很慢(尤其是在速度较慢的 Android 设备上)。将完整数据库加载到 JavaScript 中的成本很高!
西瓜通过懒惰来解决这个问题。在请求之前不会加载任何内容。由于所有查询都是在单独的本机线程上直接在坚如磐石的 SQLite 数据库上执行,因此大多数查询都会立即解决。
使用Watermelon DB存储/检索大数据
同时,使用 redux 状态仅存储小数据。
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
380 次 |
| 最近记录: |