Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中的记忆_Javascript_Performance_Oop_Design Patterns_Memoization - Fatal编程技术网

Javascript中的记忆

Javascript中的记忆,javascript,performance,oop,design-patterns,memoization,Javascript,Performance,Oop,Design Patterns,Memoization,我最近研究了一些javascript设计模式,遇到了memonization,虽然它看起来是一个很好的解决方案,可以避免重新计算值,但我发现它有一些问题。比如说这个简单的代码 function square(num) { var result; if(!square.cache[num]){ console.log("calculating a fresh value..."); result = num*num; square.cache[num] = r

我最近研究了一些javascript设计模式,遇到了memonization,虽然它看起来是一个很好的解决方案,可以避免重新计算值,但我发现它有一些问题。比如说这个简单的代码

function square(num)
{
  var result;
  if(!square.cache[num]){
     console.log("calculating a fresh value...");
     result = num*num;
     square.cache[num] = result;
  }
  return square.cache[num];
}
square.cache={}
调用
console.log(square(20))
//输出“计算新值…”,然后输出计算结果

我真正的问题是,当缓存在后续计算后变得如此之大,以至于从缓存中检索结果比计算新值花费更多的时间时,会发生什么情况。有什么解决办法吗

我真正的问题是当缓存变得如此之大时会发生什么

在这里,您将实现一种垃圾收集。在执行以下操作后,可以从缓存中删除项

因此,例如,在“最近最少使用”之后,您将记录某个特定对象上次访问时的使用次数,并从缓存中删除最近未使用的对象

编辑


Soundcloud使用对象存储,一篇非常有趣的文章是关于他们是如何构建自己的webapp的。

解决方案是不使用备忘录。使用它是非常罕见的,这是有原因的。如果您的缓存可能非常大,并且使用缓存仍然有意义,请使用适当的缓存(例如LRU缓存)。这是一个相当直接的程序,您可以直接进行计算。我想说你在这里滥用了记忆技巧;)哈哈,这只是我好奇心的一个简单例子。在我的项目中,我正在一个更复杂更广泛的场景中应用它。感谢gimg1提供的额外信息。这很有帮助。