【问题标题】:external javascript file cause memory leak in ie外部javascript文件导致ie中的内存泄漏
【发布时间】:2012-09-11 13:50:39
【问题描述】:

我尝试在 IE(6 和 8)中执行此代码,它可以正常工作,但 IE 在执行时会导致内存泄漏。

<html>

<head>
<script type="text/javascript" src="file_with_data.html" id=currentJsData></script>
<script type="text/javascript">

function currentJsDataRefresh()
{
document.getElementById('currentJsData').src="file_with_data.html";
}


setInterval(currentJsDataRefresh, 300);

</script>
</head>
<body>

</body>
</html>

其他文件 file_with_data.html 的摘录,其中包含 javascript 数据源作为全局变量:

var xMax;
var array1 = new Array();
var array2 = new Array();
var array3 = new Array();
array1[0] = 123;
array1[0] = 456;
...

我试图插入一个函数来删除所有变量,使它们等于 null,但内存泄漏仍然存在。你能解释一下IE中发生了什么吗?

【问题讨论】:

  • 你为什么要每 300 毫秒加载一次 javascript 文件?你最好使用 AJAX 来检索 HTML 的内容并以这种方式处理它
  • file_with_data.html 甚至是纯 JavaScript 吗?为什么不是.js?
  • 我认为您需要提供一个更具体的示例,因为您发布的代码中不应该有任何泄漏。可能是您的实际应用程序中的一些(反)模式阻止了某些对象被 GC 处理

标签: javascript internet-explorer memory-leaks


【解决方案1】:

看起来您的应用中有 (i) 帧,如果您提供更完整的代码示例会有所帮助。 抱歉没有仔细阅读问题

同时检查此问题:Externally Declared Global Variable Leak(查看代码演示)

当您在一个框架内声明全局变量而在另一框架的上下文中时,可能会发生这种情况。

【讨论】:

  • 我的应用程序中没有 (i) 框架。代码是完整的,我没有在 file_with_data.html 中包含所有变量:它们是十几个数组,每个数组有十二个元素。非常感谢。
  • 您如何使用这些数据?你在某处引用它吗?
  • 您能否尝试在file_with_data 中创建一个单独的对象来封装所有数据,而不是创建多个变量?例如。 var data = {xMax: 123, array1: [123, 346], array2: ...}
  • 这是个好主意,但该文件是以前处理的结果,换句话说,它是一个输入。此外,我编写了一个函数,将所有变量都设为 null,如果我将所有数据封装在一个对象中,然后在刷新外部文件之前将其设为 null,这不是一回事吗?非常感谢!
  • 将所有数据封装在一个对象中可能会让您更好地控制可能的泄漏(您只关心一个全局变量,而不是很多)。由于我们正在谈论一些特定于 IE 的怪癖,我会尝试一下只是为了实验......
猜你喜欢
  • 1970-01-01
  • 2021-09-02
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 2014-03-27
  • 2015-07-06
  • 2014-06-07
相关资源
最近更新 更多