Ich habe kürzlich Here’s the thing about “unused CSS” tools geschrieben, in dem ich versucht habe, alle Herausforderungen aufzulisten, die jedes Tool bei der Suche nach tatsächlich „ungenutztem“ CSS haben würde. Die übergreifende Idee ist, dass CSS-Selektoren Elemente im DOM abgleichen und diese Elemente im DOM aus allen möglichen Quellen stammen: Ihren statischen Vorlagen, dynamischen Vorlagen basierend auf serverseitigem Zustand und natürlich JavaScript, das das DOM auf beliebige Weise manipulieren kann, einschließlich des Abrufens von Dingen aus APIs und Drittanbietern.
Bei all dem im Spiel, wie kann irgendein Tool uns ein wirklich genaues Bild von ungenutztem CSS liefern, bis zu dem Punkt, dass das Entfernen dieses CSS nicht genauso gefährlich ist wie das Belassen?
Also, ich sagte
Und doch glaube ich nicht, dass diese Tools nutzlos sind – sie sind einfach…Werkzeuge. Ihre Verwendung kann tatsächlich ein positiver Schritt zu besserem Code sein. Ihre Verwendung sagt OK, ich gebe es zu, ich habe ein wenig Angst vor unserem CSS. Sie könnten dieses Tool verwenden, um ein grobes Bild davon zu bekommen, was Ihr ungenutztes CSS sein könnte, und dies dann mit Ihrem eigenen Wissen über Ihre CSS-Codebasis kombinieren, um fundiertere Entscheidungen zu treffen.
Dabei bleibe ich, und es lohnt sich, einige erfolgreiche Anwendungsfälle hervorzuheben.
Sarah Dayan hat gerade How I dropped 250KB of dead CSS weight with PurgeCSS geschrieben. Sie verwendete Tailwind CSS, eine atomare CSS-Bibliothek, mit der viele Leute Erfolg hatten.
In meinem Fall habe ich nicht nur die gesamte Tailwind CSS-Bibliothek geladen, sondern auch mehrere Varianten zu einigen Modulen hinzugefügt. Das führte dazu, dass die endgültige minimierte CSS-Datei 259 KB wog (vor GZip).
Es ist ein Zehntel davon, wenn es gezippt ist, aber immer noch, das ist viel CSS. Tailwind empfiehlt die Verwendung von PurgeCSS, und das hat Sarah getan. PurgeCSS kümmert sich nicht um all die Dinge, die ich erwähnt habe, wie Zustandsvariationen und JavaScript und dergleichen, aber es betrachtet alle statischen Dateien, die Sie möchten – sowohl Inhalte als auch CSS – und führt eine Analyse davon durch. Noch besser, Sarah wusste, dass sie einige Drittanbieter-Sachen hatte, und hat diese Situation speziell behandelt
PurgeCSS kann nicht erkennen, dass ich Selektoren wie
.ais-Highlightbehalten muss, da die Komponenten, die ihn verwenden, erst zur Laufzeit im DOM angezeigt werden.
Also hat sie einen Teil dieses CSS abgetrennt und die Konfiguration aktualisiert. Dann…
Mit dieser neuen Konfiguration ist meine endgültige CSS-Datei von 259 KB auf… 9 KB gesunken!
Ich liebe es. Das Tool verwenden, sich über das Geschehen auf Ihrer Website im Klaren sein und endgültige Entscheidungen für einen kombinierten Gewinn treffen.
Sarah erwähnt auch, wie dieses Konzept von ungenutztem CSS im Geiste mit dem Konzept von ungenutztem JavaScript verwandt ist. In JavaScript wird dies als Tree Shaking bezeichnet, und wie Jeremy Wagner es ausdrückt
Tree Shaking ist eine Form der Dead-Code-Eliminierung.
Ich vertraue den Tools für Tree Shaking viel impliziter. Dies sind Tools, die in JavaScript geschrieben sind, um JavaScript zu analysieren und JavaScript zu entdecken, das nicht verwendet wird. Es scheint, dass die Schnittmenge der Technologie nicht so groß ist, wenn wir über Tree Shaking sprechen. Dennoch könnte es Dinge wie konfigurierte Drittanbieter geben, die öffentliche Funktionen auf Ihrer Website aufrufen, oder Event-Handler direkt auf HTML-Elementen. Diese Dinge erscheinen mir heutzutage etwas seltener, aber das ist nur meine eigene Voreingenommenheit.
Also twittern wir diesen Artikel und die erste Antwort ist… benutze einfach das!
https://uncss-online.com/
Das ist sehr cool, dass das existiert und so, aber es deckt wirklich nicht das Geringste der Anliegen ab, über die ich sprechen möchte.
Und wie ich in meinem ursprünglichen Artikel sagte
Diese Woche habe ich gesehen, wie dieses hier verrückt geteilt wurde
https://unused-css.com/
Holen Sie sich den Premium-Plan für nur 756,00 $.
Ich liege wahrscheinlich falsch, aber 250 KB von 259 KB zu streichen, ich kann nicht aufhören zu denken, dass dieses CSS-Framework es von vornherein nicht wert war, verwendet zu werden.
Obwohl ich kein großer Fan von Tailwind bin – ich mag die Ergonomie von Atomic-Style-CSS persönlich einfach nicht – finde ich es in diesem Zusammenhang verteidigungswürdig.
Tailwind ist nicht *wirklich* dafür konzipiert, in seiner Gesamtheit verwendet zu werden. Es ist eher wie eine Bibliothek, die Klassen generiert, aus denen Sie selektiv auswählen und den Rest wegtreyshaben/konfigurieren können. In Wirklichkeit könnten Sie es so konfigurieren, dass es 2 KB Klassen generiert oder irgendwo weit über den im Artikel zitierten 250 KB liegt.
Es ist eigentlich ein ziemlich cooles Konzept für eine Bibliothek und passt sehr gut in diese Unterhaltung über ungenutztes CSS.
Ich denke, Tools wie diese sind in einigen Fällen praktisch, aber sie lösen das Problem immer noch nicht von vornherein. Ich habe das Gefühl, dass Entwickler von Tag zu Tag fauler werden, weil es so viele Tools gibt, die das von ihnen geschaffene Problem "lösen" werden.
Vor ein paar Tagen habe ich einen Artikel über das Problem mit CSS-in-JS gelesen, und dass sie Probleme mit dem Caching hatten, also war die Lösung, ein Gulp-Tool zu haben, das alle CSS-Dateien in den JS-Dateien sammelt und extrahiert und eine CSS-Datei für besseres Caching erstellt. Wie WTF? und meine persönliche Meinung ist, dass Tools wie diese in die gleiche Kategorie fallen. Entwickler sind faul / verwenden falsche Arbeitsmethoden.
Es stimmt, dass PurgeCSS nicht alles löst. Obwohl die Genauigkeit hoch ist, ist es derzeit kein Tool, dessen Verwendung ich ohne Kenntnis dessen, was in Ihren Projekten passiert, empfehlen würde.
PurgeCSS ist immer noch ein junges Projekt und in Arbeit. Es wurde mit dem Ziel 100%iger Genauigkeit entwickelt und funktioniert auch mit von JavaScript generierten Klassen.
Einst habe ich UnCSS (ähnlich wie PurgeCSS) mit BackstopJS (Visuelle Regressionstests) verwendet.
Ich habe zuerst Backstop eingerichtet und einen Test aller meiner Vorlagen durchgeführt. Dann habe ich UnCSS ausgeführt und einen weiteren BackstopJS-Test. BackstopJS benachrichtigte mich, wenn sich etwas geändert hatte. Da die einzige Änderung die Hinzufügung von UnCSS zur Pipeline war, wusste ich, wenn etwas fehlschlug, dass ich mich anpassen konnte, um diese unerwünschten Änderungen zu berücksichtigen.
Ich konnte ungenutztes CSS mit einem gewissen Maß an Vertrauen entfernen. Die beiden Tools ergänzten sich gut.