在铬太多XHR请求(too many xhr requests in chrome)

2019-10-18 04:18发布

我有一个紧密的循环,通过XHR2获取PNG文件。 在FF和IE10的罚款。 在Chrome时,我列出的文件打约5500我开始越来越XHR错误。 我喜欢的异步接口,因为我交织与当地IndexedDB的存储请求,这些请求。

下面的代码(我用xhr2lib为取和PouchDB为IndexedDB的API)。

我知道,这是失败的,因为当这个作品,在Chrome中,所有的XHR2呼叫的SaveDB前处理()调用XHR2。 当它失败时,我从来没有得到过节省话费。

function getBlobs(fileList) {
    console.log("starting to fetch blobs");
    $.each(fileList, function (i, val) {
        var path = baseURL + val.id + "." + imageType;
        $xhr.ajax({
            url: path,
            dataType: "blob",
            success: function (data) { saveBlob(data, val.size, val.id); }
        });
    });
}

function saveBlob(blob, length, id) {
    if (blob.size != length) {
        console.error("Blob Length found: " + blob.size + " expected: " + length);
    }
    putBlob(blob, id);
    ++fetchCnt;
    if (fetchCnt == manifest.files.length) {
        setTimeout(fetchComplete, 0);
    }
}

function fetchComplete() {
    var startTime = vm.get("startTime");
    var elapsed = new Date() - startTime;
    var fetchTime = ms2Time(elapsed);
    vm.set("fetchTime", fetchTime);
}

function putBlob(blob, id) {
    var cnt;
    var type = blob.type;
    DB.putAttachment(id + "/pic", blob, type, function (err, response) {
        if (err) {
            console.error("Could store blob: error: " + err.error + " reason: " + err.reason + " status: " + err.status);
        } else {
            console.log("saved: ", response.id + " rev: " + response.rev);
            cnt = vm.get("blobCount");
            vm.set("blobCount", ++cnt);
            if (cnt == manifest.files.length) {
                setTimeout(storeComplete, 0);
            }
        }
    });
}

Answer 1:

铬人承认这一点是他们应该解决: https://code.google.com/p/chromium/issues/detail?id=244910 ,但在此期间我一直在使用jQuery的延迟/决心保持执行节流线程低的数量。



文章来源: too many xhr requests in chrome