Повторное использование объекта XMTHttpRequest?

Я пытаюсь переписать некоторый код ajax, чтобы он лучше соответствовал требованиям автозаполнения. В этой ситуации вы должны прервать предыдущий запрос иногда, xhr.abort()поэтому вполне естественно использовать XMLHttpRequest объект (который я только что назвал xhr Вот).

Я пытаюсь понять, является ли это хорошей или плохой идеей повторного использования XMLHttpRequestобъект. Какие плюсы и минусы вы видите?

PS: эта перезапись будет использовать встроенный в ES6 стиль Promise, поэтому он может работать только в новых веб-браузерах.

1 ответ

Просто проверка времени, как предложил @Berg:

function initCache(url) {
    var xhr = new XMLHttpRequest();
    xhr.open("get", url); xhr.send();
    console.log("Initialized cache");
}

function reuseXhr(url, numLoops) {
    var xhr = new XMLHttpRequest();
    for (var i=0; i<numLoops; i++) {
        xhr.open("get", url); xhr.send();
    }
    xhr.abort();
}

function newXhr(url, numLoops) {
    var xhr;
    for (var i=0; i<numLoops; i++) {
        xhr = new XMLHttpRequest();
        xhr.open("get", url); xhr.send(); xhr.abort();
    }
}
function testIt() {
    var url = "http://urlwithcors.com/"; // Pseudo-URL with CORS enabled
    var numLoops = 1000;
    initCache(url);
    setTimeout(function(){
        console.time("reuse"); reuseXhr(url, numLoops); console.timeEnd("reuse");
        console.time("new"); newXhr(url, numLoops); console.timeEnd("new");
    }, 5000);
}
testIt();

Результат здесь, в Chrome:

test-xhr-reuse.js:6 XHR finished loading: GET ...
reuse: 510.000ms
new: 386.000ms

Итак... 0,1 мс за звонок на медленном ПК, это не стоит хлопот...

Теперь подождите - это еще медленнее использовать xhr... Не стоит.;-)

Немного больше испытаний показывает, что разницы нет вообще. Это просто случайность.

Другие вопросы по тегам