No todos los códigos WP son códigos públicos
Si vas a lanzar algo público, entonces todas las cosas kovshenin Dicho es perfectamente válido.
Las cosas son diferentes si va a escribir un código privado para usted o para su empresa.
La caché de objetos externos es un gran beneficio, en cualquier caso
Establecer un caché externo de objetos persistentes es muy recomendable , cuando puedes.
Todas las cosas que se dicen en la respuesta de kovshenin sobre los transitorios y MySQL son muy ciertas, y considerando que WP en sí y un montón de complementos hacen uso de la caché de objetos ... entonces la mejora de rendimiento que obtienes, vale la pena (pequeña) esfuerzo para configurar un sistema de caché moderno como Redis o Memcached.
Es posible que los valores en caché no estén allí: eso está bien
Además, sí, una caché de objetos externa es no confiable. Nunca debes confiar en el hecho de que un transitorio está ahí. Debe asegurarse de que funcione si el almacenamiento en caché no está donde debería estar.
El caché no es almacenamiento, el caché es caché.
Usar caché selectivamente
Vea este ejemplo:
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;
}
Al usar un código como este, en su sitio privado, el rendimiento del sitio puede mejorar mucho , especialmente si tiene muchos usuarios.
Tenga en cuenta que:
- De forma predeterminada, el caché no se usa cuando la depuración está activada, por lo que es de esperar que en su entorno de desarrollo. Créeme, el caché puede hacer que la depuración sea un infierno
- Por defecto, el caché tampoco se usa cuando WP no está configurado para usar un caché de objetos externo. Significa que no existe todo el problema relacionado con MySQL, porque no usas transitorios cuando usan MySQL. Una alternativa probablemente más fácil sería usar
wp_cache_*
functions , por lo que si no se configura un caché externo, entonces el caché sucede en la memoria, y la base de datos nunca está involucrada.
- El uso de la memoria caché se puede filtrar, para manejar algunos casos de borde que puede encontrar
Sin escala web si no hay caché
No debes tratar de resolver problemas de velocidad con el caché. Si tiene problemas de velocidad, debería volver a pensar que codifica.
Pero para escalar un sitio web a escala web, el caché es muy necesario .
Y muchas veces (pero no siempre), el caché sensible al contexto es mucho más flexible y adecuado que el caché de página completa agresivo.
Sus preguntas:
¿Debo usar Transient API en absoluto aquí?
Depende .
¿Su código consume muchos recursos? Si no, tal vez no hay necesidad de caché.
Como se ha dicho, no es solo una cuestión de velocidad. Si su código se ejecuta rápidamente pero requiere un montón de CPU y memoria para un par de usuarios ... ¿qué sucede cuando tiene 100 o 1000 usuarios simultáneos?
Si te das cuenta de que el caché sería una buena idea ...
... y es un código público: probablemente no . Puede considerar el almacenamiento en caché de forma selectiva, como en mi ejemplo anterior en el código público, pero generalmente es mejor si deja esas decisiones a los implementadores.
... y es un código privado: muy probablemente sí . Pero incluso para el código privado, almacenar en caché de forma selectiva sigue siendo algo bueno, por ejemplo, para la depuración.
Recuerde, de todos modos, que las funciones wp_cache_*
pueden darle acceso a la memoria caché sin el riesgo de contaminar la base de datos.
¿Debo usar Transient API para almacenar en caché $ related_posts array, o $ html_output string?
Depende de muchas cosas. ¿Qué tan grandes son las cuerdas? ¿Qué caché externo estás usando? Si va a almacenar en caché las publicaciones, el almacenamiento de ID como matriz puede ser una buena idea, consultar un número decente de publicaciones por su ID es bastante rápido.
Notas finales
La API transitoria es probablemente una de las mejores cosas de WordPress. Gracias a los complementos que puede encontrar para cualquier tipo de sistemas de caché, se convierte en una API simple y estúpida para una gran cantidad de software que puede funcionar bajo el capó.
Fuera de WordPress, es muy difícil encontrar una abstracción que funcione de manera inmediata con un conjunto de diferentes sistemas de almacenamiento en caché, y que te permita cambiar de un sistema a otro sin ningún esfuerzo.
Raramente me escuchas decir que WordPress es mejor que otras cosas modernas, pero la API transitoria es una de las pocas cosas que echo de menos cuando no trabajo con WordPress.
Seguramente el caché es difícil, no resuelve los problemas de código y no es una bala de plata, pero es algo que necesitas para construir un sitio de alto tráfico que funcione.
La idea de WordPress de utilizar una tabla de MySQL poco optimizada para hacer caché es bastante insensata, pero no es mejor mantenerse alejado de la caché solo porque WordPress, de forma predeterminada, lo hace.
Solo necesitas entender cómo funcionan las cosas, luego haz tu elección.