Javascript 重用XMTHttpRequest对象?

Javascript 重用XMTHttpRequest对象?,javascript,ajax,xmlhttprequest-level2,Javascript,Ajax,Xmlhttprequest Level2,我正试图重写一些ajax代码,使其更适合自动完成的需要。在这种情况下,您有时必须中止以前的请求,xhr.abort(),因此重用XMLHttpRequest对象(我刚才称之为xhr)感觉相当自然 我试图理解重用XMLHttpRequest对象是好是坏。你能看到什么优点和缺点 PS:此重写将使用本机ES6样式Promise,因此它只能在较新的web浏览器中运行。正如@Bergi所建议的,只是一个计时测试: function initCache(url) { var xhr = new XM

我正试图重写一些ajax代码,使其更适合自动完成的需要。在这种情况下,您有时必须中止以前的请求,
xhr.abort()
,因此重用
XMLHttpRequest
对象(我刚才称之为
xhr
)感觉相当自然

我试图理解重用
XMLHttpRequest
对象是好是坏。你能看到什么优点和缺点


PS:此重写将使用本机ES6样式Promise,因此它只能在较新的web浏览器中运行。

正如@Bergi所建议的,只是一个计时测试:

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();
所以。。。在速度较慢的pc上,每次通话0.1毫秒,不值得费心

现在等待-重用xhr会更慢。。。不值得


再多做一点测试,就知道没有什么区别了。这只是一个偶然的机会。

我认为xhr对象的对象池对性能没有多大帮助(网络是最慢的部分),但您仍然可以尝试比较。@Bergi:在这种情况下,我有xhr对象,可以立即重用它。(我的意思是,我有了自动完成的新输入。)因此开销比平常少,即不需要对象池。但是,是的,我可以计算时间,看看是否有任何收获。:-)我认为在这里,比速度性能更重要的是每次创建许多新的XMLHttpRequest对象可能带来的内存泄漏或开销!您忘记将
numLoops
传递给函数调用了?呃,谢谢@Bergi。更正。我肯定不是一个编码员。我从来没有读过我的代码。我只知道它应该做什么,它是如何构造的,等等…;-)
test-xhr-reuse.js:6 XHR finished loading: GET ...
reuse: 510.000ms
new: 386.000ms