Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wydajność selektorów
erix
post 21.10.2010, 19:55:02
Post #1





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ostatnimi dniami chyba panuje wysyp moich trudnych pytań, na które mało kto zna odpowiedzi, ale co tam. biggrin.gif

Mianowicie, mam element w DOM:
Kod
body
-- tag
---- tag2
------ #ident


Czy uszczegółowanie selektora do postaci:
  1. body > tag > tag2 > #ident

będzie lepiej rzutować na wydajność aniżeli samo:
  1. #ident

?

Z tego, co wiem, to ponoć ten drugi wystarczy, ale przyznam, że nie znam budowy engine'ów przeglądarek do wyszukiwania po DOM, dlatego pytam. winksmiley.jpg Przegoogle'owując przy okazji, oczywiście. Ale opiniami praktyków nie pogardzę.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
wookieb
post 21.10.2010, 19:59:34
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




http://www.stevesouders.com/blog/2009/06/1...-css-selectors/

Cytat
It’s clear that CSS selectors with a key selector that matches many elements can noticeably slow down web pages. Other examples of CSS selectors where the key selector might create a lot of work for the browser include:
  1. A.class0007 DIV {}
  2. #id0007 > A {}
  3. .class0007 [href] {}
  4. DIV:first-child {}


Ale szczerze mówiąc nie przywiązywałbym do tego tak ogromnej wagi.
Poza tym budując reguły według 1 zasady zarąbałbyś się na śmierć tworząc wszystkie możliwe zagnieżdżenia selektorów.


--------------------
Go to the top of the page
+Quote Post
erix
post 21.10.2010, 20:15:05
Post #3





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Nie do końca jest tak, jak tam napisano. Bowiem:

http://css-tricks.com/more-on-css-selector-performance/

+ ludzie na Blipie mi uświadomili, że selektory są parsowane począwszy od prawej. Przeglądarka wyciąga wszystkie elementy pasujące do skrajnego prawego selektora, a potem już tylko filtruje wyciągnięte. Więc potwory w stylu:

  1. #subkontener element

Wyciągnie najpierw wszystkie element z dokumentu, dopiero potem sprawdzi dla każdego, czy #subkontener jest rodzicem któregoś z nich.

Zrujnowało to moje wiadomości o CSS, ale człowiek się przecież ciągle uczy. biggrin.gif


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
wookieb
post 21.10.2010, 20:39:23
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A jak ludzie z Blip-a Ci to udowodnili? Sprawdziłeś?

Poza tym wysłałeś link do prezentacji tego samego autora z którego wynika iż opcja pierwsza jest wolniejsza.

Ten post edytował wookieb 21.10.2010, 20:52:31


--------------------
Go to the top of the page
+Quote Post
erix
post 21.10.2010, 22:42:44
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
A jak ludzie z Blip-a Ci to udowodnili? Sprawdziłeś?

Linki do MDC, to mało?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Crozin
post 21.10.2010, 23:29:59
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Może zacznijmy od tego, że wydajności selektorów z pierwszego postu nie powinno się porównywać, ponieważ... są to dwa różne selektory (tj. wyłapują one inne elementy).

Co prawda nie mam tutaj nic na poparcie poniższej tezy (nawet nie jestem w pełni przekonany jej słuszności), ale z tego co się orientuję przeglądarki zapisują sobie swego rodzaju referencje do elementów posiadających identyfikatory (mowa oczywiście o dokumentach HTML) celem szybszego dotarcia do nich. Tak więc drugi selektor wymagałby jedynie odnalezienia odpowiedniej referencji, pierwszy natomiast dodatkowo wymagałby sprawdzenia czy reszta warunków selektora pasuje. Nie jestem jednak pewien czy taki mechanizm ma miejsce w przypadku CSSa (tutaj powód: http://www.jsfiddle.net/Gwr9E/ )
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.06.2025 - 21:29