小编arm*_*m1n的帖子

如何在使用定期AJAX/XMLHttpRequest调用时修复浏览器的内存增长?

我花了整个周末在我用Dojo编写的Web应用程序中详细说明了内存增长问题.

Web应用程序将"永远运行",因此不会重新启动浏览器.

该应用程序定期更新服务器(无跨域)的动态数据; 每5秒钟,进行一次AJAX调用以将新数据检索为JSON.

通过让应用程序运行几个小时,我观察到浏览器内存不断增长(最新的Chrome和Firefox,无论是在最新的Windows和Mac OS X上).

起初,我认为Dojo导致了这种行为.事实上,通过使用XMLHttpRequest对象切换到本机实现,我可以大大减少内存增长,但它仍然存在.随着每个AJAX请求,内存增长一点点(大约4-8KB).

我已经尝试过的:

我有...

  • ...试图使用其他框架,如jQuery,YUI等- 没有效果
  • ...切换到使用原生`XMLHttpRequest`对象- 帮了很多,但并非完全
  • ...在检索数据后停用DOM操作- 没有效果
  • ...通过设置为"null"重置`xhr`并在每次迭代后删除它- 没有效果
  • ...在每次迭代后将onreadystatechange处理程序重置为null或空方法- 无效
  • ...重用了`xhr`对象和`onreadystatechange`处理程序,因为它始终是相同的- 没有效果

因此即使我没有做任何事情(如下面第一个StackOverflow链接中所述)加载的数据,内存使用量也会增加:

我已经读过的内容:

我的测试HTML代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Native XHR Async</title>
</head>
<body>
<script>

var update = document.createElement("div");
document.body.appendChild(update);

var timeout = null;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = onReadyState;

function loadData()
{
    xhr.open("GET","memory-leak.json?" + new Date().getTime());
    xhr.send(null);
}

function onReadyState()
{
   if (this.readyState === …
Run Code Online (Sandbox Code Playgroud)

ajax memory-leaks refresh xmlhttprequest intervals

10
推荐指数
1
解决办法
2587
查看次数

标签 统计

ajax ×1

intervals ×1

memory-leaks ×1

refresh ×1

xmlhttprequest ×1