这是Javascript内存泄漏吗?
我已经在Chrome开发者工具中分析了我的web应用程序,并提出了上面所示的时间表。我正在创建和删除悬停函数中的元素。我在报纸上读到过这方面的消息 此模式是否表示内存泄漏?在内部地面军事系统上,节点数(绿线)持续上升,而不是下降。但在我的强制GC上下降到零。这是常见的行为吗 我的意思是,它在内存中保存了很多节点,即使它们不存在。如果我检查堆,没有对DOM节点的引用(没有分离的DOM等),这让我认为这不是内存泄漏 你的五美分是多少 代码如下:这是Javascript内存泄漏吗?,javascript,jquery,html,memory,memory-leaks,Javascript,Jquery,Html,Memory,Memory Leaks,我已经在Chrome开发者工具中分析了我的web应用程序,并提出了上面所示的时间表。我正在创建和删除悬停函数中的元素。我在报纸上读到过这方面的消息 此模式是否表示内存泄漏?在内部地面军事系统上,节点数(绿线)持续上升,而不是下降。但在我的强制GC上下降到零。这是常见的行为吗 我的意思是,它在内存中保存了很多节点,即使它们不存在。如果我检查堆,没有对DOM节点的引用(没有分离的DOM等),这让我认为这不是内存泄漏 你的五美分是多少 代码如下: $(document).on("mouseenter"
$(document).on("mouseenter", ".btn", function(e){
var el = document.createElement("div");
el.id = "box";
document.body.appendChild(el);
});
$(document).on("mouseleave", ".btn", function(e){
$("#box").remove();
});
对此不是100%确定,但我认为问题可能是您的mouseenter/mouseleave事件未解除绑定?对此不是100%确定,但我认为问题可能是您的mouseenter/mouseleave事件未解除绑定?好的,让我们尝试面对这个问题 可能性:
<html>
<div class="ourDiv"></div>
</html>
$(".ourDiv").append(document.createElement("span"))
.remove();
Javascript内存管理是如何工作的?这一切都取决于可达性:
<html>
<div class="ourDiv"></div>
</html>
$(".ourDiv").append(document.createElement("span"))
.remove();
在这个示例中,我故意使用class而不是ID,您将看到原因。我们的记忆是这样的:
<html>
<div class="ourDiv"></div>
</html>
$(".ourDiv").append(document.createElement("span"))
.remove();
当您为每个创建的元素设置ID时,javascript将在内存中保存它,即使您尝试使用jQuery调用删除它们。可能是因为混合了创建元素和本机API,并在jQuery中删除了它。尝试检查您的$.cache
大小-如果太大,则表示jQuery没有正确删除对象
但首先,避免对不断创建的元素使用ID应该会有所帮助
更多解释见:,好的,让我们试着面对这个问题 可能性:
<html>
<div class="ourDiv"></div>
</html>
$(".ourDiv").append(document.createElement("span"))
.remove();
Javascript内存管理是如何工作的?这一切都取决于可达性:
<html>
<div class="ourDiv"></div>
</html>
$(".ourDiv").append(document.createElement("span"))
.remove();
在这个示例中,我故意使用class而不是ID,您将看到原因。我们的记忆是这样的:
<html>
<div class="ourDiv"></div>
</html>
$(".ourDiv").append(document.createElement("span"))
.remove();
当您为每个创建的元素设置ID时,javascript将在内存中保存它,即使您尝试使用jQuery调用删除它们。可能是因为混合了创建元素和本机API,并在jQuery中删除了它。尝试检查您的$.cache
大小-如果太大,则表示jQuery没有正确删除对象
但首先,避免对不断创建的元素使用ID应该会有所帮助
更多解释请参见:,我没有在您从Chrome显示的跟踪中看到内存泄漏。您缺少的信息是当垃圾收集周期开始时,该周期可能会部分收集垃圾。让我解释一下 我不熟悉v8中的垃圾收集器,但在过去的不同时间我都在研究垃圾收集器。垃圾收集是快速释放未使用内存和应用程序响应之间的平衡。特别是在交互式应用程序中,您不希望长时间暂停执行以允许