gpt4 book ai didi

javascript - 大型列表的过滤性能

转载 作者:太空宇宙 更新时间:2023-11-04 15:42:17 25 4
gpt4 key购买 nike

我有一个约 5000 个元素的列表,我想通过用户给出的 searchPhrase 对其进行过滤。通常用户输入过滤短语的第一个字母,然后输入第二个字母,然后输入第三个字母。例如,用户输入 'a',然后输入 'ab',然后输入 'abc'

我正在尝试使用reactjs/reselect库来提高过滤性能。我已经使用了这个库,如自述文件中的示例所示: Example我改变了这个方法:

export const getVisibleTodos = createSelector(
[ getVisibilityFilter, getTodos ],
(visibilityFilter, todos) => {
switch (visibilityFilter) {
case 'SHOW_ALL':
return todos
case 'SHOW_COMPLETED':
return todos.filter(t => t.completed)
case 'SHOW_ACTIVE':
return todos.filter(t => !t.completed)
}
}
)

到该实现:

export const getVisibleTodos = createSelector(
[getSearchPhrase, getTodos],
(searchPhrase, todos) => {
return todos.filter((x) => {
return x.firstName.indexOf(searchPhrase) >= 0;
});
}
)

我注意到每次用户输入下一个字母时 todos.length 属性都是相同的。当 searchPhrase 较长时,todos.length 不应该更短吗?我认为没有reactjs/reselect的性能是一样的。

当前面的 searchPhrase 是实际 searchPhrase 的子字符串时,是否可以过滤较短的 todos 列表?

最佳答案

这并不是重新选择提高性能的方式:无论是否重新选择,待办事项的实际过滤所花费的时间完全相同。

重新选择为您所做的是记住过滤:只要 getSearchPhrasegetTodos返回相同的值(由 === 相等定义),调用 getVisibleTodos多次过滤只过滤一次。

这在复杂的应用程序中很重要,因为您对 redux 状态有许多不相关的更改:如果不重新选择,对状态的任何更改都会导致所有选择器再次运行,即使状态的该部分未更改。

关于javascript - 大型列表的过滤性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43781244/

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