2017-09-27 2 views
4

Kam über eine interesting video zum Debuggen der Renderleistung in Chrome Devtools. In seiner Lektion identifiziert Umar das Ändern einer CSS-Klasse für das html-Tag als Quelle eines Rendering-Engpasses. Devtools zeigt, dass sich die Änderung dieser Klasse potenziell auf die 3.874 Elemente im DOM unter html auswirkt und eine teure recalculate style-Operation auslöst.Beeinflussen mehrere Klassen im HTML-Tag die Renderleistung?

In der Vergangenheit habe ich CSS-Klassen zu meinem html oder body Tag als eine bequeme Möglichkeit hinzugefügt, den Zustand der Seite auf dieser Ebene auszudrücken.

Ihr CMS kann es für den gleichen Zweck tun. Auf einer WordPress-Website sehen Sie beispielsweise eine Reihe von Klassen wie post-template-default single single-post postid-99999 single-format-standard logged-in category-news subcategory-uk has-hover auf dem Tag eines Beitrags body.

Sollten wir diese Praxis vermeiden? Oder wird es sich nur auf die Renderleistung auswirken, wenn die Klassen in CSS-Regeln verwendet werden?

+3

Ich bin mir nicht sicher, was das Problem ist. Das Leistungsproblem wird durch das erforderliche erneute Zeichnen der Seite verursacht. Wenn es also kein Nachmalen gibt, gibt es kein Problem. –

+0

Andere CSS-Methoden wie BEM verwenden dieses Muster, und niemand hat über die Leistung des Stapelns von mehr als 1 Klasse in einer Zeile gesagt. – Nicholas

+0

Dank @MrLister, ich denke, ich bekomme es - also, wenn es keine CSS-Regeln für eine Klasse gibt, und ich die Klasse auf dem HTML-Tag ändern, wird der Browser nicht versuchen, alle Stile neu zu berechnen. Ich nehme an, der wichtige Punkt aus Umars Video ist, dass dies teuer sein kann, wenn * CSS-Regeln von einer Klasse auf einem Tag an der Spitze des DOM betroffen sind. –

Antwort

0

Es sollte nur Auswirkungen auf die Leistung haben, wenn Sie CSS-Stile darauf angewendet haben.

Browser-Anbieter verbringen viel Zeit mit dem Versuch, erstklassige Performance zu gewährleisten. CSS-Regeln werden so verarbeitet, dass sie sehr effizient nach notwendigen Rendering-Änderungen gescannt werden können Kaskadierender Reflow.

+0

Dank @scunliffe, dies scheint die Antwort zu sein - wir müssen uns nur um diese Klassen kümmern, wenn sie CSS-Regeln hinzufügen. –