用React和Redux处理数据密集型请求的最佳方法是什么?

时间:2019-12-04 15:42:30

标签: javascript reactjs redux react-redux

我的页面的大部分内容基本上是40-100个组件的列表,每个组件包含大约11 KB数据(JSON格式)。问题在于,11倍的100乘以1.1 MB的内存,对于在较旧的移动设备上的浏览器来说,在Redux状态下存储似乎有点占用大量内存。它使我华丽的CSS动画看起来不连贯,并且按钮需要大约一秒钟的时间来切换开/关状态。

由于每个组件的高度恰好为148px,所以我的第一个想法是使用虚拟列表(Virtuoso),该列表一次只能渲染屏幕上可以容纳的尽可能多的项目(例如5-8个顶部)。这使第一次渲染的速度更快,但是却没有使动画更流畅,这无疑证实了主要是内存问题。

因此,如果我无法将所有数据存储并保留在状态对象中,那么我需要做一些类似于Virtuoso的事情,并且只保留渲染当前屏幕所需的数据。现在,我不确定Redux在内部如何工作,但是如果状态是不可变的,这是否意味着在那里进行的所有操作都保留在那里?那不是意味着我试图做一些不可能的事情,或者至少是反模式吗?

哦,更糟糕的是,数据将需要每3秒更新一次,这意味着某个组件有时会消失,而仅在下一次更新时重新出现。我还没有测试过这将如何影响Virtuoso滚动,但是我并不完全期望完美的即插即用行为。

我很欣赏有关如何使用redux及其(可能是)其中间件解决此问题的想法,因为它是我熟悉的唯一架构,并且自动切换到例如atm。 Flux意味着必须从头开始学习它,并重写约2000行redux代码。

1 个答案:

答案 0 :(得分:0)

我从未使用过Virtuoso,react-virtualized或react-window,但这看起来像是您可以使用其中一个库解决的问题。

React应用程序的其他部分是否关心列表中呈现的数据?

  • 如果不是,则将数据置于此组件的本地状态,而不是Redux。
  • 如果这样做,也许尝试在组件装入时在localStorage中设置此巨大列表,在卸载时取消设置它,并使用组件的本地状态选择开始/结束索引以选择数据片段。

另请参阅:https://blog.jakoblind.no/is-using-a-mix-of-redux-state-and-react-local-component-state-ok/