节点服务器中的慢 http 请求

Slow http request in node server

在我的应用程序中,我必须创建一个 API 来搜索 n 个项目。 服务器逻辑是在它自己的数据库中查找项目,如果结果计数小于 n,则使用第三方服务的搜索结果来填充剩余的结果。

我这里面临的问题是,执行第三方请求所花费的时间。
平均而言,从服务器执行第三方请求大约需要 900-1500 毫秒,但是如果我从浏览器或任何其他客户端执行相同的请求,同样需要大约 300-400 毫秒.

这就是我正在做的

router.get('/search/:searchParam', function (req, res, next) {
    async.parallel({
        local : function(callback){
            //Search for object in DB
            callback(null,localResults);
        },
        fallback : function(callback) {
            var url = <searchURL>+<queryParam>;
            //This takes 900-1500 ms
            request(url, function (error, response, body) {
                if(error){
                    return callback(err);
                }
                callback(null,JSON.parse(body));
            });
        }
    }, function(err, results){
        if(err){
            return reject(err);
        }
        if(results.local.length < searchLimit) {
            results.local.push.apply(results.local,_.first(results.fallback,searchLimit-results.local.length));
            results.local = results.local.reduce(function(a,b){if(a.indexOf(b)<0)a.push(b);return a;},[]);
        }
        res.json(results.local);
    })
})

平均花费的时间是:
A. 40-100 毫秒 本地搜索
B. 900-1500 毫秒 用于回退搜索
甲+乙。 1000-1500ms总时间

我不知道如何改进整体响应时间。
有什么建议吗?

这可能是因为您没有对您的请求使用保活。我认为这可能会解决它,但我可能是错的。

request({url: url, forever: true}, function (error, response, body) {

不要使用 async 库,尝试在本地数据库搜索的请求回调中调用第三部分 API。