ctr*_*usb 12 javascript lodash
我想使用,memoize但我担心缓存会无限增长,直到发生悲伤.
我无法通过google/stackoverflow搜索找到任何内容.
PS我正在使用lodash v4.
简短的回答是否定的.
当您使用某项memoize功能时,您接受以下合同:
因此,只有永久保存数据的实现才能符合要求.
经常被混淆的是 - 内存泄漏"只是"低效"使用内存.
在这种情况下 - 如果它对您来说是一个问题,那么当您的算法有用时,您有责任重新创建一个memoized函数.因为只有你知道什么时候这样做是安全的,而且不能自动完成.
除非您指定不同的缓存类型,否则Lodash会保留所有已记忆的数据.
默认缓存是lodash的MapCache:https:
//github.com/lodash/lodash/blob/4.14.0/lodash.js#L1968
memoized值存储在不同的数据结构中,具体取决于密钥是否适合散列(以及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等没有任何规定:
Hash #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
Map#set:https://developer.mozilla.org/en-美国/文档/网络/的JavaScript /参考/ Global_Objects /地图/套