由于节点js代码中有如此多的http调用,CPU达到100%。我将如何优化该代码?

时间:2016-06-16 18:31:39

标签: node.js http

我在我的应用程序中添加了一些示例代码。 我正在调用更新数据功能。在一分钟内,我有150个http的电话。 所以由于这个代码我的cpu 100%,我想优化这段代码。 想要解决这个节点js代码的性能问题。

function doSynchronousLoop(data) {

if (data.length > 0) {

    var loop = function(data, i) {

            if (++i < data.length) {

                var req = httpcall.request('http://myserverip/path', function(res) {
                            res.setEncoding('utf8');
                             res.on('data', function (chunk) {

                                setTimeout(function(){
                                        loop(data, i);
                                    }, 50);

                             });

                        });

                        req.on('error', function(err) {
                            console.error('error: ' ,err.stack.split("\n"));
                        });

                        req.write("");

                        req.end();
            }else{
                allData= [];

            }

    };
    loop(data, 0);
}else{
    allData= [];
}

function updateData(allData){
    doSynchronousLoop(allData);
}

1 个答案:

答案 0 :(得分:0)

您的回调会在每个&#34;数据&#34;上调用新的HTTP请求。事件。除非获取请求非常短,否则它会多次触发,因此在第一次激活其结束请求之前,将触发几次http.get调用。因此,如果您将回调更改为end事件而不是data事件,则它将同步运行。