我想在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});
最佳答案
有两个问题:
由于有两个功能参数,因此记忆针对这两个记忆。
每次调用的done
回调可能会有所不同,因此您会看到函数每次都会重新运行。
如何解决?首先,您可以通过在选项中传递{ length: 1 }
将备注范围限制为仅第一个参数。
其次,我有一个想法,您尝试记住它是一个异步函数,因为最好在memoizee中依赖async
或promise
配置选项(请参见文档)
正如@Bergi指出的那样,您尝试记住已经被记住的功能。第二个备注(带有maxAge
的一个)无效,因为该备注在内部检测到您要执行的操作,并且忽略第二个调用。应该只有一个备忘包装(可以组合选项,这没有问题)。
关于javascript - 结合使用Memoizee和node.js,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45108429/