在我的应用程序中,我必须创建一个用于搜索 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 总时间
我没有得到如何改善总体响应时间 有什么建议吗?
答案 0 :(得分:2)
这可能是因为您没有在请求中使用keepalive。我想这可能会解决它,但我可能是错的。
attendance == "absent"
答案 1 :(得分:0)
尝试在本地数据库搜索的请求回调中调用第三方API,而不是使用async
库。