我已经在使用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";
}
这会以任何方式构成循环引用吗?
杰克
答案 0 :(得分: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>";
答案 1 :(得分:0)
如果你正在做很多改变页面内容的脚本,那么过去曾经使用的旧AJAX书中提到了一个IE内存泄漏(很可能会在这里发布)。当页面卸载时,您需要清除已更改的任何div / span / etc,否则它们的内容将保留在内存中。尝试像
这样的东西<script type="text/javascript">
window.onunload = clearAJAXContent;
function clearAJAXContent() {
/* clear any dynamic content placeholders here*/
}
</script>
我相信,清除时,您需要将innerHTML设置为“”。当我回到家时,我会尝试找到这本书并更新我的答案,如果有什么不同,但那应该给你一些东西进行测试