Nicht jeder WP-Code ist öffentlicher Code
Wenn du etwas öffentliches veröffentlichen willst , dann sind alle Dinge, die Kovshenin sagte, vollkommen gültig.
Anders verhält es sich, wenn Sie privaten Code für sich oder Ihr Unternehmen schreiben.
Externer Objekt-Cache ist auf jeden Fall ein großer Vorteil
Das Festlegen eines externen permanenten Objektcaches wird nach Möglichkeit dringend empfohlen .
All die Dinge, die in der Antwort von Kovshenin zu Transienten und MySQL gesagt wurden, sind sehr wahr, und wenn man bedenkt, dass WP selbst und eine Reihe von Plugins den Objekt-Cache nutzen ... dann ist die Leistungsverbesserung, die Sie erhalten haben, den (kleinen) Aufwand für die Einrichtung absolut wert ein modernes Cache-System wie Redis oder Memcached.
Zwischengespeicherte Werte sind möglicherweise nicht vorhanden: Das ist in Ordnung
Außerdem ist ein externer Objektcache nicht zuverlässig. Sie sollten sich niemals darauf verlassen, dass ein Transient vorhanden ist. Sie müssen sicherstellen, dass es funktioniert, wenn zwischengespeicherte nicht dort sind, wo sie sein sollten.
Cache ist keine Speicherung, Cache ist Cache.
Cache gezielt nutzen
Siehe dieses Beispiel:
function my_get_some_value($key) {
// by default no cache when debug and if no external object_cache
$defUse = ! (defined('WP_DEBUG') && WP_DEBUG) && wp_using_ext_object_cache();
// make the usage of cache filterable
$useCache = apply_filters('my_use_cache', $defUse);
// return cached value if any
if ($useCache && ($cached = get_transient($key))) {
return $cached;
}
// no cached value, make sure your code works with no cache
$value = my_get_some_value_in_some_expensive_way();
// set cache, if allowed
$useCache and set_transient($key, $value, HOUR_IN_SECONDS);
return $value;
}
Einen Code wie folgt verwenden, in Ihrem privaten Website können Site - Performance verbessern viel , vor allem , wenn Sie viele Benutzer haben.
Beachten Sie, dass:
- Standardmäßig wird der Cache nicht verwendet, wenn das Debugging aktiviert ist, also hoffentlich in Ihrer Entwicklungsumgebung. Glauben Sie mir, Cache kann das Debuggen zur Hölle machen
- Standardmäßig wird der Cache auch nicht verwendet, wenn WP nicht für die Verwendung eines externen Objektcaches eingestellt ist. Dies bedeutet, dass das gesamte mit MySQL verbundene Problem nicht besteht, da Sie bei der Verwendung von MySQL keine Transienten verwenden. Eine wahrscheinlich einfachere Alternative wäre die Verwendung von
wp_cache_*
Funktionen . Wenn also kein externer Cache eingerichtet ist, befindet sich der Cache im Speicher und die Datenbank ist nie beteiligt.
- Die Verwendung des Cache kann gefiltert werden, um einige Randfälle zu behandeln, die auftreten können
Keine Webscale wenn kein Cache
Sie sollten nicht versuchen, Geschwindigkeitsprobleme mit dem Cache zu lösen. Wenn Sie Geschwindigkeitsprobleme haben, sollten Sie Ihren Code überdenken.
Zum Skalieren einer Website mit Webscale ist jedoch ein Cache erforderlich .
Und oft (aber nicht immer) ist der kontextsensitive Fragment-Cache viel flexibler und geeigneter als das aggressive Fullpage-Caching.
Deine Fragen:
Soll ich hier überhaupt Transient API verwenden?
Kommt drauf an .
Verbraucht Ihr Code viele Ressourcen? Wenn nicht, ist möglicherweise kein Cache erforderlich. Wie gesagt, ist nicht nur eine Frage der Geschwindigkeit. Wenn Ihr Code schnell ausgeführt wird, für einige Benutzer jedoch eine Menge CPU und Arbeitsspeicher erforderlich ist, was passiert, wenn 100 oder 1000 Benutzer gleichzeitig angemeldet sind?
Wenn Sie feststellen, Cache wäre eine gute Idee ..
... und ist öffentlicher Code: wahrscheinlich nein . Sie können erwägen, selektiv zu cachen, wie in meinem obigen Beispiel im öffentlichen Code, aber in der Regel ist es besser, wenn Sie solche Entscheidungen den Implementierern überlassen.
... und ist privater Code: sehr wahrscheinlich ja . Aber auch für privaten Code ist das selektive Zwischenspeichern immer noch eine gute Sache, zum Beispiel für das Debuggen.
Denken Sie jedoch daran, dass Sie mit diesen wp_cache_*
Funktionen auf den Cache zugreifen können, ohne dass die Gefahr besteht , dass die Datenbank verschmutzt wird.
Sollte ich die Transient-API verwenden, um das Array $ related_posts oder die Zeichenfolge $ html_output zwischenzuspeichern?
Es hängt von vielen Dingen ab. Wie groß ist die Saite? Welchen externen Cache verwenden Sie? Wenn Sie Posts zwischenspeichern möchten, kann das Speichern der ID als Array eine gute Idee sein. Das Abfragen einer anständigen Anzahl von Posts anhand ihrer ID ist recht schnell.
Schlussbemerkungen
Transiente API ist wahrscheinlich eines der besten Dinge von WordPress. Dank der Plugins, die Sie für jede Art von Cache-Systemen finden können, wird es zu einer blöden einfachen API für eine große Anzahl von Software, die unter der Haube arbeiten kann.
Außerhalb von WordPress ist eine solche Abstraktion, die mit einer Reihe verschiedener Caching-Systeme von Anfang an funktioniert und es Ihnen ermöglicht, mühelos von einem System zu einem anderen zu wechseln, sehr schwer zu finden.
Sie können mich selten sagen hören, dass WordPress besser ist als andere moderne Dinge, aber die vorübergehende API ist eines der wenigen Dinge, die ich vermisse, wenn ich nicht mit WordPress arbeite.
Sicher ist der Cache schwer, löst keine Codeprobleme und ist kein Wundermittel, aber er ist etwas, das Sie benötigen , um eine Website mit hohem Datenverkehr zu erstellen, die funktioniert.
Die WordPress-Idee, eine unteroptimierte MySQL-Tabelle für den Cache zu verwenden, ist ziemlich verrückt, aber es ist nicht besser, sich vom Cache fernzuhalten, nur weil WordPress dies standardmäßig tut.
Sie müssen nur verstehen, wie die Dinge funktionieren, und dann Ihre Wahl treffen.