【发布时间】:2018-08-21 00:47:04
【问题描述】:
我有一个大型数据集合,我经常通过首先对其应用过滤器来查询它。我想缓存和重用我使用的不同过滤器函数的结果,因为这部分可能很昂贵。这是一个粗略的模拟:
const a = x => x + 1;
const b = x => x + 2;
const m = _.memoize(
f => (console.log('filtering data'), f(314159)),
f => String(f)
);
console.log(m(a));
console.log(m(b));
console.log(m(a));
console.log(m(b));
这里的“a”和“b”是我想要使用的过滤器函数,而“m”每次都作用于相同的数据。
如何为 _.memoize 函数指定密钥?
上述方法有效,但我使用的函数的字符串表示感觉不对。有没有更好的办法?
我担心应用缩小时这不安全。在我的实际代码中,“memoize”部分在一个 ES6 模块中,“a”和“b”部分在另一个模块中,对“m”的调用在导入“a”和“b”的几个不同模块中“ 功能。字符串表示会在这样的模块之间保持稳定吗?转换成字符串表示快吗?
我能想到的唯一替代方法是创建一个字符串 -> 函数字典,这样您就可以执行 m("a") 之类的调用,但如果名称错误,JavaScript linters 将不会接收。
【问题讨论】:
标签: javascript optimization lodash memoization