使用_.memoize
中的lodash
时,是否可以删除整个缓存?
我在github上看到了一些讨论: https://github.com/lodash/lodash/issues/1269 https://github.com/lodash/lodash/issues/265
但是如果你想要一个页面宽的缓存清除,我仍然不是100%清楚如何处理这个问题?是否打算先将其设置为WeakMap,然后根据需要调用clear?
答案 0 :(得分:9)
Lodash没有提供删除所有记忆功能的缓存的方法。你必须一个接一个地做。这是因为每个memoized函数都有自己的缓存对象实例。
请查看lodash echo "<td>". (($row['doc_type'] == '2') ? "$doc_number" : "") . "</td>";
source code:
echo "<td>". (($row['doc_type'] == '2') ? "$doc_number" : "") . "</td>";
您提到的GitHub讨论是关于清除单个记忆功能的缓存。
您可以将所有已记忆的函数保存到一个数组中,以便它能够迭代它们并逐个清除缓存。
mysql
答案 1 :(得分:2)
function _printName(name) {
console.log(name);
}
const printName = _.memoize(_printName);
printName("David");
printName("John");
要清除整个记录的缓存(David和John):
printName.cache.clear();
要显式删除单个记忆的对象,请执行以下操作:
printName.cache.delete("David");
答案 2 :(得分:1)
在2019年更新答案:),lodash为缓存方法添加了清除功能,因此可以清除缓存的方法
memoizedFunctions.forEach(f => f.cache.clear());
经过测试的lodash版本4.17.13