Was ist mit der Regel "Effektive CSS-Selektoren verwenden" passiert?

8

Es gab eine Empfehlung von Google PageSpeed, die Webentwickler bat, Verwenden Sie effiziente CSS-Selektoren :

  

Vermeidung ineffizienter Schlüsselauswahlelemente, die einer großen Anzahl von Schlüsseln entsprechen   Elemente können das Seitenrendering beschleunigen.

     

Details

     

Wenn der Browser HTML analysiert, erstellt er eine interne Dokumentstruktur   repräsentiert alle anzuzeigenden Elemente. Es stimmt dann überein   Elemente zu Stilen, die in verschiedenen Stylesheets angegeben sind   Standard-CSS-Kaskaden-, Vererbungs- und Ordnungsregeln. In Mozillas   Implementierung (und wahrscheinlich auch andere), für jedes Element, die   Die CSS-Engine durchsucht Stilregeln, um eine Übereinstimmung zu finden. Der Motor   wertet jede Regel von rechts nach links beginnend von ganz rechts aus   Selektor (genannt "Schlüssel") und bewegt sich durch jeden Selektor bis es   findet eine Übereinstimmung oder verwirft die Regel. (Der "Selektor" ist das Dokument   Element, auf das die Regel angewendet werden soll.)

     

Gemäß diesem System müssen die Regeln, die die Engine zu bewerten hat, weniger sein   desto besser. [...]. Danach für Seiten, die große Mengen enthalten   Elemente und / oder große Anzahl von CSS-Regeln, Optimierung der Definitionen   Die Regeln selbst können die Leistung ebenfalls verbessern. Der Schlüssel zu   Optimierungsregeln liegen darin, Regeln zu definieren, die so spezifisch sind wie   möglich und das vermeiden unnötige Redundanz, um den Stil zu ermöglichen   Engine, um schnell Übereinstimmungen zu finden, ohne Zeit mit der Auswertung von Regeln zu verbringen   das gilt nicht.

Diese Empfehlung wurde aus den aktuellen Regeln für die Geschwindigkeit der Seitengeschwindigkeit entfernt. Jetzt frage ich mich, warum diese Regel entfernt wurde. Haben Browser in der Zwischenzeit die CSS-Regeln effizient angepasst? Und ist diese Empfehlung mehr gültig?

    
Salman A 02.09.2014, 07:34
quelle

3 Antworten

6

Im Februar 2011 wurde der Webkit-Kernentwickler Antti Koivisto verschiedene Verbesserungen für CSS Selector Performance in Webkit gemacht.

  

Antti Koivisto lehrte den CSS Style Selector, um Geschwisterselektoren und schnelleres Sortieren zu überspringen, was einige kleinere Verbesserungen mit sich brachte, woraufhin er zwei weitere tolle Patches erhielt: eines, das die Filterung von Vorfahrenidentifizierern für Baumbildung ermöglicht und die verbleibende Zeit stilistisch halbiert Anpassung an eine typische Seitenauslastung und ein schneller Pfad für einfache Selektoren, die das Abstimmen um weitere 50% auf einigen Websites beschleunigen.

CSS Selector Performance hat sich geändert! (Zum Besseren) von Nicole Sullivan geht diese Verbesserungen genauer durch. Zusammenfassend -

  

Laut Antti können direkte und indirekte Nachbarkombinatoren immer noch langsam sein, aber Vorfahrenfilter und Regel-Hashes können den Einfluss verringern, da diese Selektoren nur selten zusammenpassen. Er sagt auch, dass Webkit immer noch viel Platz für die Optimierung von Pseudoklassen und -elementen hat, aber sie sind viel schneller, als wenn sie versuchen, dasselbe mit JavaScript und DOM-Manipulationen zu machen. In der Tat, obwohl es noch Raum für Verbesserungen gibt, sagt er:

     

"In der Moderation wird so ziemlich alles verwendet, was aus der Perspektive des Stilvergleichs gut funktioniert."

