Ein Leitfaden für Transienten in WordPress
Veröffentlicht: 2023-02-12Als WordPress-Entwickler wissen Sie wahrscheinlich bereits, wie wichtig Leistung für eine erfolgreiche Website ist. Es kann jedoch etwas schwierig sein, Transienten in WordPress zu verstehen und zu verstehen, wie sie Ihnen bei der Optimierung Ihrer Projekte helfen.
Glücklicherweise sind Transienten, wenn man sie aufschlüsselt, nicht allzu schwer zu verstehen. Solange Sie einige wichtige Richtlinien beachten, sollten Sie auf dem besten Weg sein, sie in Ihr nächstes WordPress-Plugin zu integrieren.
In diesem Beitrag geben wir einen Überblick darüber, was WordPress-Transienten sind und wie und wann sie verwendet werden. Es gibt viel zu tun, also fangen wir gleich an!
Was sind WordPress-Transienten?
Um Transienten zu verstehen, ist es hilfreich, über Grundkenntnisse in Caching und Application Programming Interfaces (APIs) zu verfügen.
Das Zwischenspeichern von Webseitendaten ist im Wesentlichen eine Möglichkeit, die Daten einer Website vorübergehend zu speichern, sodass die Website MySQL oder PHP nicht erneut ausführen muss, wenn dieselben Daten mehrfach angefordert werden. Dies kann Sekunden Zeit sparen und die Serverlast reduzieren.
Die Idee ist, Daten vorübergehend zu speichern, daher das Wort „Transienten“. Die Transients-API ähnelt der WordPress Options-API. Sie geben Daten einen Namen und einen Wert – der komplex sein kann, wie ein mehrstufiges PHP-Array – und speichern die Daten. Später, vielleicht sogar auf eine andere Anfrage, können Sie diese Daten unter Verwendung ihres Namens abrufen. Der Unterschied besteht darin, dass die Daten in der Optionstabelle für immer bestehen bleiben. Das heißt, Sie können Daten speichern, und drei Jahre später sind sie immer noch da.
Jeder Transient besteht aus drei Teilen:
- $vorübergehend. Dies ist die Zeichenfolge, die verwendet wird, um Ihren Transienten zu identifizieren und ihn aufzurufen. Er wird auch als „Schlüssel“ oder „Name“ des Transienten bezeichnet.
- $Wert. Dies sind die Informationen, die über eine API abgerufen werden. Der Wert eines Transienten kann ein Objekt, ein Array, eine Zahl oder ein String sein.
- $ablauf. So lange bleibt ein Transient in Ihrer Datenbank, bevor er gelöscht wird und Sie erneut über die API auf die benötigten Informationen zugreifen müssen.
An der Oberfläche ist das alles, was es mit WordPress-Transienten auf sich hat. Um sie jedoch richtig zu verwenden, müssen Sie noch mehr wissen.
Transientendaten bleiben jedoch nicht erhalten. Das ist der Punkt! Sie können die Daten anfordern und auf zwei Arten feststellen, dass sie fehlen. Beim Speichern der Daten legen Sie zunächst ein Ablaufdatum fest. Du könntest zum Beispiel sagen „bewahre das drei Stunden lang auf“. Wenn Sie es also nach vier Stunden anfordern, wird es fehlen.
Die zweite Möglichkeit besteht darin, dass Daten jederzeit und aus irgendeinem Grund einfach verschwinden dürfen. Das klingt seltsam, ich weiß! Was bringt es, die Daten zu speichern, wenn man sich nicht darauf verlassen kann? Der Punkt ist, dass die Speicherung eine Anforderung ist, die WordPress zu erfüllen versucht, aber aufgrund dieser Flexibilität ist es möglich, verschiedene Arten von Implementierungen für die transiente Speicherung zu verwenden, und das bedeutet, dass es möglich ist, verschiedene, fortschrittliche Technologien zu verwenden, um Transienten extrem effizient zu machen , und funktionieren auch in einer Cluster-Umgebung mit mehreren Servern ordnungsgemäß.
Aufgrund dieser „jederzeit verschwinden“-Sache verwenden Sie im Allgemeinen Transienten für einen Cache. Das heißt, wenn Sie etwas berechnen müssen, das Echtzeit benötigt, wie z. B. eine langsame MySQL-Abfrage, oder Daten aus einer externen Quelle wie dem Twitter- oder RSS-Feed einer Person abrufen, können Sie die berechneten Daten in einem Transient speichern, da Sie wissen, dass sie verloren gehen es ist immer möglich, es neu zu erstellen. Aber im Normalfall – wenn es NICHT verloren geht – hat man die Daten schnell ohne neu berechnen zu müssen.
Die Vorteile der Verwendung von Transienten auf Ihrer WordPress-Site
Wie bereits erwähnt, besteht der Hauptvorteil von Transienten darin, dass sie die Leistung der Website verbessern. Hier ist ein grober Überblick, wie das funktioniert, am Beispiel des Google Site Kit-Plug-ins.
Wenn das Plugin aktiviert ist, verwendet es eine API, um Daten von Plattformen wie Analytics und Search Console im WordPress-Dashboard anzuzeigen. Ohne Transienten müsste WordPress diese Informationen jedes Mal von jedem Tool abrufen, wenn Sie Ihr Site Kit-Dashboard anzeigen:
Stattdessen enthält Site Kit Transienten, die Daten aus Analytics und der Search Console zwischenspeichern. Sie werden für einen Tag (oder eine Stunde, wenn die Plattform keine Daten zurückgibt) gespeichert.
Jedes Mal, wenn Sie später auf Ihr Site Kit-Dashboard zugreifen, kann WordPress die gespeicherten Informationen schnell aus Ihrer Datenbank abrufen, anstatt die API erneut aufrufen zu müssen. Nach Ablauf der Ablauffrist werden die alten Daten gelöscht.
Das bedeutet, dass Sie nicht jedes Mal warten müssen, bis Ihre Ergebnisse geladen sind. Dies ist in einer Vielzahl von Situationen nützlich, z. B. beim Anzeigen der Anzahl der Social-Media-Shares für Ihre Beiträge oder beim Anzeigen eines Newsfeeds.
Nachteile der Verwendung von Transienten auf Ihrer WordPress-Site
Was Sie mit Transienten in Schwierigkeiten bringt, sind die unterschiedlichen und schwer zu reproduzierenden Verhaltensweisen, die Sie bekommen, wenn Ihr Plugin/Theme unter verschiedenen Transienten-Implementierungen läuft. Unterschiedliche transiente Implementierungen bedeuten, dass Sie NUR in bestimmten Konfigurationen mit bestimmten Arten von Sites auf Probleme stoßen werden und niemals auf anderen. Wenn Sie sich als Entwickler dieser Fallstricke nicht bewusst sind und nicht entsprechend programmieren, werden Sie denken, dass Ihr Code solide ist, aber tatsächlich wird er im Feld brechen, und Sie werden nicht einmal wissen, wie Sie ihn reproduzieren können !
Wann WordPress Transienten verwendet werden sollten
Transienten werden aus Ihrer Datenbank gelöscht, sobald sie das Ende ihres Ablaufzeitraums erreichen. Aus diesem Grund möchten Sie sie nur für Informationen verwenden, die ständig neu erstellt werden.
Obwohl sie die Leistung Ihres Projekts verbessern können, sollten Transienten außerdem am besten für große Abfragen und Remoteaufrufe reserviert werden. Wenn mehr Code erforderlich ist, um einen Transienten zu erstellen, als einfach jedes Mal, wenn er benötigt wird, eine neue Anforderung für die Ressource zu stellen, sollten Sie besser darauf verzichten.
Verwalten von WordPress-Transienten
Wenn Sie die Transienten, die gerade auf Ihrer WordPress-Site arbeiten, einfach sehen und verwalten möchten, können Sie das Transients Manager-Plugin installieren:
Es bietet eine vollständige Liste der Transienten, die Sie finden können, indem Sie zu Extras > Transienten navigieren:
Hier sehen Sie alle drei transienten Elemente, die wir zuvor aufgelistet haben – den Schlüssel (Name), den Wert und den Ablaufzeitraum. Sie können jede dieser Funktionen bearbeiten, indem Sie auf den Link Bearbeiten klicken:
Sie können Transienten auch einzeln oder in großen Mengen löschen.
Grundlegende Operationen, die in Transienten verwendet werden
Wenn es darum geht, Ihre eigenen Transienten zu codieren, gibt es drei grundlegende Operationen, die Sie wahrscheinlich verwenden müssen. Wir haben jeden von ihnen unten umrissen und weiterhin Site Kit als Beispiel verwendet.
1. Einstellen von Transienten
Das Erstellen oder „Festlegen“ von Transienten ist der Prozess der Definition des Schlüssels, des Werts und des Ablaufzeitraums und der Anwendung dieser Informationen auf die relevanten Daten. Dazu verwenden Sie das folgende Format:
Set_transient ('key', $value, expiration_period)
Hier ist der Code, der in Google Site Kit verwendet wird, um den Transienten festzulegen, der Analysedaten speichert:
// Cache "data found" status for one day, "no data" status for one hour. set_transient( $transient_key, (int) $has_data, $has_data ? DAY_IN_SECONDS : HOUR_IN_SECONDS ); } return (bool) $has_data; } }
Der transiente Schlüssel ist googlesitekit_analytics_has_data (zuvor im Code definiert), der Wert ist $has_data oder $has_data ? , und die Ablaufzeit beträgt einen Tag oder eine Stunde (je nach Wert).

