我不会做很多JavaScript,所以我担心这可能是一个非常愚蠢的问题,但是我一直在谷歌上搜索很多,而我一直在寻找。我发现有很多关于使用jQuery的内存泄漏,似乎没有什么能与我的情况相符。
基本上,我有一个页面,我不断用新下载的内容替换内容。为此,我使用jQuery' helper
函数,将下载的HTML片段作为字符串传递。整个页面有点复杂,需要一些时间来泄漏大量内存,但我已经通过这个简单的HTML片段重现了内存泄漏:
replaceWith
在Chromium中查看此页面似乎不断吃掉越来越多的内存,而我似乎无法弄清楚原因。 <html>
<head>
<title>Test</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
var sequence = 1;
function update() {
$("#test").empty().replaceWith('<p id="test">Test ' + sequence++ + '</p>').remove();
setTimeout(update, 1);
}
$(document).ready(update);
</script>
</head>
<body>
<p id="test">Test</p>
</body>
</html>
行上的.empty()
和.remove()
调用原本并不存在,但我把它们扔进去,因为它们通常被建议作为DOM替换内存泄漏的修复程序。然而,似乎没有效果。
答案 0 :(得分:0)
我很确定你的内存泄漏与setTimeout(...)函数的递归特性有关。
请改为尝试:
var sequence = 1;
function update() {
$("#test").empty().replaceWith('<p id="test">Test ' + sequence++ + '</p>').remove();
var timer = setTimeout(function() {
clearTimeout(timer);
update();
}, 1);
}
$(document).ready(update);