Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript http.get和http.request都非常慢?_Javascript_Node.js - Fatal编程技术网

Javascript http.get和http.request都非常慢?

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

尝试用以下代码加载简单的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毫秒,而在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])时间旋度URL
@IlyaNovojilov执行类似于
var x=(new Date()).getTime()的操作;get(url,function(){console.log(x-(new Date()).getTime()+“ms”)}
工作不可靠?我在chrome基准测试和节点基准测试中都使用了它,所以我怀疑它会有多大的效果,肯定不足以将请求时间增加三倍try
var 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基准测试和节点基准测试中都使用了它,所以我怀疑它会有多大效果,肯定不足以将请求时间增加三倍