Wenn es um die Leistung von WordPress geht, haben wir eine Menge über Plugins zu sagen. Jedes Plugin fügt PHP-Code hinzu, der ausgeführt werden muss, normalerweise Skripte und Stile enthält und sogar zusätzliche Abfragen gegen die Datenbank ausführen kann. Das bedeutet, dass unnötige Plugins die Geschwindigkeit der Seite beeinträchtigen und sich negativ auf die User Experience und dein Page Ranking auswirken können.
Betrachten wir als Beispiel ein Plugin, das benutzerdefinierte Formulare auf Titelseiten erstellt und anzeigt, wie z.B. Contact Form 7. Typischerweise benötigt man nur ein Formular auf einer einzigen Seite, aber im Idealfall kann man ein Formular auf jeder Seite mit dem Shortcode des Plugins einbetten. Aus diesem Grund lädt das Contact Form 7 Skripte und Stile auf jeder Seite deiner Website.
Aber willst du wirklich den Plugin-Code ausführen und Scripts und Styles auf jeder Seite deiner WordPress Website einbinden?
In diesem Beitrag zeige ich dir, wie du das Laden von unnötigen Plugins auf bestimmten Beiträgen/Seiten verhindern kannst, so dass du zusätzliche Plugins installieren kannst (natürlich nicht verrückt werden) und deine WordPress Website trotzdem schnell laden kannst. Um diese Aufgabe zu erfüllen, werden wir die WordPress-Plugins auf bestimmten Beiträgen und Seiten programmatisch deaktivieren. Dies ist ein vierstufiger Prozess:
- Wähle die populärsten Plugins, die deinen Bedürfnissen entsprechen, und vergleiche ihre Funktionen und Auswirkungen auf die Seitengeschwindigkeit.
- Programmgesteuerte Auflistung und Filterung der Plugins vor dem Laden der Seite.
- Filter und deaktiviere programmgesteuert überflüssige Plugins mit einem mu-Plugin.
- Filter und deaktiviere überflüssige Plugins mit einem Plugin.
- Verfolge die Leistung der Seite.
Tauchen wir tief ein.
Drei allgemeine Regeln, die bei der Auswahl eines Plugins zu beachten sind
Die folgenden allgemeinen Regeln können bei der Auswahl eines Plugins hilfreich sein:
- Installiere nur gut programmierte Plugins von vertrauenswürdigen Entwicklern: Berücksichtige aktive Installationen, Benutzerbewertung, Kundensupport, Aktualisierungshäufigkeit und alle nützlichen Informationen aus der WordPress-Community.
- Bevorzuge skalierbare Plugins: Vergleiche ähnliche Plugins in Bezug auf die Leistung und nutze Browser-Development-Tools und/oder Online-Dienste wie Google Pagespeed Insights, Pingdom und GTmetrix, um die Auswirkungen der einzelnen Plugins auf die Seitenladezeit zu bewerten.
- Installiere keine unnötigen Plugins: es sollte offensichtlich sein, aber es ist erwähnenswert, dass du niemals ein Plugin installieren solltest, das du aus Sicherheits- und Performance-Gründen nicht wirklich brauchst. Stelle außerdem sicher, dass du deine Plugins von Zeit zu Zeit überprüfst und die nicht benötigten und nicht mehr verwendeten deinstallierst.
Ein Praxisbeispiel
Contact Form 7 ist ein großartiges Plugin, das Formulare in WordPress erstellt und anzeigt. Es ist ein perfektes Beispiel für unsere Zwecke, da es die folgenden Dateien auf jeder Seite beinhaltet, auch wenn die Seite kein Formular enthält:
- style.css
- scripts.js
Ein Plugin kann deine Website verlangsamen, aber wir können WordPress zwingen, Plugins je nach Anfrage-URL selektiv zu deaktivieren. Wenn du ein Entwickler bist, lies über den nächsten Abschnitt, wo wir lernen, wie man Plugins programmatisch verwaltet und ein mu-Plugin erstellt, das unnötige Plugins filtert. Wenn du kein Entwickler bist, kannst du in den Abschnitt über Plugins, die das Filtern und Organisieren von Plugins ermöglichen, gehen.
Wie man eine Liste aller aktiven Plugins programmgesteuert erhält
Als erstes kannst du eine Liste aller aktiven Plugins auf deiner WordPress Webseite mit einem einfachen Schnipsel PHP-Code erhalten. Du kannst den folgenden Code entweder in einem eigenen Plugin oder im Editor eines kostenlosen WordPress-Plugins wie Code Snippets hinzufügen. Wenn du dich für dein eigenes Plugin entscheiden würdest, vergiss nur nicht, den Plugin-Header wie unten gezeigt hinzuzufügen.
Jedes aktive Plugin wird in der Tabelle wp_options
gespeichert, wobei options_name
active_plugins
ist. So können wir die Liste dieser Plugins mit einem einfachen get_option
-Aufruf extrahieren. Hier ist der Code:
<?php
/**
* @package active-plugins
* @version 1.0
*
* Plugin Name: Active Plugins
* Plugin URI: http://wordpress.org/extend/plugins/#
* Description: This is a development plugin
* Author: Your Name
* Version: 1.0
* Author URI: https://example.com/
*/
add_shortcode( 'activeplugins', function(){
$active_plugins = get_option( 'active_plugins' );
$plugins = "";
if( count( $active_plugins ) > 0 ){
$plugins = "<ul>";
foreach ( $active_plugins as $plugin ) {
$plugins .= "<li>" . $plugin . "</li>";
}
$plugins .= "</ul>";
}
return $plugins;
});
Ändere die Plugin-Details, speichere dann die Datei active-plugins.php
und lade sie in deinen /wp-content/plugins/
Ordner hoch. Erstelle einen neuen Blog-Eintrag und füge den Shortcode [activeplugins]
ein. Es sollte nun eine Liste aller aktiven Plugins angezeigt werden.
With that being done, we can go a step further and add or remove plugins programmatically by taking advantage of the option_active_plugins
filter. This filter belongs to the option_$option_name group of filters, which allow to filter any option after it’s been retrieved from the database. Since all active plugins are stored in wp_options
table where option_value
is active_plugins
, the option_active_plugins
filter provides a way to programmatically activate or deactivate plugins.
Wenn das getan ist, können wir einen Schritt weiter gehen und Plugins programmgesteuert hinzufügen oder entfernen, indem wir den option_active_plugins
Filter ausnutzen. Dieser Filter gehört zur Gruppe der Filter option_$option_name, die es erlauben, jede Option zu filtern, nachdem sie aus der Datenbank geholt wurde. Da alle aktiven Plugins in der Tabelle wp_options
gespeichert sind, in der option_value
active_plugins
ist, bietet der Filter option_active_plugins
einen Weg, um Plugins programmgesteuert zu aktivieren oder zu deaktivieren.
Wir können also ein Plugin programmgesteuert aktivieren. Nehmen wir als Beispiel an, du möchtest das ACF-Plugin aktivieren. Hier ist der Code:
add_filter( 'option_active_plugins', function( $plugins ){
$myplugin = "advanced-custom-fields/acf.php";
if( !in_array( $myplugin, $plugins ) ){
$plugins[] = $myplugin;
}
return $plugins;
} );
In diesem Beispiel gehen wir davon aus, dass das Plugin installiert und noch nicht aktiviert wurde.
Der obige Code fügt das Plugin einfach in die Liste der aktiven Plugins auf jeder Seite unserer Website ein. Nicht sehr nützlich, aber du verstehst den Punkt.
Außerdem sollte das Plugin vor jedem anderen Plugin geladen werden, sonst könnte unser Code nicht wie erwartet funktionieren. Um unsere Plugin-Ladung zu priorisieren, müssen wir unser Skript in einem Must-Use-Plugin hinzufügen.
Wie man ein Must-use-Plugin zur programmatischen Deaktivierung von Plugins erstellt
Wir werden ein Must Use Plugin bauen, welches ein Plugin ist, das in einem bestimmten /wp-content
Unterordner liegt und vor jedem regulären Plugin läuft.
Leider ist es uns in dieser Situation nicht erlaubt, bedingte Tags zu verwenden, da bedingte Abfrage-Tags nicht funktionieren, bevor die Abfrage ausgeführt wird. Davor geben sie immer false zurück. Wir müssen also unsere Bedingungen anderweitig überprüfen, z.B. durch Parsen der Anfrage-URI und Überprüfung des entsprechenden URL-Pfades.
Füge den folgenden Code in die Datei active-plugins.php
ein und verschiebe ihn dann nach /wp-content/mu-plugins
:
$request_uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
$is_admin = strpos( $request_uri, '/wp-admin/' );
if( false === $is_admin ){
add_filter( 'option_active_plugins', function( $plugins ){
global $request_uri;
$is_contact_page = strpos( $request_uri, '/contact/' );
$myplugin = "contact-form-7/wp-contact-form-7.php";
$k = array_search( $myplugin, $plugins );
if( false !== $k && false === $is_contact_page ){
unset( $plugins[$k] );
}
return $plugins;
} );
}
Tauchen wir in diesen Code ein:
- parse_url gibt den Pfad der angeforderten URL zurück.
- strpos findet die Position des ersten Vorkommens von ‚
/wp-admin/
‚ und gibt false zurück, wenn der String nicht gefunden wird. Die Variable$is_admin
speichert den zurückgegebenen Wert. - Die Bedingung verhindert, dass der Filter im Admin-Panel ausgeführt wird, so dass wir sicher auf die Plugin-Einstellungsseiten zugreifen können. Wenn die Anfrage-URI nicht ‚
/wp-admin/
‚ enthält, rufen wir denoption_active_plugins
Filter auf. - Schließlich, wenn das aktuelle Plugin nicht im Array der aktiven Plugins ist und die URI der aktuellen Seite nicht
/contact/
enthält, entfernen wir das Plugin aus $plugins.
Speichere nun dein Plugin und lade es in deinen /wp-content/mu-plugins/
Ordner hoch. Leere den Cache und füge den Shortcode [activeplugins] auf mehreren Seiten hinzu. Er sollte in der Liste nur auf der Seite /contact/
angezeigt werden.
Wir können dann ein Array von Plugins auf einmal mit nur ein wenig zusätzlichem PHP aufheben.
$request_uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
$is_admin = strpos( $request_uri, '/wp-admin/' );
if( false === $is_admin ){
add_filter( 'option_active_plugins', function( $plugins ){
global $request_uri;
$is_contact_page = strpos( $request_uri, '/contact/' );
$myplugins = array(
"contact-form-7/wp-contact-form-7.php",
"code-snippets/code-snippets.php",
"query-monitor/query-monitor.php",
"autoptimize/autoptimize.php"
);
if( false === $is_contact_page ){
$plugins = array_diff( $plugins, $myplugins );
}
return $plugins;
} );
}
In diesem Beispiel haben wir zuerst ein Array von Plugins definiert, die entfernt werden sollen, dann entfernen wir sie mit array_diff. Diese Funktion „vergleicht array1 mit einem oder mehreren anderen Arrays und gibt die Werte in array1 zurück, die in keinem der anderen Arrays vorhanden sind“.
Du kannst den vollständigen Code dieses Plugins von Gist herunterladen.
Nun kannst du das Plugin in den mu-plugins Ordner hochladen und jede Seite deiner Webseite inspizieren. Das mu-Plugin kann stark angepasst werden, indem mehr Bedingungen hinzugefügt und mehr URIs überprüft werden, aber jede Bedingung muss manuell in den Code eingefügt werden, und auf lange Sicht könnte dieses einfache mu-Plugin schwierig und mühsam zu warten sein.
Aus diesem Grund solltest du die folgenden Plugins ausprobieren.
Plugins die Plugins filtern
Als Alternative können wir uns eine Reihe von guten Plugins ansehen, die es uns erlauben, Filter hinzuzufügen, die über das WordPress-Administrationspanel verwaltet werden können.
Plugin Load Filter
Plugin Load Filter ist eine kostenlose Option für WordPress-Benutzer, die Plugins unter verschiedenen Bedingungen filtern müssen.
Derzeit unterstützt es die folgenden Funktionen:
- Post-Formate
- Benutzerdefinierte Posttypen
- Jetpack-Module
- WP Inhaltskarte einbetten
- URL-Filter für Experten (REST API / Heartbeat / AJAX / AMP / etc)
Sobald ein Filter aktiviert wurde, kann der Admin-Benutzer angeben, wo auf der Website er angewendet werden soll, wie im Bild unten gezeigt.
Plugin Organizer
Der Plugin Organizer ist ein beliebtes Plugin mit über 10.000 aktiven Installationen und einer beeindruckenden Bewertung von 5 von 5 Sternen. Es ist ein umfassenderes Plugin, das den Site-Admins die Möglichkeit gibt, diese zu installieren:
- Selektive Deaktivierung von Plugins nach Posttyp und Anfrage-URL
- Selektive Deaktivierung von Plugins nach Benutzerrollen
- Gruppen von Plugins erstellen
- Ändere die Ladefolge des Plugins
- Weitere Merkmale
Die Seite mit den Optionen für globale Plugins bietet eine Drag&Drop-Möglichkeit, die es dem Admin-Benutzer erlaubt, Plugins global zu deaktivieren, wodurch verhindert wird, dass WordPress ein oder mehrere Plugins irgendwo auf der Website ausführen kann, es sei denn, es ist für einzelne Beiträge oder Seiten anders angegeben. Das gleiche Feature ist für die Suchseite und die Beitragsarten verfügbar.
Das Plugin fügt eine Metabox im Post-Editing-Screen hinzu, so dass der Admin die globalen und Posttyp-Einstellungen überschreiben kann. Dieses Feature kann auch für Posttypen aktiviert werden, indem man den entsprechenden Punkt im Bildschirm Allgemeine Einstellungen markiert. Ein großartiges Feature ist die Plugin Organizer Debug Message, die dem Site-Administrator nützliche Informationen über Plugins, die jede Site-Seite betreffen, zur Verfügung stellt.
Weitere Informationen findet man in deren Dokumentation.
Perfmatters Plugin
Ein teilweise anderer Ansatz kommt vom Perfmatters-Plugin. Es ist eine Premium-Alternative, die es dem Site-Administrator erlaubt, Theme- und Plugin-Assets selektiv zu laden, je nach URL oder benutzerdefiniertem Posttyp. Es ist ein großartiges Werkzeug für die Optimierung von Plugins und Themes. Tatsächlich wurde es von einem Teammitglied von Kinsta entwickelt!
Das Plugin hat eine Funktion namens Script Manager, bei der alles nach dem Plugin- oder Theme-Namen gruppiert wird. Dadurch ist es sehr einfach, ein ganzes Plugin auf einmal oder einzelne CSS– und JavaScript-Dateien innerhalb des Plugins zu deaktivieren.
Du kannst sogar Skripte mit regex deaktivieren. Dies ist besonders hilfreich für Seiten, die eine komplexere URL-Struktur haben oder dynamisch generierte Seiten.
Dies ist sehr mächtig und kann die Geschwindigkeit auf deinen WordPress Seiten (insbesondere deiner Homepage) drastisch erhöhen. Ein paar Beispiele, wofür dies genutzt werden kann:
- Social-Media-Sharing-Plugins sollten nur auf deine Beiträge geladen werden. Du kannst es einfach überall deaktivieren und nur auf Posttypen oder sogar auf benutzerdefinierte Posttypen laden.
- Das beliebte Contact Form 7 Plugin lädt sich auf jeder Seite und jedem Beitrag selbst. Du kannst es einfach überall mit einem Klick deaktivieren und nur auf deiner Kontaktseite aktivieren.
- Wenn du auf WordPress 5.0 upgegradet hast, aber nicht den Gutenberg-Block-Editor benutzt, vielleicht benutzt du immer noch den klassischen Editor, es gibt zwei zusätzliche Front-End-Skripte, die site-weit hinzugefügt werden und die du deaktivieren kannst:
/wp-includes/css/dist/block-library/style.min.css
und/wp-includes/css/dist/block-library/theme.min.css
Du kannst aus diesem Bericht über Perfmatters sehen, es hat ihre gesamten Ladezeiten um 20,2% reduziert. Allein auf ihrer Homepage konnten sie die Anzahl der HTTP-Anfragen von 46 auf 30 reduzieren! Auch die Seitengröße schrumpfte von 506,3 KB auf 451,6 KB.
Saved 25% (and 500KB) off total page size using @_perfmatters – this is AFTER extensive optimization using Plugin Organizer. I was *shocked* at how much I was able to save by fine tuning js/css that is downloaded per page.
— Vanessa Harris 🐾 (@technologypoet) March 14, 2019
Wie man die Leistung verfolgt: Die Dev-Tools des Browsers
Ein grundlegender Schritt auf dem Weg zur Leistungsoptimierung ist die Messung der Ladezeit. Wir verfügen über eine Reihe von Plugins und Online-Tools, mit denen wir die Performance der Website verfolgen können, wie z.B. Google Pagespeed Insights und Pingdom. Vor allem aber können wir die Dev Tools des Browsers nutzen, die uns viele aussagekräftige Informationen liefern.
Jeder Browser-Inspektor verfügt über ein Netzwerk-Panel, das eine Liste von Netzwerkanfragen und zugehörigen Informationen anzeigt. Folge diesen Links für eine ausführliche Dokumentation:
In einer WordPress-Installation mit achtzehn aktiven Plugins haben wir wiederholt eine Post-Seite mit den Firefox-Dev-Tools inspiziert. Wir haben zunächst die Geschwindigkeit der Seite gemessen und die angeforderten Ressourcen aufgelistet, bevor wir ein Filter-Plugin installiert haben. Das folgende Bild zeigt die Ausgabe des im Firefox Netzwerkmonitor verfügbaren Performance-Analyse-Tools.
Der Netzwerkmonitor liefert die folgenden Ergebnisse (leerer Cache):
- Größe: 255.19 Kb
- Ladezeit: 1,24 Sekunden
- Anfragen: 12
Nachfolgend haben wir den Plugin Organizer installiert, um zu verhindern, dass WordPress das CF7-Plugin ausführt. Das Tortendiagramm ändert sich ein wenig.
Jetzt wird die Seite schneller geladen (leerer Cache):
- Größe: 104.21 Kb
- Ladezeit: 0,80 Sekunden
- Anfragen: 8
Als nächstes haben wir einige unnötige Plugins deaktiviert, und das nächste Bild zeigt, wie sehr wir die Leistung der Seite verbessert haben.
Nachdem alle unnötigen Plugins deaktiviert wurden, liefert der leere Browser-Cache des Netzwerkmonitors die folgenden Daten:
- Größe: 101.98 Kb
- Ladezeit: 0,46 Sekunden
- Anfragen: 8
Wir können die Ergebnisse unserer Tests vergleichen. Die Ressourcengröße wurde um 60,04% reduziert, die Ladezeit von 1,24 Sekunden auf 0,46 Sekunden verringert und die Anzahl der HTTP-Anfragen von 12 auf 8 reduziert. Dies bestätigt, dass Plugins die Seitenleistung beeinflussen können und dass wir die Seitengeschwindigkeit durch die Nutzung eines Plugin-Filters erhöhen können.
Zusammenfassung
Ob du deine eigenen Skripte erstellst oder Tools von Drittanbietern installierst, das Organisieren und Filtern von Plugins ist etwas, das du immer in Betracht ziehen solltest, wenn es um Leistungsoptimierung geht. Denke daran, dass nicht alle Plugins mit Blick auf die Performance entwickelt werden. Daher kann es sinnvoll sein, sich etwas Zeit zu nehmen und festzustellen, welche Plugin-Assets (CSS und JS) wo geladen werden.
Aber zu lernen, wie man WordPress-Plugins deaktiviert, ist nur eine von vielen anderen Techniken, die darauf abzielen, die Geschwindigkeit der Website zu erhöhen. Hier ist eine Liste mit einigen anderen hilfreichen Anleitungen und Tutorials, die sich auf die Leistung der Website beziehen:
- Wie man WordPress beschleunigt (Ultimate Guide)
- Eine Anleitung für Anfänger zur Geschwindigkeitsoptimierung von Websites
- Wie man TTFB reduziert, um die Ladezeiten von WordPress-Seiten zu verbessern
- Wie man hohe Admin-Ajax-Nutzung auf deiner WordPress-Site diagnostiziert
- Wie du deine wp_options Tabelle und die automatisch geladenen Daten aufräumen kannst wp_options Table and Autoloaded Data
- Wie man WordPress-Plugins deaktiviert(ohne Zugriff auf WP-Admin)
Schreibe einen Kommentar