我在一个Redux变量中存储了大量的JSON对象(~8k项,每个对象约1kb,总共为8mb)。这似乎使Redux调用变得很慢,即使对于最琐碎的操作和还原程序来说,它们实际上什么也不做。例如,调用此doNothing()操作和还原程序会在设备上产生500 on的等待时间,而不需要在调试器上运行:
// 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来分析这个问题,我在这里为Redux组件中的Redux调用提供了500 My的数据。对于较小的数据集(~500项),我仍然需要等待,但它更接近100‘s。这一切都在设备上,并且在模拟器和调试器上会变慢。我只是用一个按钮在一个简单的视图上测试这一点,以排除昂贵的重新选择和重新呈现带来的复杂情况。一个可能的复杂因素是,我使用的是redux-offline,它将Redux存储持久化到AsyncStorage,但是,当我关闭持久性时,性能却同样差。
理想情况下,我直接解决瓶颈,但我也对解决办法持开放态度。我试着用setTimeout包装动作调用,但这似乎推迟了我的React的减速。
谢谢您的建议!
发布于 2021-06-14 18:25:35
在redux状态下存储大量数据(间接存储在RAM中)并不是一种可靠的方法。
最佳做法是使用本地数据库,以便将数据存储在存储内存中。
对于ReactNative,有一个流行的数据库Watermelon DB适合这种情况
请查看它的文档:https://nozbe.github.io/WatermelonDB/
以下是它解决的方法
对于简单的应用程序,使用Redux或MobX和持久性适配器是最简单的方法。但是,当您开始扩展到数千或数万个数据库记录时,您的应用程序的启动速度将会很慢(尤其是在运行速度较慢的Android设备上)。将一个完整的数据库加载到JavaScript中是很昂贵的!西瓜靠懒惰来解决问题。在被请求之前没有装载任何东西。而且,由于所有查询都是在独立的原生线程上直接在SQLite数据库上执行的,所以大多数查询都是在瞬间解析的。
使用西瓜数据库存储/检索大型数据
同时,使用redux状态只存储小数据。
希望这能有所帮助
https://stackoverflow.com/questions/54138976
复制相似问题