Taking Control of the CSS/JS that WordPress Plugins Load

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Vor ein paar Tagen wurde auf ShopTalk eine Frage gestellt, die uns zu einem kurzen Exkurs über WordPress-Plugins, die von ihnen geladenen Ressourcen und wie das in einer perfekten Welt aussehen würde, führte. Ich habe mir dann einige Gedanken dazu aufgeschrieben und Feedback erhalten. Ich glaube, es kam zu einem einigermaßen zufriedenstellenden Ergebnis, also dachte ich, ich schreibe es auf.

So funktionieren einige Plugins jetzt

Nehmen wir ein reales Beispiel. Das WP-Polls Plugin. Ich denke, es ist ein schönes Plugin. Macht gute Arbeit mit Umfragen. Ich benutze es hier auf CSS-Tricks.

Um diese Umfragen auf Ihrer Website zu platzieren, benötigt es etwas JavaScript, um die Funktionalität zu verwalten (d. h. Abstimmen und Anzeigen von Ergebnissen ohne Seitenaktualisierung) und CSS, um das Umfrage-Widget zu gestalten (die Ergebnisbalken und Ähnliches).

Die Art und Weise, wie es dieses CSS hinzufügt, ist durch das Einfügen eines Stylesheets über den wp_head() Hook, wobei dies in den <head> eingefügt wird.

<link rel='stylesheet' id='wp-polls-css'  href='http://example.com/wp-content/plugins/wp-polls/polls-css.css?ver=2.67' type='text/css' media='all' />

Die Art und Weise, wie es dieses JavaScript hinzufügt, ist durch das Einfügen eines Skripts über den wp_footer() Hook, wobei dies am Ende des Dokuments eingefügt wird.

<script type='text/javascript' src='//example.com/wp-content/plugins/wp-polls/polls-js.js?ver=2.67'></script>

Das ergibt Sinn. Das ist, was sie tun müssen, damit dieses Plugin funktioniert. Plugin-Autoren müssen sicherstellen, dass ihre Plugins einfach zu bedienen sind und *funktionieren*.

Als performancebewusster Entwickler möchte ich Skripte und Styles zusammenfügen.

Jetzt haben wir diese beiden einzelzweckorientierten Ressourcen, die auf der Seite geladen werden. Wenn man sich die Web-Performance ansieht und wie man Websites schneller macht, ist einer der ersten Ratschläge, die man hört, Ressourcen zu verbinden. Sehr gute Faustregel: Je weniger Ressourcen eine Website laden muss, desto schneller wird sie sein.

Das Zusammenfügen von Ressourcen ist keine obskure Sache, um die sich nur die elitästen Websites kümmern müssen. Es ist ein Problem für jede Website. Leute haben dieses Problem auf tausend Arten gelöst. CSS-Sprites befassten sich mit dem Zusammenfügen von Bildressourcen. Icon-Schriften und SVG-Sprites lösen dasselbe Problem. CSS-Präprozessoren helfen Ihnen, Ihre Stylesheets zusammenzufügen. Die Rails Asset Pipeline hilft Ihnen, Ressourcen zusammenzufügen. Es gibt Grunt- und Gulp-Plugins im Überfluss, die dafür entwickelt wurden.

Aber wir sind hier in WordPress-Land, also gibt es Lösungen dafür.

Sollen Plugins selbst helfen?

Der erste Gedanke, der mir kam, war, dass Plugins uns erlauben sollten, alles zu deregistrieren, was sie aus der UI heraus registrieren, die sie zum Plugin selbst hinzufügen. Man könnte sogar so weit gehen, die Ressourcen, die sie geladen hätten, in einem Textfeld zur einfachen Kopie und Einfügung in Ihr eigenes System bereitzustellen.

Ich denke jetzt, dass das ein wenig fehlgeleitet war. Es würde eine große Bewegung in der WordPress-Plugin-Welt erfordern, um dies in Gang zu bringen. Selbst wenn das passieren würde, wäre das viel duplizierte Arbeit, und dieses Problem kann effizienter gelöst werden.

Lösung Nr. 1: Ein Plugin verwenden

Das Plugin MinQueue bietet eine Lösung, die mir gefällt. Es tut nichts automatisch, sondern erlaubt Ihnen zu konfigurieren, welche Ressourcen Sie zusammenfügen möchten und in welcher Reihenfolge.

Mit dem aktiven Plugin sehen Sie in der Admin-Leiste im Frontend einen kleinen Hilfslink, auf den Sie klicken können.

