Was sind Transienten-APIs?
Veröffentlicht: 2020-12-16Die Leistung der Website dreht sich häufig um die Idee des Caching: Speichern von Daten in einem Zustand, in dem sie bereit und schneller zugänglich sind, damit sie von Browsern schneller reproduziert werden können. Die WordPress Transients API ist ein Tool zum Zwischenspeichern und eine leistungsstarke Methode zur Verbesserung der Leistung von WordPress-Websites.
Was ist Caching und warum wird es verwendet?
Wenn ein Browser eine Webseite anfordert, muss der Serving Server viele komplexe und zeitaufwändige Berechnungen durchführen, was zu Verzögerungen führt. Nach dem Ausführen einer Abfrage kann sich der Server dank der Caching-Technologie das Endergebnis merken und es bei einer zweiten Anforderung dem Browser zur Verfügung stellen, ohne dass dieselben Berechnungen erneut durchgeführt werden müssen. Daher ist die Fähigkeit, frühere Ressourcen zwischenzuspeichern und wiederzuverwenden, entscheidend für die Optimierung der Leistung.
Ganz einfach Caching bietet die Möglichkeit, Informationen vorübergehend in der Caching-Ebene zu speichern.
Was sind die Arten des Caching?
Es gibt verschiedene Arten des Caching. Wenn Sie eine Kombination davon verwenden, erzielen Sie ein höheres Leistungsniveau.
Browser-Caching
Bevor Sie den Inhalt einer Webseite öffnen, benötigt Ihr Browser eine Reihe von Dingen wie JavaScript-Dateien, Stylesheets, Schriftarten usw., die zusätzlich zum Inhalt der Seite heruntergeladen werden.
Wenn ein Browser diese Dateien zwischenspeichert, müssen sie nicht jedes Mal heruntergeladen werden, wenn Sie die Website laden. Das erstmalige Laden der Site dauert normalerweise einige Sekunden. Nachdem der Browser diese Dateien zwischengespeichert hat, wird die Ladezeit erheblich verkürzt.
Server-Caching
Server-Caching bedeutet, die HTML-Datei für eine bestimmte Seite zu speichern und bei jeder nachfolgenden Anforderung zu verwenden. Dies ist der sogenannte Ganzseiten-Cache.
Es gibt eine andere Art von Server-Cache - den Objekt-Cache, der im Gegensatz zum Ganzseiten-Cache nur bestimmte Informationen (Teile) zwischenspeichert.
Seiten-Caching
Wird als der effektivste Cache angesehen. Sein Name ist selbsterklärend für die Funktionsweise. Wenn Benutzer 'A' eine Seite besucht, erstellt die Website diese und gibt sie an den Browser des Benutzers zurück. Wenn der Seitencache ausgeführt wird, wird dieser Seiteninhalt gespeichert, sodass der Seitencache den zuvor gesendeten Inhalt reproduziert, wenn Benutzer 'B' dieselbe Seite besucht.
Der größte Vorteil des Seiten-Cache besteht darin, dass die zwischengespeicherte Seite fast zum Zeitpunkt des Zugriffs zurückgegeben wird. Infolgedessen werden Millionen von Anforderungen verarbeitet und Seiten selbst auf dem schwächsten Server mit der schlechtesten Speichergeschwindigkeit und der geringen CPU-Auslastung reproduziert.
Diese Art von Cache hat jedoch auch Nachteile: Zum Beispiel die Unfähigkeit, Seiten für einen autorisierten Benutzer oder für einen Benutzer zwischenzuspeichern, dessen Seiteninhalt von aktuellen Benutzervariablen abhängt.
Datenbank-Caching
Das Zwischenspeichern von Datenbanken ist ein Prozess, der beim Entwurf von Computeranwendungen enthalten ist, die Webseiten bei Bedarf (dynamisch) durch Zugriff auf Backend-Datenbanken generieren. Ein Datenbank-Cache erweitert Ihre Primärdatenbank, indem unnötiger Druck auf sie beseitigt wird, normalerweise in Form von häufig gelesenen Lesedaten. Der Cache selbst kann in einer Reihe von Bereichen ausgeführt werden, einschließlich Ihrer Datenbank, Anwendung oder als eigenständige Ebene.
Wenn diese Anwendungen in mehrschichtigen Umgebungen bereitgestellt werden, an denen browserbasierte Clients, Webanwendungsserver und Backend-Datenbanken beteiligt sind, wird das Zwischenspeichern von Datenbanken der mittleren Schicht verwendet, um eine hohe Skalierbarkeit und Leistung zu erzielen.
Objekt-Caching
Beim Objekt-Caching in WordPress (Objekt-Cache) werden Datenbankabfragen gespeichert. Es handelt sich um einen integrierten Systemmechanismus, mit dem Sie Daten (Objekte) aller Art speichern und bei Bedarf abrufen können. In diesem Cache werden die Ergebnisse komplexer Vorgänge gespeichert.
Wenn es auf Ihrer WordPress-Site aktiviert ist, beschleunigt es die PHP-Ausführungszeiten, liefert Inhalte schneller an die Site-Besucher und reduziert die Belastung der Datenbank.
CDN (Content Delivery Networks)
Es handelt sich um eine geografisch verteilte Netzwerkinfrastruktur, die Benutzern von Webdiensten und Websites eine schnelle Bereitstellung von Inhalten ermöglicht. Die im CDN enthaltenen Server sind geografisch so angeordnet, dass die Antwortzeit für Benutzer der Site / des Dienstes minimal ist.
Was ist eine Transienten-API in WordPress?
Mit der Transienten-API kann ein Informationsblock (eine Codezeichenfolge, HTML-Inhalt, WP_Query-Objekte, JSON) in der Datenbank der Website gespeichert werden, im Gegensatz zum Browser-Caching. Die Transienten-API ist der Options-API sehr ähnlich, der Hauptunterschied besteht jedoch darin, dass die Transienten-API eine Ablaufzeit oder besser die Lebensdauer hat.
Die drei Hauptoperationen für Transienten sind das Festlegen von Werten, das Abrufen von Werten und das Löschen von Werten :
1. Stellen Sie einen Transienten ein -
set_transient ($ key, $ value, $ expires);
Um einen Transienten festzulegen, können Sie die Funktion set_transient () verwenden, die drei Komponenten hat:
- Taste - Kurzer eindeutiger Name des Transienten. Darf höchstens 172 Zeichen lang sein.
- Wert - Jeder Typ von PHP-Variable, der die Informationen enthält, die in der Datenbank gespeichert werden.
- Ablaufzeit (Lebensdauer) - Die Zeitdauer, für die die Informationen gespeichert werden.
Wenn wir beispielsweise unsere Abfrage für Listenbeiträge für einen Tag speichern möchten:
set_transient ('unique_listing_posts_query_results_name',$ listing_posts_query_results, DAY_IN_SECONDS);
Wie Sie sehen, haben wir eine (DAY_IN_SECONDS) der verschiedenen in WordPress 3.5 eingeführten Zeitkonstanten verwendet, um die Zeit einfach auszudrücken. Hier ist eine vollständige Liste aller Konstanten:
MINUTE_IN_SECONDS = 60 (Sekunden) HOUR_IN_SECONDS = 60 * MINUTE_IN_SECONDS DAY_IN_SECONDS = 24 * HOUR_IN_SECONDS WEEK_IN_SECONDS = 7 * DAY_IN_SECONDS MONTH_IN_SECONDS = 30 * DAY_IN_SECONDS YEAR_IN_SECONDS = 365 * DAY_IN_SECONDS
2. Holen Sie sich einen Transienten -
get_transient ($ key);
Um einen gespeicherten Übergang zu erhalten, können wir verwenden
get_transient ($ transient_name);
In unserem Fall könnten wir unsere Posts mit den Abfrageergebnissen abrufen mit:
get_transient ( 'unique_listing_posts_query_results_name' );
Wir werden später in unserem Beispielabschnitt mehr darüber sehen.
3. Löschen Sie einen Transienten -
delete_transient ($ key);
Wie in den vorherigen Unterabschnitten erläutert, können wir mithilfe der Transienten-API Remote- oder lokale Antworten (Inhalte oder Abfragen aus unserer Datenbank) abrufen und in unserer Datenbank speichern.
Hier stellt sich jedoch die Frage, wie wir alte gespeicherte Inhalte löschen (vorübergehend). Es gibt zwei Möglichkeiten, Transienten zu löschen (zu löschen):
Automatisches Löschen
Das Coole an Transienten ist, dass sie automatisch ablaufen, wenn wir die Ablaufzeit (Lebensdauer) einstellen . Wenn Sie versuchen, einen Transienten nach Ablauf aus Ihrer Datenbank abzurufen, löscht WordPress ihn automatisch, um Unordnung zu vermeiden. Der Übergang wird neu erstellt, sobald jemand die Website öffnet. Auf diese Weise stellen wir sicher, dass wir frischen Inhalt von der Remote- oder lokalen API haben.
Manuelles Löschen
Manchmal müssen wir den Transienten zwingen, früh zu sterben, indem wir ihn manuell löschen. Dies ist nützlich, wenn bei bestimmten Aktivitäten (Hinzufügen eines neuen Menüelements, Speichern oder Aktualisieren eines Beitrags, Hinzufügen oder Aktualisieren einer Kategorie usw.) die zwischengespeicherten Daten von Natur aus veraltet sind und aktualisiert werden müssen:
Die Funktion, die wir verwenden müssen, ist
delete_transient ($ transient_name)
und in unserem Fall sollte es sein:
delete_transient ( 'unique_listing_posts_query_results_name' );
Hinweis: Es ist wichtig, KEINE Transienten zum Speichern wertvoller Daten zu verwenden, die nicht neu erstellt werden können!
Warum sollten wir Transienten-APIs verwenden?
Wir können die Transients-API immer dann verwenden, wenn wir einen rechenintensiven Wert haben, der sich nicht sehr oft ändert und den Sie zwischenspeichern möchten. In WordPress ist dies normalerweise das Ergebnis einer Datenbankabfrage, aber es kann sich wirklich um alles handeln, was Sie in einer Variablen speichern würden, sei es ein Skalarwert, ein Array oder ein Objekt.
Alles in allem sind Transienten also großartig, wenn Sie komplexe Abfragen in Ihren Themen und Plugins durchführen.
Vorteile des Zwischenspeicherns von Remote- oder lokalen Antworten
Remote-API-Antworten
Die Remote-APIs führen immer mehrere Aufrufe oder Anforderungen an Remote-Server durch, und es gibt eine zusätzliche Latenz. Dies braucht Zeit und führt zu Verzögerungen. Einige Remote-APIs können auch Ratenlimits haben, was bedeutet, dass Sie das maximale Anforderungslimit innerhalb eines bestimmten Zeitraums erreichen können.

