2011-03-20 7 views
1

실행 시간은 document.getElementById입니까? 대부분 대수 인 O(log(n))이며 DOM은 트리이므로 n은 DOM의 요소 수입니다. 또한 O(1)으로 상수 일 수 있습니다. HTML 문서의 구문 분석 중에 ID가있는 모든 요소가 해시에 저장되는 경우 나는 개선 된 DOM 액세스로 새로운 자바 스크립트 엔진을 사용하여 브랜드를 홍보하는 브라우저를 계속 들었으므로 모든 브라우저에서 실행 시간이 동일한 지 확실하지 않습니다.document.getElementById 실행 시간

물어 이유 만약 내가 Mozilla's WebGL tutorial에이 글을 읽을 때문에 :

우리가 여기서 할 첫 번째 일은 캔버스라는 글로벌 변수에에게 를 보관 한 캔버스에 참조를 얻을 수있다. 캔버스를 반복적으로 참조 할 필요가없는 경우 은이 값을 저장하지 않아도되고 은 로컬 변수 또는 개체의 멤버 필드에 저장할 수 있습니다.

$ ('canvasId')를 수행하는 것이 모질라가이 경고를 한 경우 상수 조작보다 저렴하지 않을 수 있습니다.

$('id').writeAttribute('foo', 'bar'); 
console.info($('id').getWidth()); 
$('id').absolutize(); 

에 : 어쩌면 내가에서 내 코드를 다시 작성해야 해당 요소를 여러 번 액세스해야 할 때

var element = $('id'); 
element.writeAttribute('foo', 'bar'); 
console.info(element.getWidth()); 
element.absoltize(); 
+1

제공하신 견적에 경고가 표시되지 않습니다. 변수를 보유 할 수도 있고 가질 수도 있다고 설명합니다. 한 함수 내에서 확실히 지역 변수를 사용 하겠지만 전역 변수는 사용하지 않는 것이 좋습니다. 그러나 확실히 두 번째 예제는 더 빠릅니다 (문제는 얼마나되는지에 대한 것입니다). –

+5

관심 분야와 관련된이 게시물을 찾을 수 있습니다. http://stackoverflow.com/questions/2711303/javascript-getelementbyid-lookups-hash-map-or-recursive-tree-traversal – jbrookover

답변

1

지역 변수의 DOM 노드의 사본을 유지 항상 낫다. 즉, 그 요소에 액세스하는 코드가 3 줄 밖에 없다는 것을 알 수있을 것입니다.