javascript – 使用XMLHttpRequest和setInterval的内存泄漏

以下是我在Google Chrome 19.0.1061.1(官方版本125213)上运行的一些代码:

<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://任务中的内存使用情况时,我可以看到“私有内存”无限增长(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 – 每n秒js生成一个随机数


下一篇:前端--setInterval使用 增/删情况下注意