我想在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中依赖asyncpromise配置选项(请参见文档)
正如@Bergi指出的那样,您尝试记住已经被记住的功能。第二个备注(带有maxAge的一个)无效,因为该备注在内部检测到您要执行的操作,并且忽略第二个调用。应该只有一个备忘包装(可以组合选项,这没有问题)。

关于javascript - 结合使用Memoizee和node.js,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45108429/

10-11 14:47