Obwohl Browser die CSS-Selektoren viel schneller anpassen, sollte dennoch darauf hingewiesen werden, dass CSS-Selektoren immer noch optimiert werden sollten (z. B. so flach wie möglich), um Dateigrößen zu reduzieren und Spezifitätsprobleme zu vermeiden.

    
Clint Brown 02.09.2014, 11:13
quelle
7

Hier ist ein gründlicher Artikel (der Anfang 2014 datiert ist)

>

Ich zitiere Benjamin Poulain , ein WebKit-Engineer, der viel über die Leistung der CSS-Selektoren zu sagen hatte Test:

  

~ 10% der Zeit werden im Rasterizer verbracht. ~ 21% der Zeit sind verbraucht   auf dem ersten Layout. ~ 48% der Zeit werden im Parser und DOM verbracht   Baumbildung ~ 8% werden für die Stilauflösung ausgegeben ~ 5% werden ausgegeben   den Stil sammeln - das sollten wir testen und was?   sollte die meiste Zeit dauern. (Die verbleibende Zeit ist über viele verteilt   viele kleine Funktionen)

Und er fährt fort:

  

"Ich stimme völlig zu, dass es sinnlos ist, Selektoren im Voraus zu optimieren, aber   aus ganz anderen Gründen:

     

Es ist praktisch unmöglich, den endgültigen Leistungseinfluss vorherzusagen   eines gegebenen Selektors durch bloßes Untersuchen der Selektoren. Im Motor,   Selektoren werden neu geordnet, aufgeteilt, gesammelt und kompiliert. Um das zu wissen   endgültige Leistung eines bestimmten Selektoren, müssten Sie wissen in   In welchem ​​Bucket der Selektor gesammelt wurde, wie er kompiliert wird und   Wie sieht der DOM-Baum schließlich aus?

     

All das ist zwischen den verschiedenen Motoren sehr unterschiedlich und macht das   ganze Prozess noch weniger vorhersehbar.

     

Das zweite Argument, das ich gegen Web-Entwickler habe, die Selektoren optimieren   ist, dass sie die Dinge wahrscheinlich verschlimmern werden. Die Menge an   Fehlinformationen über Selektoren sind größer als der korrekte Cross-Browser   Information. Die Chance, dass jemand das Richtige tut, ist schön   niedrig.

     

In der Praxis entdecken die Leute Leistungsprobleme mit CSS und starten   Regeln nacheinander entfernen, bis das Problem verschwindet. ich denke, das ist   Der richtige Weg, um dies zu tun, ist einfach und wird zur Korrektur führen   Ergebnis. "

Es gibt Ansätze, wie zum Beispiel BEM , die das CSS so flach wie möglich modellieren, um die DOM-Hierarchie-Abhängigkeit zu minimieren und Webkomponenten zu entkoppeln, so dass sie über das DOM "verschoben" werden und unabhängig arbeiten können.

    
vsync 04.05.2015 08:42
quelle
0

Vielleicht, weil CSS für CMSes oder Frameworks jetzt häufiger verwendet wird und es dann schwierig ist, allgemeine CSS-Selektoren zu vermeiden. Dies begrenzt die Komplexität des Stylesheets.

Auch moderne Browser sind sehr schnell beim Rendern von CSS. Selbst mit riesigen Stylesheets auf IE9 fühlte es sich nicht so an, als wäre das Rendering langsam. (Ich muss zugeben, dass ich an einem guten Computer getestet habe. Vielleicht gibt es dort Benchmarks).

Wie auch immer, ich denke, Sie müssen sehr ineffizientes CSS schreiben, um Chrome oder Firefox zu verlangsamen ...

Es gibt einen 2 Jahre alten Beitrag über die Leistung @ Welche CSS-Selektoren oder -Regeln können die Front-End-Layout- / Rendering-Leistung in der realen Welt erheblich beeinträchtigen?

Ich mag seine One-Liner-Schlussfolgerung: Alles in den Grenzen von "Ja, dieses CSS macht Sinn" ist in Ordnung.

    
Manuszep 02.09.2014 08:10
quelle