是否应该始终以函数备忘化为首选?

问题描述 投票:0回答:2

最近,我接触到了函数备忘录。

我读到,如果函数参数没有改变,它可以用来优化对重计算函数的调用,通过缓存结果。

我的问题是,我是应该尽可能地使用memoization,还是只用于计算量大的函数?

也就是说,我也可以在简单的返回布尔比较的函数中使用它,但它不会增加负载吗?(导入库,使用装饰器,用memoize函数包装等)。

例子(随机)函数。

function isBigger(a: number, b: number) {
    return a > b;
}
angular typescript decorator memoization memoizee
2个回答
2
投票

在memoization成为值得做的事情之前,你往往可以对你的代码进行其他一些优化。而如果实现得不好(或者只是使用浅层次的平等),就会导致一些难以发现的bug。

例如,如果一个参数是一个数组,而新的东西被推送到这个数组中,它仍然是同一个数组。Shallow memoization会看到输入没有变化(是同一个数组),并返回被备忘录化的值。

但除了Shallow以外的任何东西都很容易变得和你优化出来的东西一样,运行成本很高。

所以,有时候它很有用,但很多时候比它的价值更麻烦、更杂乱。我在React中使用它来阻止某些简单的组件无谓地重新渲染。

我是否应该尽可能地一直使用memoization

ぃ,还是只针对重度计算操作的功能?

或只用于计算量大的功能?

尽量少用。


1
投票

函数记忆就像缓存一样,想象一下,你从服务器上获取一个响应,然后把它放到缓存中,每当你试图再次获取相同的数据时,你只是从缓存中获取它,所以你正在进行性能和内存优化。这是一个很酷的功能,在某些情况下,memoization起到了重要的作用。我的建议是:如果可以的话就使用它,如果会让你的代码变得一团糟就不要使用。

© www.soinside.com 2019 - 2024. All rights reserved.