Javascript http.get和http.request都非常慢?
尝试用以下代码加载简单的JSON API时,我注意到速度非常慢:Javascript http.get和http.request都非常慢?,javascript,node.js,Javascript,Node.js,尝试用以下代码加载简单的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, fals
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毫秒,而在Google Chrome上加载不到80毫秒。为了进行测试,我使用Google Chrome进行基准测试,并发送简单的get和post请求,但在节点中接收每个请求的响应所花费的时间是在Google Chrome中的2到3倍。在做了一些研究之后,我发现这可能是由于Chrome,就像大多数浏览器一样,使用了连接:“keep alive”
标题,但是在标题中添加这个似乎没有什么影响。我已经在设置http.globalAgent.maxSockets=100000代码>所以我知道这不是问题所在。如何加快我的请求
仍然没有找到任何东西,如果有人知道是否有什么东西可以加快速度,请发布回复Try
var body=Buffer.alloc(0);r、 on('data',函数(d){body=body.concat([d]);});r、 on('end',function(){callback(body.toString());})代码>而不是执行从缓冲区到UTF-8字符串的隐式转换。我不确定这是否真的会提高速度,这就是为什么我把它作为一个评论而不是答案发布的原因。哦,我的道歉,我的意思是body=Buffer.concat([body,d])不管是哪种方式,我刚刚尝试了我的方法,它似乎始终比隐式字符串连接慢。祝你好运。无论如何,谢谢你的帮助。首先用curl检查一下时间,它更相关<代码>时间旋度URL
@IlyaNovojilov执行类似于var x=(new Date()).getTime()的操作;get(url,function(){console.log(x-(new Date()).getTime()+“ms”)}
工作不可靠?我在chrome基准测试和节点基准测试中都使用了它,所以我怀疑它会有多大的效果,肯定不足以将请求时间增加三倍tryvar body=Buffer.alloc(0);r.on('data',function(d){body=body=body.concat([d]);});r.on('end',function(){callback(body.toString());});
而不是从缓冲区到UTF-8字符串的隐式转换。我不确定这是否真的会提高速度,这就是为什么我将此作为注释而不是答案发布的原因。哦,我的道歉,我的意思是body=Buffer.concat([body,d])无论是哪种方式,我刚刚尝试了我的方法,它似乎始终比隐式字符串连接慢。祝你好运。感谢你的帮助首先用curl检查时间-它更相关。time curl URL
@IlyaNovojilov做了一些类似于var x=(new Date()).getTime();get(URL,function(){console.log(x-(new Date()).getTime()+“ms”)}
没有那么可靠地工作?我在chrome基准测试和节点基准测试中都使用了它,所以我怀疑它会有多大效果,肯定不足以将请求时间增加三倍