jQuery 排序元素、删除、分离、克隆、追加内存泄漏
我有一个父 div,里面有大约 300 个 div,所有内容都包含图像和一些文本。我有一个数组,其中包含我需要使用引用重新排序 div 的所有信息。
如果如果那么在我排序后循环遍历该数组,然后相应地移动元素,我会遇到严重的内存泄漏,额外时间高达 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;
});
我读到分离将元素保留在 DOM 中,因此当您将其放回页面时,它不会重新创建任何内容,也不会增加内存,但它似乎并没有工作?!
我有什么遗漏的吗?一定有一种方法可以在不增加那么多内存的情况下对它们进行排序吗?
我发现的所有示例都使用包含大约 10 个列表元素的有序列表,因此您不会注意到内存增加!
I have a parent div with around 300 div's inside its all containing an image and some text. i have an array which contains all the information i need to reorder the divs, using references..
if if then loop through the array after i had ordered it and then move the elements accordinly i get severe memory leaks of up to 100MB extra time i sort them!
i have tried a few ways and still no success
$.each(gameArray , function($idx, $itm) {
$("#elementid"+ $itm.split('|#|')[0] ).appendTo($("#parent"));
});
another attempt
$.each(gameArray , function($idx, $itm) {
var element = $("#elementid"+ $itm.split('|#|')[0] ).detach();
element.appendTo($("#parent"));
element = null;
});
another attempt
$.each(gameArray , function($idx, $itm) {
var element = $("#elementid"+ $itm.split('|#|')[0] ).clone(true).remove();
element.appendTo($("#parent"));
element = null;
});
i read that the detach keeps the element in DOM so when you put it back into the page it doesnt recreate anything and doesn't increase the memory, but it doesnt seem to work?!
is there something im missing? there must be a way of sorting them without increasing memory by that much?
All of the example i have found have been using ordered list's with around 10 list elements in so you dont notice the memory increase!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在遇到性能问题的繁重 (DOM) 操作中,您应该完全放弃 jQuery,并返回到普通 JavaScript(特别是如果非 jQuery 替代方案适用于所有现代浏览器)。
使用的方法有:
for
-loop 。document.getElementById
(标识符 )分割
( 分隔符、限制 )document.createDocumentFragment
At heavy (DOM) operations where performance issues are encountered, you should completely drop jQuery, and go back to vanilla JavaScript (especially if the no-jQuery alternative works across all modern browsers).
The used methods are:
for
-loop.document.getElementById
( identifier )split
( separator, limit )document.createDocumentFragment
尝试如下示例:
HTML:
Javascript:
这会分离您的子级,对它们进行排序,然后将它们附加回父级,从而避免在排序过程中修改 DOM。
Try something like this example:
HTML:
Javascript:
This detaches your children, sorts them, and then appends them back to the parent which avoids modifying the DOM during the sort process.