首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在处理大型DOM元素时加速jQuery空()或replaceWith()函数

在处理大型DOM元素时加速jQuery空()或replaceWith()函数
EN

Stack Overflow用户
提问于 2009-06-12 17:17:53
回答 4查看 6.4K关注 0票数 7

让我首先为没有给代码片段道歉。我正在做的项目是专有的,恐怕我不能确切地显示我在做什么。然而,我会尽我最大的努力来描述。

下面是我的应用程序中发生的事情的细目:

用户单击一个按钮(如果需要的话,我可以更改这个数字),以data-table

  • Each行的形式检索表中的图像列表,其中包含8个数据单元格,每个单元格依次包含一个超链接
  • ,每个用户的请求最多可以包含50行(如果需要,我可以更改这个数字)
  • ,这意味着该表包含800多个单独的DOM元素

H 111我的分析显示jQuery("#dataTable").empty()jQuery("#dataTable).replaceWith(tableCloneObject)占用我整个处理时间的97%,平均花费4-6秒到complete.

在处理需要删除/替换的大量DOM元素时,我正在寻找一种方法来加快上述任何一个jQuery函数的速度。希望我的解释能帮上忙。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-12 17:33:05

jQuery empty()在您的表上花费了很长时间,因为为了防止内存泄漏,它对空元素的内容做了大量的工作。如果您能够承受这种风险,您可以跳过所涉及的逻辑,只需完成这样的处理表内容的部分:

代码语言:javascript
复制
    while ( table.firstChild )
        table.removeChild( table.firstChild );

代码语言:javascript
复制
    table.children().remove();
票数 8
EN

Stack Overflow用户

发布于 2009-06-12 17:23:37

最近,我有非常大的数据表,由于执行所有DOM操作,在进行更改时会占用15秒到一分钟的处理时间。在所有浏览器( IE除外)中,我将其降为<1秒(在IE8中需要5-10秒)。

我发现最大的速度增益是从DOM中删除我正在使用的父元素,执行对它的更改,然后将它重新插入到DOM中(在我的例子中是tbody)。

在这里,您可以看到两行相关的代码,它们极大地提高了性能(使用Mootools,但可以移植到jQuery)。

代码语言:javascript
复制
update_table : function(rows) {
    var self = this;
    this.body = this.body.dispose();  //<------REMOVED HERE
    rows.each(function(row) {
        var active = row.retrieve('active');
        self.options.data_classes.each(function(hide, name) {
            if (row.retrieve(name) == true && hide == true) {
                active = false;
            }
        });
        row.setStyle('display', (active ? '' : 'none'));
        row.store('active', active);
        row.inject(self.body);   //<--------CHANGES TO TBODY DONE HERE
    })
    this.body.inject(this.table);  //<-----RE-INSERTED HERE
    this.rows = rows;
    this.zebra();
    this.cells = this._update_cells();
    this.fireEvent('update');
},
票数 2
EN

Stack Overflow用户

发布于 2009-06-12 17:21:36

您必须一次全部重新填充,还是可以在setTimeout()上用块进行重新填充?我意识到,这可能需要更长的时间,但它值得用户看到一些事情发生,而不是一个明显的锁。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/987889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档