gpt4 book ai didi

javascript - 大型对象的 Redux 性能

转载 作者:行者123 更新时间:2023-11-30 21:19:10 25 4
gpt4 key购买 nike

我正在使用 Redux 和 React 构建 Web 应用程序。我的应用程序是一个呈现大量数据的分析应用程序。当我的商店变大时,我遇到了性能问题。

在 redux 中避免大数据性能问题的首选方法是什么?

应用结构

我的应用程序的结构是这样的,我有 settings(小 json)、results(大 json)和 calculate(settings)。计算是确定性和幂等的。我的应用程序以图形、表格等形式呈现设置元数据和结果。

因为计算是确定性和幂等的,所以我知道当设置不改变时结果也不会改变。当设置确实改变时,我的结果可能会改变。换句话说,我很乐意仅依靠设置来确定是否需要更新我的 UI。

Redux 行为和潜在解决方案

当我在我的商店中包含结果时,我的应用程序很慢:

let settings = { foo: "bar" };
let results = calculate(settings);
Object.assign({}, state, { settings: settings, results: results });

//deterministic and idempotent
function calculate(settings) {
return /*large json*/;
}

当我引用但不在我的商店中包含结果时,我的应用程序很快:

let settings = { foo: "bar" };
let results = calculate(settings);
Object.assign({}, state, { settings: settings, results: () => results });

//deterministic and idempotent
function calculate(settings) {
return /*large json*/;
}

我知道 redux 建议不要存储函数,所以另一种方法是使用字符串保存引用...类似:

let settings = { foo: "bar" };
let calculationId = uuid(); //could also be a hash of settings if I want to avoid some false positive UI re-rendering
let results = calculate(settings);
setResults(calculationId, results);
Object.assign({}, state, { settings: settings, calculationId: calculationId });

//deterministic and idempotent
function calculate(settings) {
return /*large json*/;
}

let fakeStore = { calculationId: null, results: null };

function setResults(calculationId, results) {
fakeStore. calculationId = calculationId;
fakeStore.results = results;
}

function getResults(calculationId) {
if(fakeStore.calculationId === calculationId) {
return fakeStore.results;
}
throw new Error("Invalid data access");
}

render() {
let calculationId = this.props.calculationId;
let results = getResults(calculationId);
}

将大数据保存在 store 之外是可行的,但 React 似乎有更好的方法来支持这种用例。

使用 redux 3.7.1,react 15.4.2,react-redux 4.4.8

最佳答案

简单地“将值保存到商店中”不会影响速度。重要的是您在 reducer 中处理这些值,并在您的 UI 中使用它们。因此,很难给出具体的建议,因为您还没有提供任何关于您实际如何使用这些数据的信息。

一般来说,根据其他评论,使用内存选择器(由 Reselect 库创建)有助于仅在输入实际发生变化时重新计算昂贵的派生值。

更多关于提升Redux使用性能的信息,请看:

关于javascript - 大型对象的 Redux 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45358420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com