当尝试使用以下代码加载简单的JSON API时,我注意到速度非常慢:
function get(url, callback) {
http.get(url, function(r) {
var body = "";
r.on('data', function(d) {
body+=d;
});
r.on('end', function() {
callback(body, false)
});
}).on('error', function (err) {
callback(null, err.message.code)
});
}
或使用以下代码发布:
function post(url, post_data, callback) {
if (!post_data) post_data = "";
var Proto = url.split("://")[0]+":";
var Host = url.split("://")[1].split("/")[0];
var Path = "/"+url.split("://")[1].replace("/", "#CHECK").split("#CHECK")[1];
var req = http.request({
host: Host,
port: '80',
path: Path,
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(post_data)
}
}, function(r) {
var body = '';
r.on('data', function(d) {
body += d;
});
r.on('end', function() {
callback(body);
});
}).on('error', function (err) {
callback(null, err.message.code)
});
req.write(querystring.stringify(post_data));
req.end();
}
两者都需要花费很长时间才能完成,通常在每个请求上平均我大约150-300毫秒的小文件,这将花费我80毫秒来加载谷歌Chrome。为了测试,我使用谷歌浏览器进行基准测试并发送了简单的获取和发布请求,但每个请求在节点中收到响应的时间比在谷歌浏览器中长2到3倍。在做了一些研究后,我发现它可能是由于Chrome与大多数浏览器一样,使用Connection:"keep-alive"
标题,但在标题中添加它似乎没有任何影响。我已经设置了http.globalAgent.maxSockets = 100000;
所以我知道这不是问题所在。我怎样才能加快我的要求?
仍然没有找到任何东西,如果有人知道如果有什么要加快的话请发表回复