In unserer Demo wissen wir, dass wir das CSS unseres Themes und das WP-Polls CSS zusammenfügen wollen. Also nehme ich diese Namen aus der Hilfe und füge sie in eine neue "Warteschlange" in den Plugin-Einstellungen ein.

Jetzt werden keines dieser CSS-Dateien mehr einzeln geladen. MinQueue erstellt eine kombinierte (und zwischengespeicherte) Version und liefert diese.

<link rel='stylesheet' id='minqueue-117c22aa-ebc80003-css'  href='http://example.com/wp-content/uploads/minqueue-cache/minqueue-117c22aa-ebc80003.css' type='text/css' media='all' />

Sie können mehrere "Warteschlangen" erstellen, was Ihnen eine gute Kontrolle ermöglicht. Zum Beispiel lädt ein bestimmter Bereich Ihrer Website andere Ressourcen, diese könnten separat kombiniert werden, wenn Sie möchten, es ist nicht erforderlich, sie mit der Hauptgruppe zu kombinieren.

Beachten Sie, dass Sie dafür das Stylesheet Ihres Themes registrieren müssen, aber das ist ziemlich einfach.

Beachten Sie auch, dass das beliebte W3 Total Cache ebenfalls die Zusammenführung übernimmt, aber ich finde es etwas verwirrender. Sie fügen Stylesheets über URLs hinzu, und es scheint etwas grundlegender zu sein und leichter zu brechen.

Lösung Nr. 2: Assets manuell deregistrieren und selbst zusammenfügen

Plugins, die Ressourcen hinzufügen, tun dies über `wp_enqueue_script` und `wp_enqueue_style`. Sie können den Plugin-Code durchsuchen und finden, wo sie dies tun, um zu sehen, welchen Namen sie dabei angewendet haben. Dann deregistrieren Sie diese in der `functions.php`-Datei Ihres eigenen Themes (oder einem benutzerdefinierten Funktionalitäts-Plugin).

Justin Tadlock hat einen Beitrag dazu, den Sie lesen können. Ein einfaches Beispiel für das Deregistrieren eines Stylesheets.

add_action('wp_print_styles', 'my_deregister_styles', 100);

function my_deregister_styles() {
  wp_deregister_style('name-of-style');
}

Jetzt liegt es an Ihnen, diese Ressource zu finden und sie in das CSS einzufügen, das Sie immer noch auf der Seite laden. Vielleicht verwenden Sie einen CSS-Präprozessor und können ihn importieren. Vielleicht verwenden Sie einen Task-Runner wie Grunt, der ihn zur Liste der zu holenden und zusammenzufügenden Dateien hinzufügen kann. Oder Sie gehen komplett manuell vor und kopieren und fügen den Inhalt einfach in Ihr eigenes Stylesheet ein (beachten Sie jedoch, dass Sie bei dieser Vorgehensweise keine Updates erhalten, wenn das Plugin aktualisiert wird).

Lösung Nr. 3: Ein Plugin zum Deregistrieren von Assets und zum selbständigen Zusammenfügen verwenden

Obwohl ich in der Lage bin, den Code eines Plugins zu durchsuchen, um Instanzen des Registrierens von Ressourcen zu finden, erscheint mir das nicht als eine fantastische Vorgehensweise. Ich würde es lieber programmatisch machen, um es einfacher zu gestalten und menschliche Fehler zu reduzieren.

Während der früheren Diskussionen zu diesem Thema hat Nate Wright von Theme of the Crop ein brandneues Plugin dafür namens Asset Queue Manager entwickelt. Es hat eine Benutzeroberfläche (von der Frontend-Seite), die Sie verwenden können, um Assets einfach zu deregistrieren.

Von der Frontend-Seite der Website aus klicken Sie auf einen Link in der Admin-Leiste, um ein Dropdown mit allen registrierten Assets auf dieser Seite anzuzeigen.

Es gibt eine Schaltfläche zum Deregistrieren dieses Assets. Das Plugin behält dieses Asset deregistriert, bis Sie etwas anderes sagen. Jetzt liegt es wieder an Ihnen, diese Ressource zu finden und sie in Ihre Stylesheets einzufügen, wie Sie möchten. Es gibt eine weitere Schaltfläche, die direkt zur Ressource verlinkt und sie super einfach zu finden macht. Ziemlich cool!

Fazit

Es gibt viele Möglichkeiten, die Kontrolle über das CSS und JavaScript zu erlangen, das WordPress-Plugins laden können. Sie können und sollten dies tun, mit zunehmender Dringlichkeit für jede nicht zusammengefügte Ressource.

Wie viele Ressourcendateien von jedem Typ sind in Ordnung zu laden? Eins, Zwei oder Drei.