javascript 中的 Memoization 和 Cache 函数执行是否相同?
is Memoization and Cache function execution in javascript are same?
我最近接受了一次采访,有人问我如何缓存任何函数的执行?我只在 Javascript 中听说过 功能缓存。
我检查了 Stack overflow,但没有从 this.Is 中得到任何想法记忆和缓存函数执行是相同的还是不同的?
我知道 Javascript 中的函数缓存称为 Memoization,它只缓存结果而不是执行,但是 缓存函数执行?。
是的,通常都是一样的。
有多种实现方式,但思路是一样的——避免函数的额外计算。它也是与语言无关的东西。
函数应该满足的一个条件是纯度(例如,没有副作用和引用透明性——相同的输入给出相同的输出)。这不是函数式编程的事情,但在 FP 中函数大部分时间都是纯粹的。
因此,如果函数是纯函数,如果我们不执行函数体而是立即 return 缓存值,被调用者应该不会注意到任何差异。
换句话说,如果函数是纯,那么记忆化和所谓的缓存函数执行没有真正的区别 因为 return 值将相同。
函数不纯怎么办?
好吧,在这种情况下,显然,如果我们跳过函数体并立即 return 缓存值 - 我们将错过函数的副作用。优化这样的功能会导致我们分离纯的和不纯的东西,现在我们知道如何处理第一个了:)
那还是memoization,在优化策略的方式上两者在缓存数据方面没有区别,但是在使用方式上。
通常的记忆会记住(缓存)结果(用于 昂贵的 函数调用)和 return 再次出现相同输入时缓存的结果。
"Cache Function Execution"通过存储在内存中使用相同的概念,但这次存储函数体本身而不是结果。
我最近接受了一次采访,有人问我如何缓存任何函数的执行?我只在 Javascript 中听说过 功能缓存。
我检查了 Stack overflow,但没有从 this.Is 中得到任何想法记忆和缓存函数执行是相同的还是不同的?
我知道 Javascript 中的函数缓存称为 Memoization,它只缓存结果而不是执行,但是 缓存函数执行?。
是的,通常都是一样的。
有多种实现方式,但思路是一样的——避免函数的额外计算。它也是与语言无关的东西。
函数应该满足的一个条件是纯度(例如,没有副作用和引用透明性——相同的输入给出相同的输出)。这不是函数式编程的事情,但在 FP 中函数大部分时间都是纯粹的。
因此,如果函数是纯函数,如果我们不执行函数体而是立即 return 缓存值,被调用者应该不会注意到任何差异。
换句话说,如果函数是纯,那么记忆化和所谓的缓存函数执行没有真正的区别 因为 return 值将相同。
函数不纯怎么办?
好吧,在这种情况下,显然,如果我们跳过函数体并立即 return 缓存值 - 我们将错过函数的副作用。优化这样的功能会导致我们分离纯的和不纯的东西,现在我们知道如何处理第一个了:)
那还是memoization,在优化策略的方式上两者在缓存数据方面没有区别,但是在使用方式上。
通常的记忆会记住(缓存)结果(用于 昂贵的 函数调用)和 return 再次出现相同输入时缓存的结果。
"Cache Function Execution"通过存储在内存中使用相同的概念,但这次存储函数体本身而不是结果。