节点服务器中的http请求缓慢

时间:2016-01-25 09:35:21

标签: node.js express httprequest response node-async

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

我在这里面临的问题是,执行第三方请求所需的时间 从服务器执行第三方请求平均需要 900-1500 ms ,但是如果我从浏览器或任何其他其他客户端执行相同的请求,则相同需要 300 -400 ms

这就是我正在做的事情

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 ms 用于本地搜索
B. 900-1500 ms 用于后备搜索
A + B。 1000-1500ms 总时间

我没有得到如何改善总体响应时间 有什么建议吗?

2 个答案:

答案 0 :(得分:2)

这可能是因为您没有在请求中使用keepalive。我想这可能会解决它,但我可能是错的。

attendance == "absent"

答案 1 :(得分:0)

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