【发布时间】:2012-02-20 14:14:18
【问题描述】:
我有一个父 div,其中包含大约 300 个 div,所有这些都包含图像和一些文本。我有一个数组,其中包含我需要重新排序 div 的所有信息,使用引用..
if if then 在我订购后循环遍历数组,然后相应地移动元素,我会得到高达 100MB 额外时间的严重内存泄漏,我对它们进行排序!
我尝试了一些方法,但仍然没有成功
$.each(gameArray , function($idx, $itm) {
$("#elementid"+ $itm.split('|#|')[0] ).appendTo($("#parent"));
});
又一次尝试
$.each(gameArray , function($idx, $itm) {
var element = $("#elementid"+ $itm.split('|#|')[0] ).detach();
element.appendTo($("#parent"));
element = null;
});
又一次尝试
$.each(gameArray , function($idx, $itm) {
var element = $("#elementid"+ $itm.split('|#|')[0] ).clone(true).remove();
element.appendTo($("#parent"));
element = null;
});
我读到 detach 将元素保留在 DOM 中,因此当您将其放回页面时,它不会重新创建任何内容,也不会增加内存,但它似乎不起作用?!
我有什么遗漏吗?必须有一种在不增加内存的情况下对它们进行排序的方法吗?
我发现的所有示例都使用了包含大约 10 个列表元素的有序列表,因此您不会注意到内存增加!
【问题讨论】:
-
您是否尝试过在不使用 jQuery 的情况下移动 dom 元素?也许不断创建 jquery 对象是个问题?!
-
还没有!我现在看看并发布我的发现!
-
var parent = document.getElementById('game_panel'); $.each(koko.data('newGameArray'), function($idx, $itm) { var element = document.getElementById('gameidis'+$itm.split('|#|')[0]); 父.appendChild(element.parentNode.removeChild(element)); });使用标准 javascript 会导致同样的泄漏!
-
@RoryPickering 这仍然不是标准的 JavaScript。
$.each(..)也是一个jQuery方法。 -
@RobW 哦耶!!!看起来好像只是对 div 的操作导致了韭菜!我正要尝试 dgilland 下面发布的方法!
标签: javascript jquery memory-management memory-leaks