我想在node.js后端使用Memoizee来加速请求。
但出于某种原因,我不能像我想的那样让它工作。我有一个路由,等待另一个方法的回调,但无论我将结果保存多久都在缓存中,它每次都运行整个方法。
我做错了什么?
以下是我的实施示例。
var memoize = require('memoizee');
module.exports = function (app) {
app.route('/someurl/:user_id')
.get(function (req, res) {
var user_id = req.params.user_id;
memoized(user_id, function (result) {
res.send(result)
})
});
};
var doWork = memoize(function(user_id, done) {
//Handling a lot of data - takes about 10-15 seconds
done(index);
});
var memoized = memoize(doWork, {maxAge: 300000});
答案 0 :(得分:0)
有两个问题:
由于有两个功能参数,因此memoization会记住这两个参数
每次通话的done
回调可能不同,因此您每次都会看到功能重新运行。
怎么解决?首先,您可以通过在选项中传递{ length: 1 }
来将memoization范围限制为第一个参数。
其次,我有一个概念,它是您尝试记忆的异步功能,因为最好依靠memoizee中的async
或promise
配置选项(参见'文件)
正如@Bergi指出的那样,你试着记住已经记忆的功能。第二个memoization(一个maxAge
)没有任何效果,因为memoization内部检测到你正在尝试做的事情,并忽略第二个调用。应该只有一个memoizee包装(可以组合选项,没有问题)。