Повторное использование объекта 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... Не стоит.;-)
Немного больше испытаний показывает, что разницы нет вообще. Это просто случайность.