too many xhr requests in chrome

怎甘沉沦 提交于 2020-01-24 20:44:06

问题


I have a tight loop that fetches PNG files via xhr2. Works fine in FF and IE10. In Chrome when I list of files hits about 5,500 I start getting xhr errors. I like the async interface since I am interleaving these requests with local indexedDB store requests.

Code below (I am using xhr2lib for fetches and PouchDB for the IndexedDB API).

I know that it is the XHR2 that is failing, since when this works, in Chrome, all the XHR2 calls are processed before the SaveDB() calls. When It fails, I never get the save calls.

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);
            }
        }
    });
}

回答1:


The chromium folks acknowledge this is something that they should fix: https://code.google.com/p/chromium/issues/detail?id=244910, but in the meantime I have implemented throttling using jquery defer/resolve to keep the number of threads low.



来源:https://stackoverflow.com/questions/16775582/too-many-xhr-requests-in-chrome

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!