javascript中的记忆化和缓存功能执行是否相同?

时间:2018-07-15 18:26:08

标签: javascript memoization

我最近在一次采访中被问到如何才能缓存任何功能的执行?我只听说过 JavaScript中的功能缓存

我检查了Stack overflow,但对此一无所知。记忆和缓存功能的执行是相同还是不同?

我知道 Javascript中的功能缓存,称为 Memoization ,它不缓存结果,也不缓存结果,而缓存功能的执行呢?

2 个答案:

答案 0 :(得分:1)

是的,通常是同一回事。

有多种方法可以实现它,但是思想保持不变-避免了对该函数的额外计算。这也是与语言无关的东西。

该功能应满足的一个条件是纯度(例如,没有副作用和参照透明性-相同的输入给出相同的输出)。这不是功能编程的事情,但是在FP函数中,大部分时间都是纯函数。

因此,如果函数是纯函数,则如果不执行函数主体而不是执行函数主体,则被调用方应该不会注意到任何区别。
换句话说,如果函数是 pure ,则备注和所谓的 cache函数执行之间没有没有真正的区别,因为返回值将是一样。


如果函数不是纯函数怎么办?

很明显,在这种情况下,如果我们跳过函数主体并立即返回缓存的值-我们将错过函数的副作用。优化这样的功能将导致我们将纯净的东西和不纯净的东西分开,现在好了,我们知道如何处理第一个:)

答案 1 :(得分:1)

那仍然是一种记忆,在优化策略方面,两者在缓存数据方面和使用方式方面没有区别。

通常的记忆将记住(缓存)结果(用于 expensive 函数调用中),并在再次出现相同的输入时返回缓存的结果。

“缓存函数执行”通过存储在内存中使用相同的概念,但是这次存储的是函数主体本身而不是结果。