Wszyscy wiedzą, co robią selektory DOM, takie jak document.getElementByID(...)
i document.querySelector(...)
i jak można z nich korzystać przy użyciu klas, atrybutów, identyfikatorów i tak dalej.W jaki sposób querySelector działa pod maską?
Ale nie byłem w stanie stwierdzić, jak działa pod maską (mogę znaleźć perf test comparisons, ale jestem zainteresowany teorią). Wiem, że strona html jest ładowana, analizowana przez przeglądarkę i tworzone jest drzewo DOM. Ale w jaki sposób każdy z selektorów przechodzi przez drzewo DOM, aby znaleźć elementy.
Ja wziąłem spojrzenie na spec for parsing algorithm i czytać naprawdę ładne explanation how Browsers work, ale również daje doskonałe wyjaśnienie na temat HTML, CSS analizowania i renderowania przepływ nie daje wyjaśnienie w jaki sposób każdy z tych selektorów przemierza tego drzewa, aby znaleźć elementy.
Zakładam, że w celu znalezienia czegoś podobnego .black
lub span
musi przechodzić przez całe drzewo, ale znaleźć #id
można przejeżdżające jakąś dodatkową strukturę danych, a tym samym czyniąc go znacznie szybciej. Proszę nie pisać swoich założeń, szukam konkretnej wiedzy z backupem do specyfikacji lub implementacji w niektórych przeglądarkach.
Myślę, że lepiej byłoby zapytać na stronie http://programmers.stackexchange.com – spender
To szczegół implementacji i zależy od używanego silnika. Będziesz musiał przeczytać kod źródłowy różnych implementacji, jeśli chcesz wiedzieć. Zobacz http://pl.wikipedia.org/wiki/List_of_ECMAScript_engines jako punkt wyjścia. – slashingweapon
@slashingweapon Tak naprawdę nie sądzę. Jest to dość podstawowa funkcja i najprawdopodobniej będę zaimplementowana bardzo podobnie w głównych przeglądarkach. –