我们正在为Angular应用程序实现ngRedux。这一切都运行得很好,但我关注的是:内存使用情况,尤其是移动设备。
我们的商店状态对象如下所示:
{
leads : [],
filters: [],
applictionStatuses: [],
}
让我们的用户说一下,我们的用户会在潜在客户列表中选择一个日期过滤器,这将从我们的API获取30.000个潜在客户(例如整整一年)。
据我了解redux,将克隆状态对象,然后下一个对象看起来像
{
leads : [ {object}, {object} ...],
filters: [ dateRange: { start: {date}, end: {end} }],
applictionStatuses: [],
}
当前状态下的潜在客户对象将保留30.000条记录。 否,当用户更改日期过滤器时,它将更新状态并使用新的日期过滤器创建新状态。它将获取更多或更少的记录,并将其转化为潜在客户。
理论上,状态对象看起来像:
{
leads : [ {object} ... times 40.000 ],
filters: [ dateRange: { start: {date}, end: {end} } ],
applictionStatuses: [],
}
这不意味着此时,在内存中将存储3个状态,总共有0 + 30.000 + 40.000个引脚= 70,000个内存中的引线。 状态的任何进一步变化都会重复国家和潜在客户。
只有在我提交并压制状态之前,我才会占据大量记忆以获取潜在客户记录。
我的推理是否存在错误,或者这是redux不可避免的事情?
我们可以决定将Leads从redux商店中取出或者放在一个单独的商店中,这样就没有那么多的状态对象和所有这些主要对象。
对任何人的意见或合并非常感兴趣。
干杯
答案 0 :(得分:1)
没有。 Redux不会在生产中将先前的状态树保留在内存中。有关详细信息,请参阅我在Is there any way to "commit" the state in Redux to free memory?的评论,以及Can a Redux store lead to a memory leak?和Redux and ALL the application state上的类似相关答案。