性能:jQuery remove()vs JavaScript removeChild()

时间:2013-04-17 11:31:35

标签: javascript jquery performance

我有一个包含大约1,500行的表。

我正在使用以下jQuery代码从DOM中删除表:

$('#myTable').remove();

需要大约300毫秒,造成明显的滞后。

使用removeChild()做同样的事情:

var myTable = $('#myTable')[0] ;
myTable.parentNode.removeChild(myTable);

需要大约30毫秒。

我可以轻松使用removeChild()版本,但我很困惑为什么jQuery的remove()需要更长的时间? removeChild()版本是否没有清除jQuery的内容?

演示:jspref

1 个答案:

答案 0 :(得分:8)

来自the documentation

  

除了元素本身,所有绑定事件和jQuery   与元素相关联的数据将被删除。

这意味着:

  • 这个函数做了一些额外的工作(主要是为自己和孩子调用cleanData
  • 您通常应该使用它来避免内存泄漏

这在源代码中清楚地显示:

remove: function( selector, keepData ) {
    var elem,
        i = 0;

    for ( ; (elem = this[i]) != null; i++ ) {
        if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
            if ( !keepData && elem.nodeType === 1 ) {
                jQuery.cleanData( getAll( elem ) );
            }

            if ( elem.parentNode ) {
                if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
                    setGlobalEval( getAll( elem, "script" ) );
                }
                elem.parentNode.removeChild( elem );
            }
        }
    }

    return this;
}