2012-05-04 6 views
7

Zakładając, że nie ma szalonych optymalizacji (patrzę na ciebie Chrome).Jaka jest złożoność czasu przeglądarek HTML DOM

Mówię o surowym, nieprzyjemnym, nie naprawionym, nie naprawionym, tj. V6 javascript, koszt.

Dolna granica jest:

document.getElementById() 

Versus:

document.getElementsByTagName('div') lookup. 
+0

W przypadku optymalizacji pod kątem IE 6, zachęcam do ponownego rozważenia części "nie doszło do skutku". – robrich

+0

@robrich Nie optymalizuję niczego. Po prostu ciekawy. Myślałem, że ie6 oznaczałoby sarkazm za "aint-broke". Może powinienem "przytłumić" to dla jasności. –

Odpowiedz

9

getElementById można bezpiecznie założyć, aby być O(1) w nowoczesną przeglądarkę jako hashtable jest idealnym struktura danych dla id => mapowanie elementu.

Bez żadnych optymalizacji każde proste zapytanie - czy to selektor css, wyszukiwanie identyfikatora, odnośnik do klasy lub tagu - nie jest gorsze niż O(n), ponieważ zawsze wystarcza jedna iteracja nad wszystkimi elementami.

Jednak w dobrej przeglądarce spodziewałbym się, że mapowanie elementów będzie zmienne =>, więc getElementsByTagName będzie również getElementsByTagName również być O(1).

+0

i bez żadnej optymalizacji getElementsByTagName będzie musiała być O (n) nawet w najlepszym wypadku, ponieważ ostatni element może być tym, którego szukasz –

+0

Czyli to oznacza, że ​​przeglądarki mapują wiele widoków dla każdego znacznika przy zapisie, aby zmaksymalizować prędkość odczytu ? Czy nie byłoby to nieco więcej pamięci? –

+0

Wykorzystanie pamięci tych mapowań byłoby nieistotne. Byłoby znacznie mniej niż np. pojedynczy obraz (taki jak obraz tła na stronie internetowej) przechowywany w pamięci. – ThiefMaster