2. Abrufen von Transienten
Das Abrufen von Transienten ist etwas komplizierter. Zuerst müssen Sie eine Funktion verwenden, um die erforderlichen Daten anzufordern. Dann prüfen Sie, ob es einen entsprechenden Transienten gibt, der geladen werden sollte, anstatt eine neue API-Anfrage zu stellen.
Das Ergebnis könnte etwa so aussehen:
function some_function(){ $transient = get_transient('key');
Sie müssen dann entweder den Transienten zurückgeben oder die abgelaufenen Daten löschen und die Quelle erneut anrufen. Abschließend müssen Sie nach Rücksendung der neuen Daten noch den Transienten setzen, damit diese wieder bis zum Ablauf der Verfallszeit gespeichert werden.
In Google Site Kit sieht das so aus:
/** * Checks whether Analytics data exists for the given URL. * * @since 1.4.0 * * @param string $url The url to check data for. * @return bool */ protected function has_data_for_url( $url ) { if ( ! $url ) { return false; } $transient_key = 'googlesitekit_analytics_has_data_' . md5( $url ); $has_data = get_transient( $transient_key ); if ( false === $has_data ) { /* @var Google_Service_AnalyticsReporting_Report[]|WP_Error $reports Array of reporting report instances. */ $reports = $this->get_data( 'report', array( 'url' => $url, 'metrics' => array( array( 'expression' => 'ga:users' ), array( 'expression' => 'ga:sessions' ), ), ) ); if ( is_wp_error( $reports ) ) { $reports = array(); // Bypass data check and cache. } foreach ( $reports as $report ) { /* @var Google_Service_AnalyticsReporting_Report $report Report instance. */ $report_data = $report->getData(); /* @var Google_Service_AnalyticsReporting_ReportData $report_data Report data instance. */ foreach ( $report_data->getTotals() as $date_range_values ) { /* @var Google_Service_AnalyticsReporting_DateRangeValues $date_range_values Values instance. */ if ( isset( $date_range_values[0], $date_range_values[1] ) && ( 0 < $date_range_values[0] || 0 < $date_range_values[1] ) ) { $has_data = true; break 2; } } }
Auf diesen Code sollte dann das Snippet folgen, das wir im vorherigen Abschnitt zum Festlegen von Transienten eingefügt haben.
3. Löschen von Transienten
In einigen Fällen möchten Sie möglicherweise einen Transienten entfernen. Wenn Sie beispielsweise immer die aktuellsten Analysen in Google Site Kit sehen möchten, ist es besser, Daten nicht zwischenzuspeichern (obwohl wir nicht empfehlen, die Transienten von Site Kit tatsächlich zu löschen).
Andernfalls zeigt das Plugin den ganzen Tag über die gleichen Ergebnisse, auch wenn Sie neue Besucher hatten. Da der Übergang 24 Stunden dauert, sind die Daten, die Sie am Nachmittag anzeigen, einfach eine zwischengespeicherte Version der Daten, die Sie am Morgen geladen haben.
Der einfachste Weg, Transienten zu löschen, ist die Verwendung des Transients Manager-Plugins. Wenn Sie jedoch stattdessen Code verwenden möchten, können Sie die Funktion delete_transient() verwenden. Alles, was Sie brauchen, ist der transiente Schlüssel:
delete_transient('key');
Sie müssen dies jedoch für jeden Transienten wiederholen, den Sie löschen möchten.
Vorübergehender Ablauf: Wie funktioniert es?
Vorübergehende Ablaufzeiten können auf verschiedene Arten ausgedrückt werden. Die einfachsten zwei Möglichkeiten sind:
- In Sekunden ( set_transient('key', $value, 86400))
- Verwenden von WordPress-Zeitkonstanten ( set_transient('key', $value, DAY_IN_SECONDS))
Alternativ können Sie auch nie ablaufende Transienten einstellen. Dies kann in Situationen nützlich sein, in denen Sie vorübergehende Daten unverändert lassen möchten, bis Sie die zwischengespeicherten Informationen manuell löschen und zurücksetzen.
Das Erstellen von nie ablaufenden Transienten ist ganz einfach. Lassen Sie einfach den Expiration-Parameter in der set_transient- Funktion leer oder identifizieren Sie ihn als Null.
Verstehen der WordPress Transients API
Die WordPress Transients API ist einfach das Mittel, mit dem Informationen in der Datenbank deiner Website zwischengespeichert werden. Es ermöglicht alle verwandten Operationen, die wir in diesem Beitrag besprochen haben, einschließlich des Setzens, Abrufens und Löschens von Transienten.
Mit anderen Worten, die Transients-API ist nur der Teil des WordPress-Kerns, mit dem Sie Transienten verwenden können.
Die beiden häufigsten Implementierungen des Transients-API-Backends:
- Die in WordPress eingebaute und daher bei weitem am häufigsten vorkommende. Transiente Werte werden wie normale Optionen in der Tabelle wp_options gespeichert. Bei Transienten wird eine zusätzliche Option hinterlegt, um das Ablaufdatum festzuhalten. Wenn auf einen Transienten zugegriffen wird, zieht WordPress zuerst das Ablaufdatum. Wenn es abgelaufen ist, löscht WordPress beide Optionen aus der Tabelle, wodurch die Daten „bereinigt“ werden, und tut so, als wären die Daten nie da gewesen. Wenn es nicht abgelaufen ist, greift es den Inhalt aus der Optionstabelle.
- Zwischengespeichert. Memcached ist eine sehr einfache, aber effiziente und zuverlässige serverseitige Software, die genau das tut, was die Transients-API tun soll – Daten basierend auf einem Schlüssel speichern, der zu einem bestimmten Zeitpunkt abläuft und der bei Bedarf jederzeit verschwinden kann Zu.
Die Verwendung von Memcached anstelle von WordPress Transients hat zwei besondere Vorteile, weshalb wir es hier bei WP Engine automatisch für Sie vorkonfigurieren. Wir halten Ihnen den Rücken frei
ich. Memcached ist 10x-100x schneller beim Speichern und Abrufen von Werten als WordPress Transients, was besonders interessant ist, da der Zweck von Transienten darin besteht, Daten zwischenzuspeichern, um die Geschwindigkeit einer Website zu erhöhen.
ii. Memcached legt die maximale Menge an Speicherplatz fest, die es mit Daten belegt (z. B. 64 MB RAM), was bedeutet, dass eine Site, wenn sie zu viele Daten auf einmal speichert, automatisch alte Daten verwirft und daher nie Platzmangel hat. Aber die eingebauten WordPress Transients speichern eine beliebige Menge an Daten in der Optionstabelle.
Anwenden von Transienten in Ihrer Entwicklung
Angenommen, Sie lesen und schreiben wiederholt denselben Transients-Schlüssel und nehmen an, dass es sich um 1.000 Daten handelt. In diesem Fall werden sowohl Memcached als auch die WordPress Transients genau das tun, was Sie von ihnen erwarten, und beide nehmen etwa 1k Speicherplatz ein (entweder in der Optionstabelle oder in Memcached).
Angenommen, Sie lesen und schreiben verschiedene Transients-Schlüssel, die für jede Browsersitzung unterschiedlich sind. Kurz gesagt, was ist, wenn Sie Benutzersitzungsdaten in Transients speichern? Das macht an der Oberfläche Sinn. Sitzungsdaten sollten nicht ewig dauern, und Sie möchten sich nicht mit speziellen Datenbanktabellen herumschlagen. Außerdem erlauben viele WordPress-Hosting-Unternehmen keine PHP-Sitzungen, also ist dies wirklich das Nächstbeste. Es ist sogar schnell und Multi-Server.
Hier zeigen sich die Unterschiede. Mit Memcached und einer Website mit geringem Datenverkehr scheint diese Methode zu funktionieren. Die Werte halten eine Weile an und werden dann gelöscht, wenn sie ablaufen. Wenn der Server jedoch stark ausgelastet ist, übersteigt die Menge der Sitzungsdaten, die der Server speichern muss, den verfügbaren Speicherplatz in Memcache, und daher verlieren Sie früher als gedacht Sitzungsdaten. Und wenn Sie nicht genau in dieser stark belasteten Umgebung getestet hätten, würden Sie das nie erfahren. Im Allgemeinen füllen diese Umgebungen Memcache so schnell, dass Memcache effektiv deaktiviert wird, da es Daten nie lange genug speichern kann, um nützlich zu sein. Sie haben praktisch überhaupt keinen Transient-API-Cache!
Aber mit den WordPress-Transienten erhalten Sie ein anderes, aber immer noch sehr unerwünschtes Verhalten. Da die Werte in die Datenbank geschrieben werden und nicht in einen RAM-Block mit fester Größe, bleiben sie alle erhalten. Das bedeutet, dass Sie selbst bei einer stark ausgelasteten Site immer noch Ihre Sitzungsdaten haben. Eindrucksvoll!
Dachte man zumindest. Denn was in der Transient-API nicht gesagt wird, passiert, wenn Sie eindeutige Schlüssel wie Sitzungen verwenden. Und was bei der eingebauten Methode passiert, ist, dass sich die Optionstabelle endlos füllt! Denn: Die „Altdatenbereinigung“ von WordPress funktioniert nur, wenn Sie den Schlüssel anfordern (wie wir bereits besprochen haben). Wenn Sie den Schlüssel einfach lassen, bleibt er für immer in der Optionstabelle. Es gibt keinen separaten Prozess, der diese bereinigt!
Wir sind uns dieses Problems nicht nur bewusst, wir möchten auch unseren Kunden helfen, die möglicherweise Code ausführen, der dies nicht versteht. Hier kommt das „Managed“ in Managed WordPress ins Spiel! Jede Nacht haben wir einen automatisierten Prozess, um Ihre Optionstabelle nach abgelaufenen Transienten zu durchsuchen und diese zu löschen (sowohl die Daten als auch das Ablaufdatum). Boom! Sie sind weg, und Sie müssen sich keine Sorgen um sie machen.
Das ist großartig, dass wir das tun, aber als Entwickler eines allgemeinen Plugins oder Designs, das in jeder Hosting-Umgebung ordnungsgemäß funktionieren soll, können Sie dies nicht in allen potenziellen Umgebungen tun, in denen Ihr Plugin oder Design bereitgestellt werden könnte, und Sie sicherstellen möchten, dass Sie Ihren Benutzern und Kunden den bestmöglich optimierten Code zur Verfügung stellen.
Da Sie jetzt jedoch wissen, wie Transienten schief gehen können, könnte es eine großartige Idee sein, einen Blick darauf zu werfen und zu sehen, wie Sie Ihren Code effizienter gestalten können. Wenn Sie bis hierher gelesen haben, mögen Sie es wahrscheinlich, Ihren Code zu optimieren, und dieser Blog-Beitrag kann Ihnen den Fehdehandschuh hinwerfen und Sie dazu motivieren, einige Dinge neu zu schreiben, um besser skalierbar zu sein!
Machen Sie mehr aus Ihrer WordPress-Site
Als WordPress-Entwickler ist es entscheidend, Ihren Endbenutzern den Zugriff auf Remote-Daten zu ermöglichen und gleichzeitig eine schnelle Leistung aufrechtzuerhalten. WordPress-Transienten können Ihnen dabei helfen, genau das zu erreichen.
Es schadet jedoch nicht, ein wenig zusätzliche Hilfe von blitzschnellem WordPress-Hosting und professionellen Entwicklerressourcen zu erhalten. Egal, ob Sie neu im Programmieren oder ein erfahrener Profi sind, wir helfen Ihnen gerne weiter. Sehen Sie sich noch heute unsere Pläne an!