首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对比redux reselect与lodash /下划线记忆...?

对比redux reselect与lodash /下划线记忆...?
EN

Stack Overflow用户
提问于 2017-01-22 04:25:53
回答 2查看 2K关注 0票数 7

我想知道是否有人可以比较和对比redux reselect lib和lodash memoize之间的差异...?

EN

回答 2

Stack Overflow用户

发布于 2017-04-26 23:32:19

Lodash's memoize是一个经典的记忆实用程序:它(默认情况下)使用函数的第一个参数作为缓存键来记录函数。Lodash的memoize跟踪/缓存使用不同缓存键获得的所有结果。

相反,Reselect会检查每个提供的参数,并且(默认情况下)仅在其中一个参数发生更改时才重新计算结果。Reselect的选择器默认缓存大小为1,主要用于稳定状态派生数据,避免不必要的重新计算。

票数 7
EN

Stack Overflow用户

发布于 2018-07-27 04:22:16

主要有两点不同:

  1. 是在重新计算之前检查所有参数的更改,还是只检查第一个参数?
  2. 是缓存所有结果,还是只缓存最近的结果?

lodash _.memoize:

  • 仅检查第一个参数的更改,并返回第一个参数的最新结果,而不管其他参数是否已更改(默认情况下)。
  • 保留了由第一个参数键入的所有结果值的无限大记录。

lodash _.memoize的问题案例示例:

代码语言:javascript
复制
const memoizedFunc = _.memoize(
    (param1, param2) => param1 + param2
);

console.log(memoizedFunc(1, 2)); // 3
console.log(memoizedFunc(1, 3)); // 3 (but it should be 4!)

请注意,您可以编写一个自定义resolver函数,并将其作为第二个参数传递给_.memoize,以更改此行为,从而将所有或部分参数考虑在内。这是需要测试和维护的额外逻辑,对您来说可能值得,也可能不值得。(解析器函数确定要在memoized函数维护的缓存结果映射中使用的键。默认情况下,仅将键设置为等于第一个参数。)

重新选择:

  • 仅根据最近的执行检查所有参数是否相等。
  • 仅缓存单个结果(最近的结果)。

请注意,reselect主要用于redux应用程序,使用createSelector创建带记忆的选择器。在createSelector中,由于期望与redux存储一起使用,因此每个参数都应该有一个getter (选择器)函数。如果您不想存储来自redux存储的数据,您仍然可以使用它,并为每个参数发送一个像_.identity这样的标识函数,但这将是愚蠢的。

幸运的是,如果您只想记忆函数,并且希望检查所有参数的更改,则可以使用reselectdefaultMemoize并获得所需的行为。

摘要/其他库(memoize-one)

如果您希望检查所有参数的更改,并且不使用redux,或者需要使用createSelector,那么您可能只想使用专门针对此目的的非常轻量级且快速的库,如memoize-one

如果你确实想要createSelector,你可以直接使用reselect来满足你所有的需求。

如果您希望缓存所有结果,而不仅仅是最新的结果,则可以单独使用lodash _.memoize,也可以使用customize reselect to use that feature of lodash _.memoize

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41784089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档