我想使用memoize
,但我担心缓存会无限增长,直到发生悲伤时为止。
我无法通过google / stackoverflow搜索找到任何内容。
P.S。我正在使用lodash v4。
答案 0 :(得分:7)
除非您指定不同的缓存类型,否则Lodash会保留所有已记忆的数据。
默认缓存是lodash的MapCache:
https://github.com/lodash/lodash/blob/4.14.0/lodash.js#L1968
根据密钥是否适合散列(以及ES6 Map是否在环境中可用),存储的值存储在不同的数据结构中:
https://github.com/lodash/lodash/blob/4.14.0/lodash.js#L1987
https://github.com/lodash/lodash/blob/4.14.0/lodash.js#L5561
如果你看一下" set"所有这些数据结构的方法,你会注意到LRU等没有任何规定:
哈希#set:https://github.com/lodash/lodash/blob/4.14.0/lodash.js#L1832
ListCache#set:https://github.com/lodash/lodash/blob/4.14.0/lodash.js#L1940
地图#set:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/set
答案 1 :(得分:7)
简短的回答是否定的。
当您使用memoize
功能时,您接受以下合同:
因此,只有永久保存数据的实现才能符合要求。
经常混淆的是 - 内存泄漏"只是"效率低下的事情"使用记忆。
在这种情况下 - 如果这对您来说是个问题,那么当您的算法有用时,您有责任重新创建一个memoized函数。因为只有你知道什么时候这样做是安全的,而且不能自动完成。