将Memoizee与node.js一起使用

时间:2017-07-14 17:12:41

标签: javascript node.js memoization memoizee

我想在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});

1 个答案:

答案 0 :(得分:0)

有两个问题:

  1. 由于有两个功能参数,因此memoization会记住这两个参数 每次通话的done回调可能不同,因此您每次都会看到功能重新运行。
    怎么解决?首先,您可以通过在选项中传递{ length: 1 }来将memoization范围限制为第一个参数。 其次,我有一个概念,它是您尝试记忆的异步功能,因为最好依靠memoizee中的asyncpromise配置选项(参见'文件)

  2. 正如@Bergi指出的那样,你试着记住已经记忆的功能。第二个memoization(一个maxAge)没有任何效果,因为memoization内部检测到你正在尝试做的事情,并忽略第二个调用。应该只有一个memoizee包装(可以组合选项,没有问题)。