Und wie Sie bereits wissen, können wir die Transients-API nutzen, um die Antwort (das Ergebnis) vom Remote-Server zwischenzuspeichern und in unserer Datenbank zu speichern. Jetzt können wir die verwenden
get_transient ();
Methode und zeigen Sie das gespeicherte (zwischengespeicherte) Ergebnis / den Inhalt, wo immer dies erforderlich ist, ohne andere Remote-Aufrufe oder -Anforderungen zu tätigen.
All dies wird:
- Reduzieren Sie die Remote-HTTPS-Anrufe und -Anforderungen
- Reduzieren Sie die CPU-Serverauslastung
- Verbessern Sie die Ladezeit der Website-Seite
Lokale API-Antworten
- Grundsätzlich die HTML- oder Abfrageergebnisse aus der Datenbank. Sie können die Transients-API nicht nur zum Zwischenspeichern von Remote-Antworten verwenden, sondern auch zum Speichern von HTML-Inhalten oder Abfrageergebnissen in der lokalen Datenbank. Dies ist sehr nützlich, wenn Sie einen wiederholbaren HTML-Abschnitt auf Ihrer Website anzeigen möchten (Widgets, Schieberegler, Menüs usw.) oder nur verhindern möchten, dass bei jedem Besuch Ihrer Website komplexe oder langsame Datenbankabfragen ausgelöst werden.
Wo und wann Transienten verwenden?
- Komplexe und benutzerdefinierte Datenbankabfragen
- WordPress-Navigationsmenüs
- Seitenleisten-Widgets, die Informationen wie anzeigen; Tweets, eine Liste der letzten Website-Besucher oder eine Liste der Beiträge einer bestimmten Kategorie
- Tag-Clouds zwischenspeichern
- Zwischenspeichern externer HTTP-Anforderungen
Verwendung und Beispiele
Nach so vielen Erklärungen ist es Zeit für echte Beispiele.
Grundlegende Verwendung
Funktion get_my_data () { $ data = get_transient ('my_transient_name'); if (false === $ data) {// Transient war abgelaufen / wurde nicht gesetzt $ data = fetch_my_data (); // Daten aus der Originalquelle ziehen set_transient ('my_transient_name', $ data, HOUR_IN_SECONDS); }} $ data zurückgeben; }}
Die Funktion fetch_my_data () kann WP_Query-Objekte, JSON-Daten, HTML-Inhalte usw. speichern.
Grundlegendes Beispiel
Wie wir bereits erklärt haben, ist diese Art des Caching gut, um das Ergebnis langer Vorgänge zu speichern, und das einfachste Beispiel ist der Zugriff auf externe APIs wie Facebook.
Stellen Sie sich vor, wir haben die folgende Funktion, die auf die Facebook-API zugreift, ein Objekt (genauer gesagt eine Seite) your-website.url anfordert und die Anzahl der Likes der Seite zurückgibt:
Funktion get_facebook_likes () { $ result = wp_remote_get ('https://graph.facebook.com/your-website.url'); $ result = json_decode (wp_remote_retrieve_body ($ result)); return $ result-> liks; }} Echo "Facebook mag:". get_facebook_likes ();
Die Ausführungszeit dieser Funktion hängt von vielen Faktoren ab, einschließlich des Standorts Ihres Servers im Verhältnis zu Facebook-Servern, des Status und der Geschwindigkeit des Netzwerks usw. Im Durchschnitt kann eine Funktion 1-3 Sekunden dauern.
Dies bedeutet, dass sich die Ladezeit jeder Seite bei Verwendung dieser Funktion auf der Site um 1-3 Sekunden erhöht. Wenn wir diese Funktion mehr als 500 Mal in 500 Sekunden aufrufen, generiert Facebook außerdem einen Fehler anstelle eines Ergebnisses.
Um diese Funktion zu beschleunigen, können wir die WordPress Transients API verwenden und das Ergebnis 1 Stunde lang speichern:
Funktion get_facebook_likes () { if (false === ($ lik = get_transient ('fb_likes'))) { $ result = wp_remote_get ('https://graph.facebook.com/your-website.url'); $ result = json_decode (wp_remote_retrieve_body ($ result)); $ liks = $ result-> liks; // Transient für eine Stunde in Sekunden einstellen set_transient ('fb_likes', $ liks, 1 * HOUR_IN_SECONDS); }} return $ liks; }}
Wenn diese Funktion zum ersten Mal aufgerufen wird, schreibt WordPress nach Erhalt einer Anfrage von Facebook das Ergebnis in die Datenbank und gibt dieses Ergebnis in Zukunft eine Stunde lang aus der Datenbank zurück, ohne wiederholte Anfragen an den Facebook-Server zu stellen. Und nach einer Stunde wird die Funktion erneut an Facebook gesendet, um Daten zu erhalten.
Bei diesem Ansatz erhöht nur ein Aufruf dieser Funktion pro Stunde die Anforderungszeit um 1 bis 3 Sekunden, und nachfolgende Anrufe werden sofort ausgegeben.
Komplexeres Beispiel
Stellen Sie sich vor, wir haben eine Website mit ungefähr 100 Kategorien und ungefähr 50 000 Posts. Im Design der einzelnen Posts der Website haben wir ein Widget, das die N verwandten Posts aus der Kategorie anzeigt, in der sich der aktuelle Post befindet. Wie erwartet wird diese komplexe Abfrage einige Zeit in Anspruch nehmen, um das Ergebnis aus der Datenbank zu entnehmen und auf der Website anzuzeigen.
Stellen Sie sich nun vor, Sie haben 10 000 Benutzer, die gleichzeitig auf die Website zugreifen. Dies bedeutet, dass wir mehr als 10 000 Datenbankanforderungen haben, die die Abfrage ausführen müssen (dies ist eine komplexe Abfrage, da sie die Tabellen wp_terms, wp_term_relationships, wp_term_taxonomy und wp_posts durchsucht , also mehr als 10 000 Abfragen), um die zu erhalten Ergebnis für die N Beiträge aus der verwandten Kategorie und um sie im Frontend anzuzeigen. Dies würde wiederum die Datenbank überlasten und die Gesamtladezeit der Website verzögern und in einigen Fällen sogar zum Absturz bringen, weil die Datenbank überlastet wird.
Und hier stellt sich die Frage, wie wir die Anzahl der Datenbankabfragen und -anforderungen optimieren und reduzieren können. Warum jedes Mal so viele Abfragen, wenn wir die Transients-API nutzen und nur das Abfrageobjekt oder die gesamte HTML-Ausgabe zwischenspeichern können? Auf diese Weise reduzieren und optimieren wir die Anzahl der Datenbankabfragen, was zu einer besseren Website-Leistung und einer besseren Benutzererfahrung führt.
In unserem Fall suchen die Abfragen in den Tabellen wp_terms, wp_term_relationships, wp_term_taxonomy und wp_posts , um alle erwarteten Ergebnisse zu erhalten.
Hier ist ein vollständiges Beispiel, wie wir dies erreichen können:
Funktion show_posts_from_category () { $ args = array ( 'cat' => 555, // Zufällige Kategorie-ID 'posts_per_page' => 8, // Zufällige Anzahl verwandter Beiträge, die angezeigt werden sollen 'No_found_rows' => true, ); $ hash = md5 ($ args ['cat']); // MD5-Hash der Kategorie-ID $ transient_key = 'category-'. $ hash; // Übergangsschlüssel if (false === ($ posts_from_category_html = get_transient ($ transient_key)): // Transient ist abgelaufen / wurde nicht gesetzt $ the_query = new WP_Query ($ args); // Abfrage abrufen ob_start (); // Ausgangspufferung einschalten while ($ the_query-> have_posts ()): $ the_query-> the_post (); ?> <div class = "item"> <div class = "bigthumb"> <a href="<?php the_permalink();?> "rel =" bookmark "title =" <? php the_title ();?> "> <? php if (has_post_thumbnail ()) the_post_thumbnail ('big-thumb' ); ?> </a> </ div> <h3> <a href="<?php the_permalink();?> "rel =" bookmark "title =" <? php the_title ();?> "> <? php the_title (); ?> </a> </ h3> <? php the_excerpt (); ?> </ div> <? php in der Zwischenzeit; $ post_from_category_html = ob_get_contents (); // Ruft den Inhalt des Ausgabepuffers ab, ohne ihn zu löschen ob_end_clean (); // Schaltet diese Ausgabepufferung aus set_transient ($ transient_key, $ posts_from_category_html, $ transient_expire = 15 * MINUTE_IN_SECONDS); // Einstellen des Transienten mit einer Ablaufzeit von 15 Minuten wp_reset_postdata (); endif; return $ post_from_category_html; }}
Abschließende Gedanken
Caching ist eine großartige Möglichkeit, um die Dinge zu beschleunigen, aber Sie müssen genau wissen, was Sie zwischenspeichern, wo Sie es wann und wie tun können, sonst riskieren Sie unerwartete Konsequenzen.
Wenn Sie sich nicht sicher sind, ob etwas wie beabsichtigt funktioniert, wenden Sie sich immer der Profilerstellung zu. Sehen Sie sich jede Abfrage anhand der Datenbank an, sehen Sie sich alle PHP-Funktionsaufrufe, das Timing und die Speichernutzung an.
Die Transients API ist eine großartige Möglichkeit, die Ladezeit Ihrer WordPress-Website zu optimieren und eine außergewöhnliche Benutzererfahrung zu bieten. Die Verwendung von Transienten in Ihren Plugins und Themes ist einfach und fügt nur einige zusätzliche Codezeilen hinzu. Wenn es in den richtigen Situationen verwendet wird - wie lange Datenbankabfragen oder komplex verarbeitete Daten - kann es Sekunden an Ladezeiten auf Ihrer Site sparen.