Javascript 处理大型DOM元素时加速jQuery empty()或replaceWith()函数

Javascript 处理大型DOM元素时加速jQuery empty()或replaceWith()函数,javascript,jquery,dom,performance,Javascript,Jquery,Dom,Performance,让我先为没有给出代码片段而道歉。我正在做的项目是专有的,我恐怕不能确切地说明我正在做什么。不过,我会尽我所能描述 下面是我的应用程序的详细情况: 用户单击一个按钮 服务器以数据表的形式检索图像列表 表中的每行包含8个数据单元,每个数据单元依次包含一个超链接 用户的每个请求最多可以包含50行(如果需要,我可以更改此数字) 这意味着该表包含超过800个单独的DOM元素 我的分析表明jQuery(#dataTable”).empty()和jQuery(#dataTable).replaceWith(

让我先为没有给出代码片段而道歉。我正在做的项目是专有的,我恐怕不能确切地说明我正在做什么。不过,我会尽我所能描述

下面是我的应用程序的详细情况:

  • 用户单击一个按钮
  • 服务器以数据表的形式检索图像列表
  • 表中的每行包含8个数据单元,每个数据单元依次包含一个超链接
    • 用户的每个请求最多可以包含50行(如果需要,我可以更改此数字)
    • 这意味着该表包含超过800个单独的DOM元素
    • 我的分析表明
      jQuery(#dataTable”).empty()
      jQuery(#dataTable).replaceWith(tableCloneObject)
      占据了我全部处理时间的97%,平均需要4-6秒才能完成

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

    您必须一次重新填充所有元素,还是可以在setTimeout()上分块重新填充?我意识到分块处理可能需要更长的时间,但对于用户来说,看到一些事情发生而不是明显的锁定是很有价值的。

    我最近有一个非常大的数据表,由于执行了所有DOM操作,在进行更改时会消耗15秒到1分钟的处理时间。我把它归结为jQuery
    empty()
    在您的表上花费了很长的时间,因为为了防止内存泄漏,它对清空元素的内容做了大量的工作。如果您能够承受这种风险,您可以跳过涉及的逻辑,只需像这样做,以摆脱表内容:

        while ( table.firstChild )
            table.removeChild( table.firstChild );
    


    对我有效的是
    $(“#myTable”).detach()
    。我必须清除一个有1000行的表。我尝试了
    $(“#myTable”).children().remove()
    。这是对
    $(“myTable”).empty()的改进,但仍然非常慢。
    $(“#myTable”).detach()
    需要1秒或更短的时间。
    在FF和Chrome中运行良好。IE仍然很慢。

    好的,我可以看出其中的逻辑。但是,在我的例子中,我基本上是从a中删除一个表。你可能认为这不会花费太长时间,但中的表包含800多个元素。在这种情况下,你认为你提出的解决方案仍然有效吗?我可以。他们正在介绍HTML 5中的DOM片段来处理这个问题。我认为,如果您尝试提取、更新它,并将其放回,您将看到巨大的性能提升。另外,操作非常简单,我用两行代码进行了更改。如果您安装了Firebug,您可以使用“控制台”选项卡下的“配置文件”按钮查看您的性能也开始吃东西了。这起作用了。我会做更多关于可能的内存泄漏的工作,但这完全加快了速度。谢谢大家!第一种方法起作用了,而不是第二种,这仍然会在大表(50k行)上给我带来堆栈溢出。
        while ( table.firstChild )
            table.removeChild( table.firstChild );
    
        table.children().remove();