Wann sollte ich die Transients-API verwenden?

15

Ich habe die Transients-API noch nie zuvor verwendet und mich gefragt, ob jemand eine Anleitung zur Verwendung hat. Der Codex-Artikel impliziert, dass ich als Theme-Entwickler jedes neue WP_Query()als Übergang festlegen möchte . Ich nehme an, dasselbe gilt für direkte $ wpdb-Abfragen und query_posts(). Ist das übertrieben? Und / oder gibt es andere Orte, an denen ich es standardmäßig verwenden sollte?

Ich verwende auf meiner Site oft Caching-Plugins (normalerweise W3 Total Cache) und es hört sich so an, als würde die Verwendung von Transients die Effektivität des Plugins erhöhen, aber ich möchte nicht verrückt werden, wenn ich alles in Transienten packe, wenn dies nicht die beste Vorgehensweise ist.

Michelle
quelle
Vielen Dank an alle, ich wünschte, ich könnte mehr als eine Antwort als "Lösung" markieren. Tolle Infos, sehr geschätzt!
Michelle

Antworten:

15

Transienten eignen sich hervorragend für komplexe Abfragen in Ihren Designs und Plugins. Ich neige dazu, Transienten für Dinge wie Menüs zu verwenden und andere Dinge wie Tweets von Twitter in einer Seitenleiste anzuzeigen. Ich würde sie nicht für absolut alles mehr verwenden - also nur für temporäre Daten, die zwischengespeichert werden können.

Denken Sie daran, dass Sie einen massiven Leistungszuwachs bemerken werden, wenn Sie Memcached mit Transienten verwenden. Die Regel bei Transienten ist, dass sie nicht für Daten verwendet werden, die nicht verfallen sollten, da sie eigentlich nur für temporäre Daten gelten. Beachten Sie, dass Transienten nicht immer in der Datenbank gespeichert werden.

Einige Anwendungen für Transienten :

  • Komplexe und benutzerdefinierte Datenbankabfragen
  • Wordpress Navigationsmenüs
  • Sidebar-Widgets, die Informationen wie anzeigen; Tweets, eine Liste der letzten Website-Besucher oder ein Flickr-Fotostream
  • Caching von Tag-Clouds

Dieser Artikel ist sehr informativ und zeigt anhand kurzer Benchmarks, wie Transienten Ihre Website beschleunigen können. Er enthält sogar einige Beispiele. In diesem anderen Artikel finden Sie auch einige gute Beispiele für die Verwendung von Transienten, anhand derer Sie möglicherweise besser verstehen, wofür sie verwendet werden sollen.

Dwayne Charrington
quelle
2
Eine andere Verwendung: Zwischenspeichern von externen HTTP-Anforderungen. Als würde man die Twitter-API treffen. Tun Sie dies nicht bei jedem Laden der Seite, sondern zwischenspeichern Sie die Ergebnisse mit einem Übergang.
Chrisguitarguy
10

Es gibt verschiedene Caching-Mechanismen in WordPress und ihre Mechanismen unterscheiden sich je nach Auswahl des Objektcaches (nativ oder nicht):

+-----------+-------------------------+---------------------+
|           |         Native          | Object cache plugin |
+-----------+-------------------------+---------------------+
| Option    | Persistent (database)   | N/A                 |
| Transient | Persistent (database)   | Persistent (varies) |
| Cache     | Non-persistent (memory) | Persistent (varies) |
+-----------+-------------------------+---------------------+

Auf den Punkt gebracht bedeutet dies, dass der Übergang immer persistent ist (im Gegensatz zum nativen Cache zwischen den Seitenladevorgängen bestehen bleibt), dass jedoch ein angepasster Speicher verwendet wird, wenn er bereitgestellt wird (im Gegensatz zu Optionen).

Dies macht Transienten zur vielseitigsten Wahl für das Caching.

Mit der Flexibilität geht jedoch eine gewisse Komplexität einher, und es gibt eine Reihe von Nuancen (z. B. Begrenzung der Namenslänge, unterschiedliches Verhalten mit und ohne Ablauf, fehlende Speicherbereinigung), die sie komplexer machen, als sie scheinen.

Insgesamt:

  • Verwenden Sie Optionen zum Speichern von Dingen, die dauerhaft sein müssen
  • Verwenden Sie Transients, um etwas anderes zwischenzuspeichern
  • Verwenden Sie Cache, wenn Sie alle drei Funktionen sehr gut beherrschen und wissen, dass Cache besser zum Anwendungsfall passt als andere (was nicht oft der Fall sein wird).
Rarst
quelle
3

Ich denke, der Code von Sterling könnte verbessert werden, indem die Funktion get_transient nicht zweimal aufgerufen wird. Speichern Sie stattdessen das erste Ergebnis in einer temporären Variablen. Weil die Idee hinter der Transient API Geschwindigkeit ist ;-)

private function _get_data( $query) {
    $result = get_transient( $query );
    if ( $result ) {
       return $result;
    } else { 
       return $this->_get_query( $query ); 
    }
}
Thomas
quelle
2

Kurze Antwort: Sie sollten es verwenden, wenn / wo Sie können.

Lange Antwort:

Die Transients-API dient zum Zwischenspeichern. Sie möchten es also so oft wie möglich verwenden. Sie können eine Funktion schreiben, die dies für Sie erledigt.

Es ist kein Overkill und wenn es richtig gemacht wird, wird es ziemlich elegant:

// If the transient isn't false, then you can just get the cached version.
// If not, we'll call another function that runs a database query.
private function _get_data( $query) {
    return
    ( get_transient( $query ) ) ?
    get_transient( $query ) :
    $this->_get_query( $query );
}

// After you make the query, set the transient so you can leverage on caching plugins.
private function _get_query( $query ) {
  // Database logic. Results go to $results.
  ...
  set_transient( $query, $results , 0 ); // 0 Means cache for as long as you can.
}
Sterling Hamilton
quelle
2

Transients API ist sehr nützlich, wenn Sie Daten aus externen Quellen wie Facebook, Twitter abrufen.

Um eine genauere Vorstellung davon zu bekommen, was Transients API ist und was sich von der Cache WordPress-Funktion unterscheidet, empfehle ich, sich den Vortrag von Otto und Nanic vom WordCamp San Francisco 2011 anzuschauen

Mamaduka
quelle