2

我已经编写了一个应用程序,以便在使用 IE Mobile 的设备上离线使用(使用 Google Gears)。这些设备正在经历内存泄漏,导致设备随着时间的推移变得无法使用。

问题页面从本地 Gears 数据库中获取条目并呈现每个条目的表格,并在每行的最后一列中提供一个链接以打开条目(该链接只是 onclick="open('myID')" )。当他们完成条目后,他们返回到重新渲染的表格。似乎是这个表的重复构建是问题所在。主要是onclick事件。

该表本质上是这样生成的:

var tmp="";
for (var i=0; i<100; i++){
 tmp+="<tr><td>row "+i+"</td><td><a href=\"#\" id=\"LINK-"+i+"\""+
  " onclick=\"afunction();return false;\">link</a></td></tr>";
}

document.getElementById('view').innerHTML = "<table>"+tmp+"</table>";

我已经阅读了内存泄漏的常见原因,并尝试在重新渲染表之前将每个链接的 onclick 事件设置为“null”,但它似乎仍然泄漏。

有人有什么想法吗?

如果重要,从每个链接调用的函数如下所示:

function afunction(){
 document.getElementById('view').style.display="none";
}

这会以任何方式构成循环引用吗?

杰克

4

2 回答 2

0

我不知道它是否对记忆有帮助,但是您可以将它们推送到一个数组中并加入它们以获得更好的性能,而不是连接你的字符串。就像是:

var tmp=[];
for (var i=0; i<100; i++){
 tmp.push("<tr><td>row "+i+"</td><td><a href=\"#\" id=\"LINK-"+i+"\""+
  " onclick=\"afunction();return false;\">link</a></td></tr>");
}

document.getElementById('view').innerHTML = "<table>"+tmp.join('')+"</table>";
于 2009-10-14T22:46:38.040 回答
0

如果您正在编写大量更改页面内容的脚本,那么在我过去使用的一本旧 AJAX 书中提到过 IE 内存泄漏(它很可能会在您这里遇到)。当一个页面卸载时,您需要清除您更改的所有 divs/spans/etc,否则它们的内容将保留在内存中。尝试类似的东西

<script type="text/javascript">
window.onunload = clearAJAXContent;

function clearAJAXContent() {
/* clear any dynamic content placeholders here*/
}
</script>

我相信,在清除时,您希望将 innerHTML 设置为“”。当我下次回家时,我会尝试找到这本书并更新我的答案,如果有什么不同的话,但这应该会给你一些测试的东西

于 2009-10-16T08:16:51.333 回答