我有一个div,我经常创建子div并稍后删除它们。 insert函数看起来像这样。
var insert = function(container, content) {
content = $(content);
container.append(content);
return content;
};
var newContent = insert($('#container'), '<div>new content</div>');
// later
newContent.remove();
container是一个jQuery对象。 content是一个类似<div>new content</div
&gt;的字符串。之后,该新内容将被删除。
div已从dom中正确删除,但使用chrome的分析功能,我可以看到内存增长和增长。该配置文件显示了一个字符串列表,其中数千个是我删除的内容。跟踪它,我发现jquery有一个叫做fragment的属性。
$.fragments
是一个映射,其中键字符串是html片段(字面意思是<div>new content</div>
是键字符串),值是DocumentFragment对象。
DocumentFragment对象包含属性“native”,其中包含“Detached DOM tree”类型的值。还有我的超然对象。
似乎问题是jQuery没有刷新这个$.fragments
集合。我正在使用jQuery 1.7.1。
我可以看到的一个可能的原因是地图的键是插入的html,但是当我开始删除片段时,我已经改变了newContent div的属性。
一种可能的解决方案是保留一堆未使用的新内容div并重新使用它们。我
答案 0 :(得分:1)
看起来jQuery正在使用$.fragments
来加速$("<...>")
。
我认为使用$("<div>").html(...)
不会使用缓存,但它在语义上显然不同。
您可以偶尔尝试自己刷新$.fragments
,看看会发生什么。我有直觉,一切都会像预期一样,没有任何不良影响。
我认为jQuery确实没有办法跟踪片段缓存的使用情况,而LRU缓存或某些东西可能会慢一些,更不用说实施起来会更麻烦。