当前位置:  开发笔记 > 编程语言 > 正文

比较和对比redux reselect vs lodash/underscore memoize ......?

如何解决《比较和对比reduxreselectvslodash/underscorememoize?》经验,为你挑选了2个好方法。

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



1> Andrea Carra..:

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

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



2> Michael Liqu..:
有2个主要区别:

    在重新计算之前,还是仅第一个检查所有参数的更改?

    是否缓存所有结果,还是仅缓存最近的结果?

lodash _.memoize:

仅检查第一个参数的更改,并返回该第一个参数的最新结果,而不管其他参数是否已更改(默认情况下)。

保留由该第一个参数键入的所有结果值的无限大记录。

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

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来更改此行为,从而考虑所有或某些参数。这是测试和维护的额外逻辑,对您而言可能不值得。(解析程序功能确定备注功能所维护的缓存结果映射中要使用的键。默认情况下,该键仅设置为等于第一个参数。)

重新选择:

仅针对最新执行检查所有参数是否相等。

仅缓存单个结果(最新)。

请注意,reselect它主要用于redux应用程序,使用创建注释选择器createSelector。在中createSelector,由于期望与redux商店一起使用,因此每个参数都应具有吸气(选择器)功能。如果您不打算记住redux存储中的数据,您仍然可以使用它并像_.identity每个参数一样发送标识函数,但这很愚蠢。

幸运的是,如果你只是想memoize的功能,希望所有的参数检查的变化,你可以使用reselectdefaultMemoize,并获得所需的行为。

摘要/其他库(记忆一)

如果您要检查所有参数的更改,并且不使用redux或需要使用它们createSelector,则可能只想使用专门用于此目的的轻量级且快速的库即可memoize-one

如果您确实想要createSelector,则可以reselect最有可能满足您的所有需求。

如果要缓存所有结果,而不仅仅是最新结果,可以lodash _.memoize单独使用,也可以自定义reselect使用的功能lodash _.memoize

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有