node.js在循环中的request.get - >性能非常低

时间:2015-07-25 21:55:46

标签: javascript node.js request

我需要下载大约5000页,我在一个循环中使用request.get()在里面这样做,所以每个循环运行400ms timeOut,但这没有帮助,大约1000个周期后,所有只是冻结,没有已下载或我看到Socket hang up错误。我认为问题可能出在系统套接字限制或其他方面。这是我的代码:

function downloadDescription(url,iterator, downloadDescriptionCallback) {

    request.get(url, function (err, response, body) {
        if (err) {
            if(iterator < 3) {
                setTimeout(function () {
                    downloadDescription(url, iterator, downloadDescriptionCallback)
                }, 1300);
            }else{
                log.warn("Request.get error link iterator limit");
                return downloadDescriptionCallback(null, "");
            }
        }else if (response.statusCode === 404) {
            if(iterator < 3) {//here I just change my Url, cause I dont exactly know the right path, and if I reach 3 iterator limits, I just forget him
                url =  desc_base_url + url.substring(url.indexOf("/", 27) + 1, url.length);
                iterator++;
                setTimeout(function(){ downloadDescription(url, iterator, downloadDescriptionCallback) }, 1300);
            }else{
                return downloadDescriptionCallback(null, body);
            }
        }else{
            return downloadDescriptionCallback(null, body);
        }

    }).on('error', function(err) {
        console.log(err)
    });
};

所以经过一段时间大约100-200个周期后,我得到了一个奇怪的行为,下载时间非常慢,我甚至从未达到完整的5000页,我想我可以通过调整选项来提高我的性能吗?

0 个答案:

没有答案