2013-04-17 8 views
4

나는 약 1,500 개의 행을 포함하는 테이블을 가지고있다.성능 : jQuery remove() vs JavaScript removeChild()

나는 다음과 같은 jQuery 코드와 DOM에서 테이블을 제거 해요 : 아주 눈에 띄는 지연을 만드는 약이 300ms 소요

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

합니다. 로 removeChild()와 같은 일을하고

:

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

은 약 30ms의 소요됩니다.

나는 removeChild() 버전을 쉽게 사용할 수 있지만, 왜 jQuery의 remove()가 그렇게 오래 걸릴 까란 의아해했다. removeChild() 버전이 jQuery와 무관 한가?

데모 : jspref

+0

@ dystroy의 통찰력을 읽은 후 jQuery 소스 도구를 찾으러갔습니다. 훌륭한 소스 뷰어가 있습니다. http://james.padolsey.com/jquery/ – Kong

답변

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; 
    } 
    
  • +0

    왜 대답의 일부입니까? – Bergi

    +0

    @Bergi 나는 편집했다. jQuery 작업과 관련된 오버 헤드는 항상 있습니다. 그러나 매우 흥미롭지는 않아서 어구를 단순화했습니다. –

    +0

    감사합니다. 그것은 시간 차이를 명확하게 설명합니다. cleanData()를 우회하는 것이 안전한지 궁금합니다. 해당 요소에 대해 jQuery 이벤트가 없습니다. – Kong