美文网首页
Memoization 通过将初始操作的结果存储在缓存中来优化使

Memoization 通过将初始操作的结果存储在缓存中来优化使

作者: 殇城阡陌 | 来源:发表于2021-03-22 11:02 被阅读0次

    Memoization: 该什么时候使用,这个是以空间换速度,所以最好确定你是否值得那么做,有些场景很有必要使用。

    在这里,memoization通常会缩短执行时间并影响我们应用程序的性能。当我们知道一组输入将产生某个输出时,memoization最有效。

    遵循最佳实践,应该在纯函数上实现memoization。纯函数输入什么就返回什么,不存在副作用。

    在处理递归函数时,Memoization最有效,递归函数用于执行诸如GUI渲染,Sprite和动画物理等繁重操作。

    Memoization: 什么时候不要使用

    不是纯函数的时候(输出不完全依赖于输入)。


    使用 Object.create(null) 创建一个没有 Object.prototype 的空对象(这样如果输入值类似 'hasOwnProperty',那么这些属性就不会被解析)。 通过首先检查该特定输入值的函数输出是否已经被缓存,如果没有,则返回一个函数,该函数将作为单个参数提供给 memoized 函数。

    const memoize = fn => {

      const cache = new Map();

      const cached = function(val) {

        return cache.has(val) ? cache.get(val) : cache.set(val, fn.call(this, val)) && cache.get(val);

      };

      cached.cache = cache;

      return cached;

    };

    // See the `anagrams` snippet.

    const anagramsCached = memoize(anagrams);

    anagramsCached('javascript'); // takes a long time

    anagramsCached('javascript'); // returns virtually instantly since it's now cached

    console.log(anagramsCached.cache); // The cached anagrams map

    相关文章

      网友评论

          本文标题:Memoization 通过将初始操作的结果存储在缓存中来优化使

          本文链接:https://www.haomeiwen.com/subject/iskzcltx.html