Ich gebe zu, dass ich nicht sehr oft über diese Idee nachdenke… wie effizient ist das CSS, das wir schreiben, in Bezug darauf, wie schnell der Browser es rendern kann?
Dies ist definitiv etwas, worüber sich Browser-Anbieter Gedanken machen (je schneller Seiten geladen werden, desto zufriedener sind die Leute mit ihren Produkten). Mozilla hat einen Artikel über Best Practices. Google ist ebenfalls ständig auf einem Kreuzzug, um das Web schneller zu machen. Sie haben auch einen Artikel darüber.
Lassen Sie uns einige der wichtigsten Ideen behandeln, die sie präsentieren, und dann die praktischen Aspekte des Ganzen diskutieren.
Von rechts nach links
Eine der wichtigsten Dinge, die man verstehen muss, wie Browser Ihre CSS-Selektoren lesen, ist, dass sie sie von rechts nach links lesen. Das bedeutet, dass im Selektorul > li a[title="home"]das erste interpretierte Element ista[title="home"]. Dieser erste Teil wird auch als „Schlüsselselektor“ bezeichnet, da er letztendlich das Element ist, das ausgewählt wird.
IDs sind am effizientesten, Universal-Selektoren am wenigsten
Es gibt vier Arten von Schlüsselselektoren: ID, Klasse, Tag und Universal. In dieser Reihenfolge sind sie auch effizient.
#main-navigation { } /* ID (Fastest) */
body.home #page-wrap { } /* ID */
.main-navigation { } /* Class */
ul li a.current { } /* Class *
ul { } /* Tag */
ul li a { } /* Tag */
* { } /* Universal (Slowest) */
#content [title='home'] /* Universal */
Wenn wir diese Rechts-nach-links-Idee und die Schlüsselselektor-Idee kombinieren, können wir sehen, dass dieser Selektor nicht sehr effizient ist
#main-nav > li { } /* Slower than it might seem */
Auch wenn sich das seltsam kontraintuitiv anfühlt… Da IDs so effizient sind, würden wir denken, dass der Browser diese ID schnell finden und dann die li-Kinder schnell finden könnte. Aber in Wirklichkeit wird zuerst der relativ langsame li-Tag-Selektor ausgeführt.
Keine Tag-Qualifizierung verwenden
Niemals so etwas machen
ul#main-navigation { }
IDs sind eindeutig, daher benötigen sie keinen Tagnamen, um damit einherzugehen. Dies macht den Selektor weniger effizient.
Machen Sie es auch nicht mit Klassennamen, wenn Sie es vermeiden können. Klassen sind nicht eindeutig, so dass man theoretisch einen Klassennamen haben könnte, der auf mehreren verschiedenen Elementen nützlich sein könnte. Und wenn Sie möchten, dass das Styling je nach Element unterschiedlich ist, müssten Sie möglicherweise eine Tag-Qualifizierung verwenden (z.B.li.first), aber das ist ziemlich selten, also im Allgemeinen nicht.
Nachfahren-Selektoren sind am schlechtesten
David Hyatt
Der Nachfahren-Selektor ist der teuerste Selektor in CSS. Er ist furchtbar teuer – besonders wenn der Selektor in die Kategorie Tag oder Universal fällt.
Mit anderen Worten, ein Selektor wie dieser ist eine Effizienzkatastrophe
html body ul li a { }
Ein Selektor, der fehlschlägt, ist effizienter als derselbe Selektor, der übereinstimmt
Ich bin mir nicht sicher, ob wir viel daraus lernen können, denn wenn Sie viele Selektoren in Ihrem CSS haben, die nichts abgleichen, ist das, ähm, ziemlich seltsam. Aber es ist interessant festzustellen, dass bei der Rechts-nach-links-Interpretation eines Selektors, sobald er bei einer Übereinstimmung fehlschlägt, aufhört zu suchen und somit weniger Energie verbraucht, als wenn er weiter interpretieren müsste.
Überlegen Sie, warum Sie den Selektor schreiben
Betrachten Sie dies
#main-navigation li a { font-family: Georgia, Serif; }
Font-familykaskadiert, daher benötigen Sie möglicherweise von vornherein keinen so spezifischen Selektor (wenn Sie nur die Schriftart ändern). Dies kann genauso effektiv und weitaus effizienter sein
#main-navigation { font-family: Georgia, Serif; }
CSS3 und Effizienz
Ziemlich traurige Nachrichten von David Hyatt
Die traurige Wahrheit über CSS3-Selektoren ist, dass sie wirklich überhaupt nicht verwendet werden sollten, wenn Ihnen die Seitenleistung wichtig ist.
Der ganze Kommentar ist lesenswert.
CSS3-Selektoren (z.B. :nth-child) sind unglaublich toll, um uns zu helfen, die gewünschten Elemente anzusprechen und gleichzeitig unser Markup sauber und semantisch zu halten. Aber Tatsache ist, dass diese ausgefallenen Selektoren ressourcenintensiver für den Browser sind.
Was ist also los, sollten wir sie tatsächlich nicht verwenden? Denken wir ein wenig über die praktischen Aspekte nach…
Praktische Aspekte
Dieser Mozilla-Artikel, den ich oben verlinkt habe? Im wahrsten Sinne des Wortes 10 Jahre alt. Fakt: Computer waren vor 10 Jahren viel langsamer. Ich habe das Gefühl, dass diese Dinge damals wichtiger waren. Vor zehn Jahren war ich kurz davor, 21 zu werden, und ich glaube nicht, dass ich überhaupt wusste, was CSS ist. Daher werde ich nicht auf „alte Schule“ machen… aber ich habe das Gefühl, dass wir nicht sehr oft über diese Rendering-Effizienz sprechen, weil es kein so großes Problem mehr ist.
So sehe ich das: Die Best Practices, die wir oben behandelt haben, sind so oder so sinnvoll. Sie können sie genauso gut befolgen, weil sie Ihre Fähigkeiten mit CSS ohnehin nicht einschränken. Aber Sie müssen nicht dogmatisch sein. Wenn Sie sich in der Lage befinden, die letzte Leistung aus einer Website herauszuholen, und Sie diese Dinge noch nie zuvor in Betracht gezogen haben, kann es sich lohnen, Ihre Stylesheets zu überprüfen, um zu sehen, wo Sie sich verbessern können. Wenn Sie keine große Rendering-Langsamkeit auf Ihrer Website feststellen, machen Sie sich keine Sorgen, seien Sie sich dessen nur für die Zukunft bewusst.
Superschnell, null Praktikabilität
Wir wissen also, dass IDs die effizientesten Selektoren sind. Wenn Sie die effizienteste Rendering-Seite erstellen wollten, würden Sie buchstäblich jedem einzelnen Element auf der Seite eine eindeutige ID geben und dann das Styling mit einzelnen ID-Selektoren anwenden. Das wäre superschnell und auch super lächerlich. Es wäre wahrscheinlich extrem unsemantisch und extrem schwierig zu pflegen. Sie sehen diesen Ansatz nicht einmal auf Hardcore-Performance-basierten Websites. Ich denke, die Lektion hier ist, Semantik oder Wartbarkeit nicht für effizientes CSS zu opfern.
Vielen Dank an Jason Beaudoin für die E-Mail zu dieser Idee. Wenn jemand mehr über diese Dinge weiß, oder wenn Sie zusätzliche Tipps haben, die Sie in diesem Sinne verwenden, lassen Sie es uns wissen!
Nur als kurze Anmerkung möchte ich auch erwähnen, dass, da CSS-Stilselektoren auch in vielen JavaScript-Bibliotheken verwendet werden, dieselben Konzepte auch hier gelten. ID-Selektoren sind am schnellsten, während komplizierte qualifizierte Nachfahren-Selektoren und dergleichen langsamer sind.
Das sind ausgezeichnet recherchierte Punkte, um die Rendergeschwindigkeit von Browsern zu verbessern. Wie denken Sie über die CSS-Kompression durch Minifizierung?
Kompression ist großartig und wird Ihnen in einer Produktionsumgebung sehr zugute kommen, wenn Sie diese Kompression zu einem Teil Ihres Workflows machen können, der nicht umständlich wird.
Es sollte hier beachtet werden, dass die „Effizienz“, über die wir oben sprechen, nichts mit Kompression zu tun hat. Hocheffiziente Selektoren sind hocheffizient, unabhängig davon, ob sie von einem komprimierten Stylesheet bereitgestellt werden oder nicht.
Zur Kenntnis genommen.
Ja, selbst ich wollte dasselbe fragen. Aber sehr gut von Chris erklärt. Ich dachte immer, dass die CSS-Leistung durch Komprimierung verbessert werden kann, wusste aber nie, dass sie so sehr von der Art und Weise abhängt, wie wir sie auswählen. Spielt das eine Rolle, wenn das Stylesheet lang geworden ist?
Es ist interessant – und mehr als nur ein bisschen deprimierend – zu erfahren, dass Nachfahren-Selektoren eine „Effizienzkatastrophe“ sind. Ich bin immer davon ausgegangen, dass es besser ist, einem Elternelement eine Klasse zuzuweisen und dann einen Nachfahren-Selektor zu verwenden, um seine Kindelemente zu stylen, wie in
ul.someclass li {...}Ich verwende dort auch eine Tag-Qualifizierung… seufz.
Ich würde mich deswegen nicht allzu schuldig fühlen… Sie könnten die Tag-Qualifizierung weglassen, wenn Sie können, aber Nachfahren-Selektoren gehören für uns CSS-Entwickler oft einfach zum Leben dazu.
Ich versuche darüber nachzudenken, wie man das tatsächlich testen könnte. Würde das Net-Panel in Firebug die Unterschiede widerspiegeln?
Navigationsmenüs fallen mir ein.
Nur für "Best Practices" habe ich die Art und Weise geändert, wie ich mein CSS schreibe, indem ich keine Nachfahren-Selektoren mehr verwende.
Mein nav wäre also
#nav { list-style: none; other styles… }
#nav li { }
#nav a { }
#nav span { }
und so weiter. Natürlich könnte ich Klassennamen anwenden, um es effizienter zu machen, aber das scheint übertrieben, es sei denn, Sie haben Dropdowns.
Die Tag-Qualifizierung ist interessant. Ich werde das definitiv mehr in meiner Entwicklung berücksichtigen.
Ist es jedoch nicht ein schlechter Tausch, effizienter gerendertes CSS gegen mit vielen IDs und Klassen überladenes HTML einzutauschen? Sollte die Erstellung von leichtgewichtigem, semantischem Markup nicht Vorrang vor einer CSS-Datei haben, die schneller gerendert wird? Ich schätze, es gibt wahrscheinlich irgendwo ein glückliches Mittelmaß, aber es fühlt sich für mich falsch an, im Namen der CSS-Rendering-Geschwindigkeit spezifischere Klassen und IDs hinzuzufügen.
OK, ich habe den fettgedruckten Text übersehen… „Ich denke, die Lektion hier ist, Semantik oder Wartbarkeit nicht für effizientes CSS zu opfern.“
Wie auch immer, toller Artikel.
Wahrscheinlich nicht. Ich weiß nicht, wie man zuverlässige Metriken dazu erhalten würde. Ich wäre jedoch sehr daran interessiert zu erfahren, ob jemand ein Tool hat, das verwendet werden könnte.
Ich kann in die Dokumentation verschiedener Browser dazu gehen und ein Benchmark-Skript in PHP erstellen, das die Unterschiede bei den Ladezeiten zwischen zwei oder mehr Stylesheets rendert.
D.h.: Ihr aktuelles Stylesheet und eine etwas optimierte Version davon, nach bestem Wissen. Ich denke, es gäbe ein großes Interesse an einer CSS-Benchmarking-Seite. Natürlich, wenn das ein Erfolg wird, weiß ich, wo ich einen großartigen Designer herbekomme ^^
Ich garantiere, dass Mozilla eine Möglichkeit hat, Metriken dazu aus ihrer Rendering-Engine zu extrahieren… Ich weiß nicht, was es ist, aber sie führen Regressions-Tests für ALLES durch und haben Tests, um sicherzustellen, dass sie die Leistung in diesem Bereich nicht verschlechtern.
Außerdem ist die Instrumentierung möglicherweise nicht für Webinhalte verfügbar, sondern nur für Dinge, die mit Chrome-Privilegien ausgeführt werden… Sie könnten also ein Add-on erstellen, das Ihnen Informationen über diese Dinge liefert.
Auf jeden Fall sollten sie, es sei denn, Sie schreiben WIRKLICH schreckliche Selektoren, kein Leistungsproblem auf vernünftigen Seiten verursachen (d. h. es könnte ein Problem auf gigantischen Seiten sein… aber diese werden wahrscheinlich sowieso Leistungsprobleme haben)
Abgesehen davon, dass Sie einen Artikel zitieren, der aktuell war, als Bill Clinton noch Präsident war, auf welchen anderen Informationen basiert Ihr Artikel?
Außerdem ist ein Beispiel für Nachfahren-Selektoren wie HTML body ul li a {} lächerlich, wenn auch nicht unbekannt. Die ersten drei Elemente sind redundant und unnötig. Mit anderen Worten, li a {} würde genau dasselbe bewirken.
Ich habe deutlich darauf hingewiesen, dass der Mozilla-Artikel in dem Artikel alt war. Aber es gibt aktuellere Schriften darüber, die immer noch darauf verweisen, wie dieser Auszug aus Even Faster Websites.
Ihr zweites Beispiel ist genau die Art von Dingen, die ich den Leuten klarer machen wollte.
Haben Sie nicht die Google-Seite gesehen, die im selben Absatz verlinkt ist?
Natürlich habe ich das. Aber alles, was ich bisher gelesen habe, sind Best Practices und nichts, was tatsächlich Geschwindigkeitstests für CSS-Selektoren zeigt.
Schon mal eine Myspace-Anpassung gemacht? Das sind einige hässliche Nachfahren-Selektoren.
Benutzen Leute noch Myspace? lol
Im Ernst. Buchstäblich "td td td td td td td td li a td…." nur um einen Abschnitt anzupassen haha.
Und @Stephen. Nein, wirklich, niemand tut es. :P Meine beiden dümpeln nur im Internet herum, verlassen und einsam.
Ich denke, das ist einer der Gründe, warum es niemand mehr benutzt – es bietet die Möglichkeit zur Anpassung, aber die Art und Weise, wie man es angehen muss, ist so dumm, dass die Leute frustriert werden und aufgeben.
=)…jep, sie benutzen myspace und es gibt immer noch Web-„Entwickler“, die Table-Designs für NEUE Websites verwenden!
Die folgende Festival-Seite wird jedes Jahr neu gestaltet (letztes Jahr hatten sie einen anderen Designer…) http://www.gurtenfestival.ch/ … schauen Sie sich den Quellcode an, aber fangen Sie nicht an zu weinen =P…
Ich dachte, „HTML body ul li a {}“ sei nur ein Dummy. Es könnte „html#one body#article ul.items li#active a.tooltip“ sein. Ja, es gibt Anlässe, das HTML-Element mit IDs zu versehen. Und ja,
Warum sollte „HTML body ul li a {}“ lächerlich sein? Das Ding heißt CSS, was Cascading Style Sheet bedeutet. Warum haben sie es nicht Selector Style Sheet genannt?
Schließlich: HTML5 macht die Kaskadierung viel schlimmer: section#article section.chapter figure.photo figcaption.right.
Das ist nicht die Kaskade, das sind nur Nachfahren-Selektoren.
Die Kaskade ist, wie Elemente Stile erben.
ul {
Stile hier
}
ul li {
Stil hier
}
das ist die Kaskade
Ich lerne aus jedem Kommentar, also werfe ich mein Körnchen Salz hier ein: Die Kaskade dreht sich um das Überschreiben von Stilen aufgrund der Spezifität und Reihenfolge der Selektoren.
Wie
ul{color:#fff}
ul{color:#f00}
#someParticularUl{color:#0f0}
#someOtherUl{color:#00f}
würde die erste Gruppe rot, das zweite Element grün und das dritte Element blau machen, weil der Browser die Stil-Kaskade interpretiert.
Die ersten beiden sind unnötig, aber das 'ul' möglicherweise nicht; 'li's können in 'ol's enthalten sein.
Hey Chris, danke für diesen Artikel, er ist großartig!
Ich bin daran interessiert, einen richtigen Weg zu finden, um CSS-Selektoren (DIVs) zu benennen.
Ich habe einen Artikel über das Benennen von DIVs geschrieben, aber bisher ist es kein abgeschlossenes Thema und ich habe das Gefühl, dass es noch viel zu diesem Thema zu sagen gibt.
Können Sie uns dabei helfen?
Danke!
Guter Artikel, es gibt einige Punkte (bezüglich RTL-Parsing), die ich noch nie zuvor in Betracht gezogen hatte. Es gibt jedoch Zeiten, in denen die Qualifizierung Ihrer Klassen mit einem Elementnamen hilfreich sein kann, insbesondere um Spezifitätsprobleme zu überwinden.
Das Hinzufügen des Tags fügt 0,0,1,0 zur Spezifität hinzu, was ziemlich gering ist. Ich denke, im Allgemeinen ist es besser, eine ID hinzuzufügen und auf der Grundlage dieser neuen ID zu zielen, wenn man gegen ein Spezifitätsproblem ankämpfen will. Ich verstehe, was Sie sagen, aber da ich jetzt weiß, dass die Tag-Qualifizierung weniger effizient ist, könnte sie genauso gut vermieden werden.
Ja, es ist gering, aber manchmal ist das alles, was Sie brauchen :)
Verstehen Sie mich nicht falsch, ich bin definitiv ein Befürworter von sauberem Markup & CSS, aber kennen Sie Zahlen, die die Auswirkungen der Selektorenpedanterie zeigen? Es ist einfach schwer vorstellbar, dass die reale CSS-Nutzung die Draw-Zeiten von Seiten SO stark beeinflusst – selbst http://sxsw.beercamp.com/ rendert schnell.
Sie sagen „niemals so etwas machen“
ul#main-navigation { }Doch es gibt einen sehr guten Grund (jenseits der Effizienz), dies zu tun… Indem man eine ID mit einem Element qualifiziert, ist es einfacher, sich einfach das CSS anzusehen und zu wissen, dass diese ID auf eine ungeordnete Liste angewendet wird. Ohne den Elementqualifizierer zwingen Sie diejenigen, die Ihr CSS bearbeiten und verwenden, immer, zum Markup zu wechseln, um zu verstehen, auf welches Element diese ID angewendet wird.
Außerdem könnten Sie eine „wandernde“ ID haben. Wenn die ID auf ein UL angewendet wird, ist diese Regel spezifischer als nur ein ID-Selektor.
Wenn die Tag-Qualifizierung für Sie die Lesbarkeit von CSS so sehr verbessert, dann tun Sie es. Seien Sie sich nur bewusst, dass es weniger effizient und nicht notwendig ist. Einige Leute verwenden keine Kurzschrift, weil sie denken, dass das Auflisten der einzelnen Eigenschaften lesbarer ist, aber sie sind sich bewusst, dass dies die Größe der CSS-Datei erhöht.
IDs sind nur im Kontext einer einzelnen Seite eindeutig. Es ist jedoch eine Best Practice, Stylesheets zu verketten, die über Seiten hinweg gemeinsam genutzt werden können – in diesem Fall muss eine ID möglicherweise begrenzt oder qualifiziert werden.
Die Leute verwenden Tag-Qualifizierungen der Lesbarkeit halber (was auch ziemlich wichtig ist), ich denke, das Wichtigste ist, eine anständige Balance zu finden.
/*ul*/#main-navigation { }Das sollte bei der Lesbarkeit helfen, ohne die Ineffizienz. Natürlich könnten Sie auch einen Kommentar über die Zeile hinzufügen, der main-navigation als ungeordnete Liste identifiziert.
Dies in Verbindung mit einem automatisierten Minifizierungsprozess, der Kommentare entfernt, wäre eine ziemlich gute Lösung zur Optimierung von Lesbarkeit und Effizienz. Es gibt möglicherweise sogar andere Stellen, an denen dies nützlich ist (z.B. die Angabe übersprungener Nachfahren).
/*ul*/#main-navigation /*li*/ a { }Wow, das ist eine großartige Idee. Das werde ich definitiv in meinen Stylesheets implementieren :)
zweiter!
Einige Browser können Kommentare mitten im Selektor nicht verarbeiten, sodass die Regel möglicherweise ganz übersprungen wird. Außerdem verlangsamen viele Kommentare die Dinge ein wenig.
@Timmy: Nun, würde „Dies in Verbindung mit einem automatisierten Minifizierungsprozess, der Kommentare entfernt“ das nicht zu einem Nicht-Problem machen?
Wort!
du Idiot, warum solltest du das tun und dein Stylesheet aufblähen!
Ich stimme Shaun zu, aber aus einem ganz anderen Grund. Stylesheets werden nicht nur auf einer Seite verwendet (es sei denn, Sie möchten für jede Seite ein anderes laden, was nicht wirklich zum Effizienzthema dieses Artikels passt), was bedeutet, dass eine ID auf einer Seite möglicherweise mit einem anderen Element auf einer anderen Seite verbunden ist. Wenn Sie also nur ein Span-Element mit der ID „message“ ansprechen möchten, aber nicht die Textarea auf einer anderen Seite mit derselben ID, müssen Sie span#message verwenden. Sicher, es sollte, wenn möglich, aus Effizienzgründen vermieden werden, aber sagen Sie nicht „niemals“.
Das war in der Tat der einzige Punkt, bei dem ich dachte „oh Scheiße, das mache ich“ =P… und ich mache es aus genau demselben Grund… Lesbarkeit, also muss ich mich mit CSS-Minifizierung beschäftigen (mache es bereits mit dem JS), aber soweit ich wusste, hatte ich einige Probleme mit IE, als ich das CSS minimierte, also habe ich es herausgenommen…
Aber sehr schöner Artikel @Chris
Das andere, woran ich dachte: Wenn Ihnen die Leistung Ihrer Website wirklich am Herzen liegt, müssen Sie meiner Meinung nach eine Hierarchie erstellen, was die Seite am meisten verlangsamt… und ich denke, das CSS trägt einen seeehr kleinen Teil zur Ladezeit bei… Ich denke, der größte Teil der Ladezeit kommt von Inhalten/CSS-Bildern (wenn nicht in Sprites), dann JS und dann all den anderen Sachen… also würde ich zuerst die Bilder und das JS optimieren
aber beim Schreiben neuer Websites ist dieses CSS-Performance-Zeug auf jeden Fall hilfreich… um es einfach richtig zu machen =)… wie andere sagten… wo sind die Benchmarks? =)…
Danke Chris,
Dies wird mich tatsächlich dazu bringen, etwas mehr darüber nachzudenken, wie ich mein Markup schreibe. Im Moment, wenn ich mir nicht sicher bin, ob ich einen Selektor wiederverwenden werde, werfe ich einfach eine Klasse darauf, vielleicht sollte ich anfangen, über IDs nachzudenken.
danke
Ich denke, der wichtigste Teil davon ist einfach, die Kosten unseres Codes zu verstehen und sie zu berücksichtigen. Wie Chris bemerkte, würde eine starre Anwendung dieser Prinzipien sicherlich zu einer Beeinträchtigung der Erstellung von semantischem Markup führen. Danke für den Artikel Chris!
Interessant. Ich habe noch nie über die Effizienz von CSS nachgedacht. Ich hänge selten Elemente an meine IDs und Klassen an, aber wenn ich es nicht brauche, werde ich darauf achten, es wegzulassen.
Danke für einen weiteren großartigen Beitrag Chris. Ich verwende ständig html & body Nachfahren-Selektoren, daher könnte es an der Zeit sein, meine Gewohnheiten zu ändern.
Warum parsen Browser CSS von rechts nach links? Das klingt für mich nach dem Effizienzproblem…
Es macht mehr Sinn, dass es den begrenzenden Selektor liest, bevor es solche liest, die logischerweise weiter unten im Stapel wären.
Ich schätze, deshalb: http://en.wikipedia.org/wiki/Bottom-up_parsing
Ich kann mit Sicherheit sagen, dass es um Leistung geht. Ich bin mir nicht sicher, ob ich genau erklären kann, warum.
Grundsätzlich, wenn Sie einen Baum wie
div ul li
haben, muss er jedes div abgleichen, dann jedes Element durchgehen und prüfen, ob es ein ul ist, dann, wenn es ein ul ist, jedes Element prüfen und sehen, ob es ein li ist. Dazu muss es den DOM-Baum durchlaufen.
Wenn man es umgekehrt macht, kann es eine Nachschlagetabelle jedes li-Elements auf der Seite erstellen. (Ich bin mir nicht sicher, ob es buchstäblich die genaue Implementierung ist, aber es ist funktionell dasselbe). Es muss dann nur seine Vorfahren überprüfen, um zu sehen, ob es irgendwo ein ul hat, und dann irgendwo an diesem Punkt, wenn es einen Body hat.
Dies RTL zu tun, ist viel schneller für Fälle, in denen Sie keine Annahmen über die Struktur des geparsten Dokuments treffen können (d. h. ein generischer Parser).
superschnell
.list {}
.list_li {}
.list_li_span{}
.list_li_span_a{}
Verwenden Sie keine ID!
Scherzen Sie?
nein! :)
Verwenden Sie so ausführliche Klassennamen für alles?
Sie klingen wie ein CMS
@zolotoy – gutes Muster!
Das ist ausgezeichnet, wenn Sie dies über ein Skript automatisieren.
Warum überhaupt Markup verwenden, wenn Sie Klassennamen wie diesen verwenden? Wickeln Sie alle Ihre Inhalte in ein DIV ein und setzen Sie float left?
Also …
wirklich?
Dieses Muster ist gut für effizienteres Rendern von CSS auf Hochleistungs-Websites
Toller Artikel.
Wie würden Sie das testen? Mit anderen Worten, wie messen Sie, wie effizient das CSS ist? Welche Tools und Methoden würden Sie empfehlen?
Rick
http://static.yandex.net/reflowmeter/_reflow-meter.js
Hallo Chris,
Wie denken Sie über Pseudoselektoren in Bezug auf diesen Artikel?
Ich hoffe, Ihr Browser sieht einen Pseudoselektor als Teil des übergeordneten Selektorelements. Andernfalls wäre die ganze :hover-Sache eine große Plage für Browser.
Also, noch einmal: Was denken Sie darüber?
Google hat ein paar überqualifizierte Selektoren in meinem Stylesheet aufgedeckt, vorher hatte ich keine Ahnung davon. Cooler Beitrag!
„Nur als kurze Anmerkung möchte ich auch erwähnen, dass, da CSS-Stilselektoren auch in vielen JavaScript-Bibliotheken verwendet werden, dieselben Konzepte auch hier gelten.“
Es stimmt einfach nicht. Das Tag-Qualifizierungsding in jQuery hat mehr Geschwindigkeit. Das liegt daran, dass, wenn Sie so etwas wie $(‘.class’) auswählen, es hinter den Kulissen getElementByTagName verwendet und einen Stern hineinsetzt und jedes Element überprüft, um zu sehen, ob es diese Klasse hat. Es ist effizienter, so etwas wie $(‘a.class’) zu machen.
Ich frage mich jedoch, warum der Parser von rechts nach links geht, wenn das, was wir schreiben, von links nach rechts geht?
Es stimmt, dass die Verwendung eines ID-Selektors in JavaScript der schnellste/einfachste Selektor ist, genau wie in CSS.
Hallo Chris & Hassan.
Sie haben beide recht mit dem jQuery-Codekommentar – früher war es schneller, dem jS/jQuery tatsächlich zu helfen, das Element über ID/über das DOM zu finden, wenn es um die Verwendung von Klassen geht.
Heutzutage sieht es jedoch so aus, als würde jQuery getElementByClassName verwenden, das kürzlich zu neueren Browsern hinzugefügt wurde (Chrome tut es auf jeden Fall)!
Lesen Sie dies durch/suchen Sie danach – http://code.jquery.com/jquery-1.4.2.js
Für weitere Details!
Es ist wahr, aber Sie haben sicherlich einen sehr stichhaltigen, leicht übersehenen Punkt.
jQuery „implementiert“ im Grunde die CSS-Auswahl, daher unterscheidet sich die Art und Weise, wie es Elemente auswählt, von der Art und Weise, wie der Browser nativ Elemente auswählt, um CSS-Stile anzuwenden. Es umschließt die nativen JavaScript-Methoden, um die Entwicklung zu vereinfachen, und tut dies mit der bestmöglichen Leistung, die es zusätzlich zu den nativen JavaScript-Funktionen bieten kann.
Der Browser hat eine umfassendere, native Methode zum Anwenden der CSS-Regeln und verwendet eine andere Methodik.
Für JavaScript wählen Sie relativ wenige Dinge zur Bearbeitung aus. Für das Browser-DOM-Styling muss jedes einzelne DOM-Element ausgewertet werden. Die Backend-Logik wird daher anders gehandhabt.
Oben (in einem früheren Beitrag über das Browser-Parser-RTL-Problem) habe ich eine gründlichere Beschreibung, wie/warum es von rechts nach links gemacht wird.
Toller Artikel. Ich habe vor etwas mehr als einem Jahr angefangen, mir selbst CSS beizubringen, und ich halte mich immer noch für einen ziemlichen Anfänger, besonders wenn es um Best Practices geht und darum, die gesamte Semantik zu verstehen. Ich bin auch froh zu lesen, dass es keine gute Idee ist, „Tag-Qualifizierungen“ zu verwenden. Ich hatte dies ziemlich oft getan, nachdem ich mir den Code anderer Designer angesehen hatte, während ich versuchte, es mir selbst beizubringen. Ich bin davon ausgegangen, dass dies aus organisatorischen Gründen geschehen sollte, und ich bin froh, das Gegenteil herauszufinden!
Schön! Hat mir gerade geholfen, ein Problem zu lösen, das ich hatte. Verdammt, ich kann nicht genug betonen, wie sehr mir das gerade geholfen hat!
Chris, danke dafür. Ich habe gerade erst angefangen, die meisten dieser Praktiken zu befolgen, bevor ich diesen Artikel gelesen habe, aber nicht, weil ich dachte, sie würden das Laden meines CSS beschleunigen, sondern weil mir gefiel, wie einfach sie meinen Code hielten. Ich habe jedoch festgestellt, dass ich, um die Verwendung zu vieler Nachfahren-Selektoren und Klassennamen zu vermeiden, die !important-Eigenschaft verwenden musste, um Spezifitätsprobleme zu beheben. Mir persönlich macht das nichts aus, aber ich habe mich gefragt, was Sie davon halten… Ich weiß, dass einige sehr dagegen sind, !important jemals zu verwenden, oder es zumindest so weit wie möglich zu vermeiden…
Obwohl ich niemals den HTML-Body-Teil einfügen würde, Nachfahren
ul li a { }Bieten Sie mir viel Möglichkeiten beim Erstellen schneller Websites und bei der Anwendungsentwicklung; besonders in Umgebungen, in denen wir viele Apps haben, die ein ähnliches Design teilen.
Zum Beispiel erstellen wir eine interne Immobilienverwaltungs-App mit Abteilungen für Engineering, Sicherheit, Zeiterfassung und für unsere Mieter, um mit uns zu interagieren. Indem ich auf übermäßige IDs und Klassen verzichte, habe ich mein HTML und CSS von 900 auf 300 Codezeilen reduziert (es ist eine umfangreiche Anwendung), und es ermöglicht meinen jüngeren Designern und Entwicklern, schneller zu codieren, da bestimmte grundlegende HTML-Tags standardmäßig verwendet werden, wenn sie auf bestimmte Weise verwendet werden. Wir fanden es tatsächlich schneller für Benutzer auf diese Weise, aber der Kompromiss war wiederum eine starre HTML-Struktur für die Semantik anstelle von ID hier Klasse hier.
Steve Souders hat dies auch auf seinem Blog diskutiert
Ich versuche, sehr ineffiziente Regeln zu vermeiden, ich denke, es ist Zeit, sich die ineffizienten auch genauer anzusehen!
Hallo Chris,
Das war ein großartiger Beitrag. Ich bin ein langjähriger Leser, schreibe aber zum ersten Mal einen Kommentar!
Ich hatte einen dieser „AHHH HAAA“-Momente, als ich das las
#main-navigation li a { font-family: Georgia, Serif; }#main-navigation { font-family: Georgia, Serif; }Ich code CSS schon seit einiger Zeit und habe diesen Fehler so oft gemacht. Effizienz FTW!
Nochmals vielen Dank für all die großartigen Beiträge und Screencasts!
Haha, und ich habe die Antwort vermasselt, obwohl ich Ihr „Remember“ rechts gelesen habe.
Ich sollte mich am besten selbst bei „Submit A Douche“ einreichen :)
Stylesheets auf diese Weise zu schreiben, könnte nützlich sein, wenn man ein Stylesheet für mobile Geräte schreibt. Diese sind immer noch langsamer als Computer. Also zählt jede Sekunde, oder?
Hallo zusammen :) Interessanter Artikel.
Obwohl es gut ist, so viel wie möglich optimierten CSS-Code zu schreiben, kann es bei riesigen, und ich meine riesigen Websites mit vielen Inhalten und unterschiedlichen Layouts für verschiedene Abschnitte einige Probleme mit Klassennamen geben.
Wenn ich 6 oder 7 Arten von Abstandselementen in meinem Inhalt habe, wie z.B.
1. Menüelemente
2. Absätze
3. Seitenmenüelemente
4. Seitenmenüblöcke
5. Listenelemente
6. Irgendetwas anderes
Sie können alle als .spacer klassifiziert werden, aber sie entsprechend ihrem Tagnamen zu stylen, ist viel einfacher und semantisch richtiger, als lange und schwer verständliche Klassennamen zuzuweisen wie – „.sideNavigation-MenuBlockSpacer“, während wir so etwas verwenden können – „#menuBlock li.spacer“.
Also – opfern Sie Semantik nicht für Leistung und umgekehrt :)
CSS ist nur ein Geschwindigkeitsproblem, mit dem wir alle in Zukunft konfrontiert sein werden, da ich höre, dass Google anfängt, die Ladezeit in seine Algorithmen einzubeziehen. Ich fand das Yslow-Add-on für Firebug (für Fire fox) sehr nützlich, um zu sehen, warum Websites unterdurchschnittlich sind. Zum Beispiel, Chis, sehe ich, dass Sie 10 ext. JavaScript-Anfragen stellen. Jede Sekunde zählt, wenn man gegen die Welt antritt…
Ist das wirklich *Rendering*-Leistung oder nur *Parsing*?
Das Rendering-Erlebnis hat viel mehr damit zu tun, wie Repaints und Reflows ausgelöst und gehandhabt werden, oder?
Hängt davon ab, wie Sie „Rendering“ definieren.
Ich würde Rendering als die Zeit betrachten, die das Programm (in diesem Fall der Browser) damit verbringt, die Eingabe zu empfangen, bis zu dem Zeitpunkt, an dem sie auf dem Bildschirm gezeichnet wird. Um das zu tun, muss es zuerst die Eingabe (die CSS-Anweisungen) parsen, um herauszufinden, was gezeichnet werden muss, und es dann zeichnen.
Das Parsen ist also Teil des Rendering-Prozesses. Und meine ungebildete Vermutung wäre, dass das Durchlaufen des DOM und das Herausfinden, welche Stile auf welche Elemente angewendet werden müssen, wahrscheinlich einer der zeitaufwändigsten Teile des Rendering-Prozesses ist.
Toller Artikel!
Hier gibt es einige großartige Punkte zur Optimierung Ihres CSS für Ladezeiten – sehr wichtig für große Projekte, und noch mehr, da Google die Seitenladezeiten in seine Algorithmen einbezieht!
Danke Chris!
Sehr interessant, ich hatte keine Ahnung, dass Selektoren von rechts nach links gelesen wurden. Ich kann mir certainly vorstellen, wie das die Effizienz stark verringern könnte. Ich verwende nie Tag-Qualifizierungen und schreibe im Allgemeinen kompakte Nachfahren-Selektoren, aber Sie haben einige Bereiche aufgezeigt, die verbessert werden können. Danke!
Chris, dieser Artikel enthält sicherlich Hinweise von extremer Wichtigkeit für jeden, der mit Webentwicklung oder sogar den Fans des Bereichs arbeitet. Ich stimme Ihnen jedoch in einigen Aussagen nicht zu, lassen Sie sie uns besprechen.
Niemals so etwas machen
ul#main-navigation { }Die meisten Projekte, die ich entwickle, verwenden Content-Management-Systeme wie Drupal und WordPress oder Joomla!, es ist üblich für diese Funktionen, dass aufgrund vordefinierter Template-Tags eine höhere Hierarchie als üblich für das Stylesheet angenommen werden muss.
Basierend auf Kommentaren zu meiner Erfahrung und einigen durchgeführten Tests habe ich festgestellt, dass
.class-list { };weniger effektiv war als die Verwendung von
ul.class-list { };Das Rendern von CSS wird oft effektiver, wenn wir die Klasse auf dieses Element beschränken. Ich habe versucht, einen in den Kommentaren gemachten Vorschlag zu implementieren, indem ich
/*ul*/.class-list { };verwende, aber dies unterscheidet sich nicht von der ersten Verwendung.
Ich verstehe auch, dass es viel effizienter ist, dass ich
div.main div.box ul li a { };verwende, als
.class-link { };<div class="box"><ul>
<li>
<a class="class-link" rel="nofollow"></a></li>
</ul>
</div>
</div>
zu verwenden. Wir sprechen nicht nur über Geschwindigkeit, sondern auch über Organisation und Standardisierung des Codes. Ich hätte gerne Ihre Meinung zu diesen Überlegungen, unter Berücksichtigung, wie Sie sagten, dass Computer heute viel schneller sind und mit den Jahren immer schneller werden.
Ich bezweifle, dass es auch nur annähernd performant wäre, jedem Element eine ID zu verpassen, da der Browser dann mehr Regeln abgleichen müsste und nicht so viel Zeug wiederverwenden könnte. Sicher, ID-Selektoren sind wahrscheinlich einzeln schneller als andere Arten, aber das bedeutet nicht, dass Ihre Seite schneller wird, wenn Sie sie missbrauchen.
Es ist wahrscheinlich, dass Sie mehr Erfolg haben werden, indem Sie redundante Regeln eliminieren, was ein doppelter Gewinn ist, da es auch Ihr CSS kürzer macht, sodass die Latenz beim Laden der Seite geringer ist.
Tatsächlich ist für die meisten Websites die Netzwerklatenz wichtiger als das Abgleichen von CSS-Selektoren.
Wahrscheinlich noch viel wichtiger ist das eigentliche Markup und die darauf angewendeten Stile, nicht die Selektoren. (d.h. wenn Sie den Browser bitten, 20 PNGs mit Alpha übereinander zu komponieren, wird er mit ziemlicher Sicherheit weitaus mehr Zeit mit dem Zeichnen von Bildern verbringen als mit dem Abgleichen von Selektoren)
Ich habe vor ein paar Wochen in einem anderen Beitrag darüber kommentiert: https://css-tricks.de/specifics-on-css-specificity/#comment-75911.
Halten Sie die Anzahl der HTML-Knoten niedrig, und Sie müssen sich wahrscheinlich nicht so sehr darum kümmern, wie lange es dauert, Ihr CSS zu rendern (es sei denn, es handelt sich um ein mobiles Gerät) – überprüfen Sie die Anzahl der Elemente auf Ihrer Seite mit:
document.getElementsByTagName('*').lengthversuchen Sie, sie unter 1000 zu halten.Interessante Lektüre, falls Sie mehr Details erfahren möchten: Performance Impact of CSS Selectors – echte Benchmarks und zeigt, wie viel Sie tatsächlich gewinnen, indem Sie Selektoren verbessern.
PS: Nicht alle JS CSS-Selektor-Engines verwenden den Rechts-nach-links-Ansatz..
Prost.
Ein netter Tipp für Seiten mit großen CSS-Dateien (mehr als 2000 Zeilen), aber auf normalen Seiten ist der Geschwindigkeitsgewinn nicht signifikant.
nett!~
Chinesische Übersetzung: http://www.vfresh.org/w3c/727
Gut gesagt
„Ich denke, die Lektion hier ist, Semantik oder Wartbarkeit nicht für effizientes CSS zu opfern.“
Es ist gut, fundierte Entscheidungen zu treffen, wenn man Effizienz mit Praktikabilität und sauberem Markup in Einklang bringt. Diese Tipps sind also hilfreich, um das Gleichgewicht zu verstehen. Danke!
Wenn Sie den effizienten und schönen CSS-Code schreiben, wird Ihr Kunde das mögen? oder haben Sie mehr Tipps vom Kunden? vielleicht nicht, aber Sie werden professionell aussehen, und jeder Browser wird Ihre Website schön rendern :)
Es ist schade, dass Nachfahren-Selektoren so teuer sind, sie sind sehr nützlich, um zu vermeiden, dass HTML mit sich wiederholenden Klassen und IDs überladen wird – schließlich haben wir bereits eine Baumbeziehung, die wir verwenden können.
Nett!!!!
Ich verwende CSS energisch seit etwa 2002/03, davor war ich ein Dinosaurier, der In-Tag-Eigenschaften und all das alte Zeug verwendete. Mein CSS ist nicht perfekt nach den Standards der Eliten, aber ich schreibe es sehr sauber und lesbar für mich selbst und lasse es durch einen „Minifier“ laufen, bevor ich es hochlade. Mein Problem war und wird wahrscheinlich immer Redundanz sein. Ich könnte mehr Dinge zusammenfassen, um es etwas zu verkürzen. Am Ende werde ich nicht wie viele Youngster sein, die von Image und Rep besessen sind und sich über 0,7kb stressen, aber ich versuche es.
Toller Beitrag, ich habe noch nie darüber nachgedacht
ul#main-navigation { } besser als #main-navigation { }, es macht es einfach, zu identifizieren, welches Element es ist, und ist lesbarer
Nicht sicher, ob das stimmt, da der Browser zuerst nach allen UL-Elementen im DOM suchen und dann nach der ID suchen wird, anstatt direkt im DOM nach der ID zu suchen. Korrigieren Sie mich, wenn ich falsch liege…
Ich werde versuchen, es bald zu testen und zu sehen, ob es überhaupt einen Unterschied macht.
Ich bin mir auch nicht sicher, ob richtig oder falsch.
aber nach einigen Tests/Recherchen denke ich, dass es einen anderen „CSS Specificity Value“ hat (https://css-tricks.de/specifics-on-css-specificity/)
wobei z.B. div.box einen GRÖSSEREN CSS Spezifitätswert hat als .box
wie
.box{
display:block;
background:#000;
height:200px; width:200px;
}
div.box{
background:#DDD;
}
Die Farbe wird schließlich überschrieben und wird zu #DDD;
aber wenn wir so schreiben
div.box{
display:block;
background:#000;
height:200px; width:200px;
}
.box{
background:#DDD;
}
ist die Farbe immer noch #000
Korrigieren Sie mich, wenn ich ein falsches Beispiel verwende oder wenn ich falsch liege
Eine weitere Möglichkeit, die Rendering-Geschwindigkeit zu verbessern, besteht darin, die Verwendung der @import-Anweisung zu vermeiden.
Sehen Sie sich diesen großartigen Artikel von Steve Souders zu diesem Thema an.
Hallo!
Danke für diese Informationen.
Aber können Sie Ihre Argumente mit einigen Leistungstests und Grafiken belegen?
Grüße
Chris
Große Leistungssprünge zeigen sich nur auf großen Websites, die viel CSS verwenden, und die Leistungsprobleme sparen Ihnen tatsächlich ein paar Millisekunden mehr.
Eine weitere Möglichkeit zur Steigerung der Leistung besteht darin, nur CSS bereitzustellen, das nur für die jeweilige Seite verwendet wird. Grundsätzlich müssen Sie separate Stylesheets für jede Seite/Vorlage erstellen. Dies erfordert natürlich etwas zusätzliches Backend und ist bei Projekten nicht immer machbar oder möglich.
Das sind wirklich gute Punkte, aber eines werde ich sicher nicht tun, ist, jedem CSS-Ziel eine Klasse oder ID hinzuzufügen, nur um die Rendering-Geschwindigkeit zu erhöhen – die HTML-Größe ist auch ein Faktor, der mir wichtig ist.
Ich werde diese Punkte von nun an berücksichtigen, wenn ich mein CSS schreibe – insbesondere um zu viele universelle Selektoren zu vermeiden – aber der Leistungsgewinn ist keine Refaktorierung des bereits bestehenden Codes wert.
Ich denke, eine weitere Möglichkeit zur Steigerung der Leistung besteht darin, nur CSS bereitzustellen, das nur für die jeweilige Seite verwendet wird. Grundsätzlich müssen Sie separate Stylesheets für jede Seite/Vorlage erstellen. Dies erfordert natürlich etwas zusätzliches Backend und ist bei Projekten nicht immer machbar oder möglich.
wirklich großartig.. vielen Dank..
Ich möchte noch etwas hinzufügen
Es ist besser, CSS-Eigenschaften alphabetisch anzuordnen, z.B.
.class{
widht:100px;
background:#000000;
}
anstatt damit zu gehen
.class{
background:#000000;
widht:100px;
}
für eine bessere Leistung….
Danke fürs Teilen..
Ich denke, das ist nur eine Marotte von Ihnen, wenn überhaupt.
Danke für diesen Artikel Chris! Ich habe ein paar Dinge gelernt, von denen ich bis jetzt nur vermutet hatte, dass sie problematisch sind, aber nie sicher wusste. Beispiel: Tag-Qualifizierung. Es ist interessant festzustellen, dass Eric Myer diese Praxis tatsächlich in seinem Buch Eric Myer on CSS gelehrt hat.
Zugegeben, das war vor 8 Jahren und die Entwicklungsansichten haben sich seitdem stark weiterentwickelt, aber ich erinnere mich, dass ich (selbst als Anfänger, da dies das erste CSS-Buch war, das ich je gekauft habe) dachte, dass es eine redundante Art des Codierens schien. Ich habe die Praxis nie übernommen, aber es würde mich nicht überraschen, wenn viele Entwickler immer noch CSS auf diese Weise schreiben, einfach weil die Anweisung von jemandem kam, der in der Branche so bekannt und respektiert ist.
Artikel wie dieser sind wichtig, weil sie uns daran erinnern, dass es gut ist, das WIE von „Best Practices“ ständig zu hinterfragen, ganz zu schweigen davon, WANN oder OB sie pro Projekt angewendet werden sollten. Gute Arbeit. :)
Überrascht, dass noch niemand dies erwähnt hat: Dies ist unglaublich relevant für mobile Websites. Mit den geringeren Netzwerk- und Verarbeitungsgeschwindigkeiten sind Leistungsverbesserungen viel spürbarer.
Was das Herumschlagen von IDs angeht: Wenn Ihre IDs selbstbeschreibend sind, müssen Sie keine Dinge wie ul#main-navigation tun. Der Weg dorthin ist, die ID so zu benennen, dass sie eher #ul-main-navigation ähnelt, obwohl es besser sein könnte. Das Gleiche gilt für Klassennamen und sogar Variablen in der Programmierung. Ich weiß nicht, warum die Leute das nicht tun. Wenn das Lesen der Variablen die Frage beantwortet „was enthält diese Variable?“, dann sollte es in Ordnung sein.
Idealerweise muss beim Lesen des CSS nicht auf das HTML verwiesen werden. Wenn das erreicht werden kann, ist die Lesbarkeit definitiv ziemlich gut.
Über die Geschwindigkeit der CSS-Auswahl wurde nicht viel Licht ins Dunkel gebracht. Während wir SunSpider für JS und die Sizzle.js RTL-Auswahl-Engine haben, habe ich mich gefragt, ob es einen CSS-Selektor-Geschwindigkeitstest gibt?
Obwohl der Artikel viel Sinn macht, bin ich ein wenig skeptisch in Bezug auf die Leistungseinbußen von Nachfahren-Tag-Selektoren, und darüber hinaus, ob Leistungsprobleme in der Komplexität der Selektoren selbst verwurzelt sind oder im Prozess der Anwendung von CSS-Stilen auf die zurückgegebene Menge von Elementen.
Gibt es Tests oder Statistiken, um die Punkte in diesem Artikel zu belegen?
Faszinierend, hatte ich keine Ahnung. Ich war mir sicher, dass es einige optimale Muster gibt, denen man folgen sollte, aber ich habe mir nie die Zeit genommen, mich einzugraben und es herauszufinden.
Etwas Neues gelernt, danke!
Sie vergessen etwas
Die Verwendung von Selektoren reduziert die Größe der CSS-Datei, wenn Sie es richtig machen – das heißt, ich kann 2 Zeilen CSS verwenden, um mehr abzudecken, als ich könnte, wenn ich überall eine eindeutige ID auf etwas angewendet hätte. Meine CSS-Datei ist ein paar hundert Zeilen kürzer, als sie wäre, wenn ich diesen alten Weg gegangen wäre.
Außerdem wirkt sich CSS kaum auf die Geschwindigkeit der Seite aus, wenn es komprimiert ist. Mit meiner überlegen kleinen CSS-Datei wird es mit Komprimierung eine aufgeblähte und unordentliche CSS-Datei im Vergleich übertreffen.
Glauben Sie mir nicht? Probieren Sie es selbst aus. Dieser Artikel ist nützlich für kleine Websites, aber sicherlich nicht für große Projekte.
Interessante Punkte, aber ich würde gerne ein paar echte Zahlen sehen, um ein Bild von den tatsächlichen Leistungseinbußen zu bekommen.
Nun, das gilt für Desktop-Computer, aber viele der derzeit verwendeten mobilen Geräte sind so langsam wie ein alter Pentium III, wenn es um das Rendern von Webseiten geht :( daher scheint der Artikel immer noch sehr relevant zu sein.
Bedeutet das, dass die Verwendung eines Framework-Systems tatsächlich langsam ist?
Da es sich nur um mehrere Klassen handelt, die aneinandergereiht sind, scheint es in Ordnung zu sein, aber immer noch nicht so schnell wie ID. Ist das richtig?
Das ist richtig, Charlie, aber im Allgemeinen ist das Problem, das Sie ansprechen, nicht eines der größten Übeltäter, wenn es darum geht, Ihre Seite zu verlangsamen. Weitere Informationen unter CSS Wizardry.
Hat jemand ein Tool zur Messung der Rendering-Leistung auf bestimmten Seiten gesehen? Wie Fiddler zur Messung der Servergeschwindigkeit, brauche ich ein Tool zur Analyse von Leistungseinbußen beim Rendering auf bestimmten Seiten.
Sehr interessantes Thema, ich habe mich in letzter Zeit viel mit diesen Fragen beschäftigt. Besonders nach einem Jahr der Verwendung von SASS und Verschachtelung und dem Ansehen der endlosen Nachfahren-Selektoren, die erstellt werden. Aus genau diesem Grund versuche ich jetzt, Kind-Selektoren zu verwenden.
Ich hatte eine kurze Frage.. die hier dargelegte Begründung impliziert, dass $(‘#object’).find(‘a’) effizienter sein sollte als $(‘#object a’), da wir das Rechts-nach-links-Prinzip von CSS „überschreiben“. Ist das richtig?