javascript - XMLHttpRequest 和 setInterval 的内存泄漏

标签 javascript google-chrome xmlhttprequest setinterval v8

这是我在 Google Chrome 19.0.1061.1(官方内部版本 125213)dev 上运行的一些代码:

<html>
<title>Memory Leak</title>
<script type="text/javascript">
    (function(){
        this.window.setInterval(function() {
            var xhr = new XMLHttpRequest();
            xhr.open('GET', '', false);
            xhr.send();
        }, 50);
    }).call(this);
</script>
</html>

当我检查 chrome://tasks 中的内存使用情况时,我可以看到“私有(private)内存”正在无限增长(8GB RAM 配置)。 如果我将上面的代码示例更改为类似的内容:

<html>
<title>Memory Leak</title>
<script type="text/javascript">
    (function(){
        var xhr = new XMLHttpRequest();
        var timeout = this.window.setInterval(function() {
            xhr.open('GET', '', false);
            xhr.send();
        }, 50);
    }).call(this);
</script>
</html>

现在好了。

我不明白。 为什么保留对 setInterval 函数的引用会有所帮助,为什么只定义一个 xhr 会有所帮助,因为之前的声明是在闭包中?它只与 v8 有关吗?

非常感谢您对此的见解。

最佳答案

在第一个中,您在每次调用迭代器函数时实例化一个新的 XMLHttpRequest 对象。请求对象将至少保留到 HTTP 请求完成为止。每秒启动 200 个 HTTP 请求会严重阻塞浏览器,因为它实际上不会执行所有请求;它打开的并发连接数是有限制的。

关于javascript - XMLHttpRequest 和 setInterval 的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9806115/

相关文章:

javascript - 使地理位置坐标可用于其他功能

javascript - Promise 扩展到更多的 Promise 会导致不可预测的数据格式(以及不可读的代码)

html - Chrome : border-radius on image with padding and background

python - Chrome 浏览器从 chromedriver 启动时随机挂起

firefox - Firefox 更新后的中文跨域 XmlHTTPRequest

javascript - 使用 JavaScript/Jquery 关闭 .aspx

php - 在后台 PHP 下载外部文件?

javascript - 我的 XML 文件未通过 Google Chrome 和 Internet Explorer

vba - 无法使用 xhr 从网页中获取一些信息

php - 如何在 Apache2 下禁用 PHP AJAX 请求/响应的 gzip 压缩?