Ich hasse sie, es trotzt der Kaskadierung von CSS, und wenn Sie sie nicht mit Sorgfalt verwenden, geraten Sie in eine Schleife, in der Sie mehr hinzufügen !important
.
Aber ich möchte wissen, ob sie schlecht für die Leistung sind.
BEARBEITEN
Aus den (schnellen) Antworten kann ich schließen, dass dies keinen (signifikanten) Einfluss auf die Leistung hat. Aber es ist schön zu wissen, auch wenn es nur ein zusätzliches Argument ist, um andere zu entmutigen;).
EDIT 2
BoltClock wies darauf hin, dass bei 2 !important
Deklarationen laut Spezifikation die spezifischste ausgewählt wird.
css
performance
janw
quelle
quelle
!important
Regeln suchen .Antworten:
Es sollte eigentlich keinen Einfluss auf die Leistung haben. Wenn ich den CSS-Parser von Firefox bei
/source/layout/style/nsCSSDataBlock.cpp#572
sehe, denke ich, dass dies die relevante Routine ist, die das Überschreiben von CSS-Regeln behandelt.es scheint nur eine einfache Überprüfung auf "wichtig" zu sein.
Auch Kommentare bei
source/layout/style/nsCSSDataBlock.h#219
Von: http://taligarsiel.com/Projects/howbrowserswork1.htm#CSS_parsing
Jetzt können Sie leicht erkennen, dass der Parser beispielsweise mit dem oben beschriebenen Objektmodell die von der betroffenen Regel markieren kann
!important
leicht und ohne große Folgekosten . Leistungsabfall ist kein gutes Argument dagegen!important
.Die Wartbarkeit ist jedoch ein Hit (wie in anderen Antworten erwähnt), was möglicherweise Ihr einziges Argument gegen sie ist.
quelle
!important
speziell optimierten Regeln gibt ? Ich denke nicht, aber es ist schwer sicher zu sein; Das Layout- / Stilverzeichnis in Firefox umfasst 80.000 Codezeilen.Ich denke nicht, dass dies von
!important
Natur aus schlecht ist , wenn es darum geht, wie schnell der Browser mit Regeln übereinstimmt (er ist nicht Teil des Selektors, sondern nur Teil der Deklaration).Wie bereits erwähnt, verringert dies jedoch die Wartbarkeit Ihres Codes und führt daher wahrscheinlich dazu, dass er aufgrund zukünftiger Änderungen unnötig an Größe zunimmt. Die Verwendung von
!important
würde wahrscheinlich auch die Entwicklerleistung verringern.Wenn Sie wirklich wählerisch waren, können Sie auch sagen, dass
!important
Ihre CSS-Datei um 11 zusätzliche Bytes erweitert wird. Das ist nicht wirklich viel, aber ich denke, wenn Sie ein paar!important
s in Ihrem Stylesheet haben, könnte sich das summieren.Nur meine Gedanken, leider konnte ich keine Benchmarks finden, wie sich
!important
dies auf die Leistung auswirken könnte.quelle
!important
hat seinen Platz. Vertrau mir in diesem Fall. Es hat mich viele Male gerettet und ist oft als kurzfristige Lösung nützlicher, bevor eine längere und elegantere Methode für Ihr Problem gefunden werden kann.Wie die meisten Dinge wurde es jedoch missbraucht, aber es besteht kein Grund zur Sorge um die Leistung. Ich wette, ein kleines 1x1-GIF hat auf einer Webseite mehr Leistungseinbußen als! Wichtig.
Wenn Sie Ihre Seiten optimieren möchten, gibt es noch viele weitere wichtige Wege;);)
quelle
Was hier hinter den Kulissen passiert, ist, dass der Browser während der Verarbeitung Ihres CSS es liest, auf ein
!important
Attribut stößt und der Browser zurückkehrt, um die durch definierten Stile anzuwenden!important
. Dieser zusätzliche Prozess scheint ein kleiner zusätzlicher Schritt zu sein. Wenn Sie jedoch viele Anfragen bearbeiten, wird die Leistung beeinträchtigt. (Quelle)Das Denken eines Entwicklers bei der Verwendung von
!important
:!important
ja ... jetzt funktioniert es gut.Es ist jedoch kein guter Ansatz,
!important
nur weil wir das CSS nicht gut verwaltet haben. Es entstehen viele Designprobleme - die schlimmer sind als Leistungsprobleme -, aber es zwingt uns auch dazu, viele zusätzliche Codezeilen zu verwenden, da wir andere Eigenschaften überschreiben!important
und unser CSS mit nutzlosem Code überfüllt ist. Stattdessen sollten wir zuerst das CSS sehr gut verwalten und nicht zulassen, dass sich die Eigenschaften gegenseitig überschreiben.Wir können verwenden
!important
. Aber verwenden Sie es sparsam und nur, wenn es keinen anderen Ausweg gibt.quelle
Ich stimme Ihnen zu, dass Sie es nicht verwenden, da es unabhängig von der Leistung eine schlechte Praxis ist. Allein aus diesen Gründen würde ich es vermeiden,
!important
wo immer möglich zu verwenden.Aber zur Frage der Leistung: Nein, das sollte nicht auffallen. Es könnte eine gewisse Wirkung haben, aber es sollte so klein sein, dass Sie es niemals bemerken oder sich darüber Sorgen machen sollten .
Wenn es wichtig genug ist, um wahrgenommen zu werden, haben Sie wahrscheinlich größere Probleme in Ihrem Code als nur
!important
. Die einfache Verwendung eines normalen Syntaxelements der von Ihnen verwendeten Kernsprachen wird niemals zu einem Leistungsproblem.Lassen Sie mich Ihre Frage mit einer Antwort beantworten. Ein Winkel, den Sie wahrscheinlich nicht berücksichtigt haben: Welchen Browser meinen Sie?
Jeder Browser verfügt offensichtlich über eine eigene Rendering-Engine mit eigenen Optimierungen. Nun stellt sich die Frage: Was sind die Auswirkungen auf die Leistung in jedem Browser? Vielleicht
!important
in einem Browser schlecht, aber in einem anderen wirklich gut? Und vielleicht ist es in den nächsten Versionen umgekehrt?Ich denke, mein Punkt hier ist, dass wir als Webentwickler nicht über die Auswirkungen einzelner Syntaxkonstrukte der von uns verwendeten Sprachen auf die Leistung nachdenken sollten (oder darüber nachdenken müssen). Wir sollten diese Syntaxkonstrukte verwenden, weil sie der richtige Weg sind, um das zu erreichen, was wir wollen, und nicht aufgrund ihrer Leistung.
Leistungsfragen sollten in Verbindung mit der Verwendung von Profilern gestellt werden, um zu analysieren, wo sich die Quetschpunkte in Ihrem System befinden. Beheben Sie zuerst die Dinge, die Sie wirklich verlangsamen. Es ist fast sicher, dass Sie weitaus größere Probleme beheben müssen, bevor Sie sich auf die Ebene der einzelnen CSS-Konstrukte beschränken.
quelle
Die Leistung wird dadurch nicht merklich beeinträchtigt. Dies verringert jedoch die Wartbarkeit Ihres Codes und kann daher auf lange Sicht die Leistung beeinträchtigen.
quelle
Ich musste es benutzen
!important
ich es schon mehrmals verwenden musste, habe ich persönlich keinen nachweisbaren Leistungseinbruch bei der Verwendung festgestellt.Beachten Sie als Antwort die Antwort auf diese Stapelfrage aus einem Grund, den Sie möglicherweise verwenden möchten
!important
.Ich werde auch etwas erwähnen, das alle anderen nicht erwähnt haben.
!important
Dies ist die einzige Möglichkeit, Inline-CSS zu überschreiben, ohne eine Javascript-Funktion zu schreiben (was sich auf Ihre Leistung auswirkt, wenn auch nur ein wenig). Sie können also tatsächlich Zeit für die Leistung sparen , wenn Sie Inline-CSS überschreiben müssen.quelle
hmm ...! wichtig oder !! wichtig?
Lassen Sie uns Schritt für Schritt durchgehen:
Ich denke also, wichtig hat tatsächlich eine bessere Leistung, da es dem Parser helfen kann, viele Eigenschaften zu überspringen, die sonst nicht übersprungen werden.
und wie @ryan weiter unten erwähnt, die einzige Möglichkeit, Inline-CSS zu überschreiben und die Verwendung von Javascript zu vermeiden ... also eine andere Möglichkeit, unnötige Leistungseinbußen zu vermeiden
hmm ... stellt sich heraus, dass! wichtig wichtig ist
und auch,
Ich denke, die Verwendung von! Important kann Entwickler glücklich machen, und ich denke, das ist sehr wichtig : D.
quelle
!important
Deklarationen haben. Der Browser muss alle überprüfen. Also geht es wirklich zurück zu Schritt 1.Ich kann nicht vorhersehen, dass
!important
die Leistung beeinträchtigt wird, jedenfalls nicht von Natur aus. Wenn Ihr CSS jedoch durchsetzt!important
ist, bedeutet dies, dass Sie die Auswahl von Qualifizierern überschritten haben und zu spezifisch sind und Ihnen die Eltern oder Qualifizierer ausgehen, um die Spezifität zu erhöhen. Folglich wird haben Ihre CSS aufgebläht werden (was wird die Leistung beeinträchtigen) und schwierig zu warten.Wenn Sie effizientes CSS schreiben möchten, möchten Sie nur so spezifisch sein, wie Sie müssen, und modulares CSS schreiben . Es wird empfohlen, keine IDs (mit Hashes), Verkettungsselektoren oder qualifizierenden Selektoren zu verwenden.
#
In CSS vorangestellte IDs sind bösartig spezifisch, bis zu dem Punkt, an dem 255 Klassen eine ID nicht überschreiben (Geige von: @Faust ). IDs haben jedoch auch ein tieferes Routing-Problem. Sie müssen eindeutig sein. Dies bedeutet, dass Sie sie nicht für doppelte Stile wiederverwenden können, sodass Sie am Ende lineares CSS mit sich wiederholenden Stilen schreiben. Die Auswirkungen davon variieren von Projekt zu Projekt, je nach Umfang, aber die Wartbarkeit leidet immens und in Randfällen auch die Leistung.Wie können Sie Spezifität ohne
!important
Verkettung, Qualifizierung oder IDs hinzufügen (nämlich#
) ?HTML
CSS
JSFiddle
Okay, wie funktioniert das?
Das erste und das zweite Beispiel funktionieren gleich, das erste ist buchstäblich eine Klasse und das zweite ist der Attributselektor. Klassen- und Attributselektoren haben die gleiche Spezifität.
.eg1/2-bar
erbt seine Farbe nicht von.eg1/2-foo
weil es eine eigene Regel hat.Das dritte Beispiel sieht aus wie das Qualifizieren oder Verketten von Selektoren, ist es aber auch nicht. Verkettung ist, wenn Sie Selektoren Eltern, Vorfahren usw. voranstellen. Dies erhöht die Spezifität. Das Qualifying ist ähnlich, aber Sie definieren das Element, auf das der Selektor angewendet wird. Qualifikation:
ul.class
und Verkettung:ul .class
Ich bin nicht sicher, wie Sie diese Technik nennen würden, aber das Verhalten ist beabsichtigt und wird von W3C dokumentiert
Was passiert, wenn die Spezifität zwischen zwei Regeln identisch ist?
Wie @BoltClock hervorhob : Wenn es mehrere! Wichtige Deklarationen gibt, schreibt die Spezifikation vor, dass die spezifischste Vorrang haben sollte.
Im folgenden Beispiel haben beide
.foo
und.bar
die gleiche Spezifität, sodass das Verhalten auf die Kaskadierung von CSS zurückgreift, wobei die letzte in CSS deklarierte Regel Vorrang hat, d.foo
. H.HTML
CSS
JSFiddle
quelle