No todo el código WP es código público
Si vas a lanzar algo público, entonces todas las cosas que dijo kovshenin son perfectamente válidas.
Las cosas son diferentes si va a escribir código privado para usted o su empresa.
La memoria caché de objetos externos es un gran beneficio, en cualquier caso
Para configurar un caché de objetos persistentes externos es muy recomendable , cuando puede.
Todas las cosas que se dicen en la respuesta de kovshenin sobre los transitorios y MySQL son muy ciertas, y teniendo en cuenta que WP en sí y un montón de complementos hacen uso de la caché de objetos ... entonces la mejora del rendimiento que obtuvo, vale la pena el esfuerzo (pequeño) de configuración Un sistema de caché moderno como Redis o Memcached.
Los valores en caché pueden no estar allí: está bien
Además, sí, un caché de objetos externo no es confiable. Nunca debe confiar en el hecho de que hay un transitorio. 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
Ver 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;
}
Con 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:
- Por defecto, el caché no se usa cuando la depuración está activada, por lo que es de esperar 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 todo el problema relacionado con MySQL no existe, porque no usas transitorios cuando usan MySQL. Una alternativa probablemente más fácil sería usar
wp_cache_*
funciones , de modo que si no se configura una memoria caché externa, la memoria caché se almacena en la memoria y la base de datos nunca está involucrada.
- El uso de caché es filtrable, para manejar algunos casos extremos que puede encontrar
Sin escala web si no hay caché
No debe intentar resolver los problemas de velocidad con el caché. Si tienes problemas de velocidad, entonces debes repensar tu código.
Pero para escalar un sitio web a escala web, el caché es bastante necesario .
Y muchas veces (pero no siempre) fragmentan, el caché contextual es mucho más flexible y adecuado que el almacenamiento en caché de página completa agresivo.
Tus preguntas:
¿Debo usar la API transitoria aquí?
Depende .
¿Tu código consume muchos recursos? Si no, tal vez no hay necesidad de caché. Como se dijo, no es solo una cuestión de velocidad. Si su código se ejecuta rápido pero requiere un montón de CPU y memoria para un par de usuarios ... ¿qué sucede cuando tiene 100 o 1000 usuarios concurrentes?
Si te das cuenta de que el caché sería una buena idea ...
... y es código público: probablemente no . Puede considerar almacenar en caché de forma selectiva, como en mi ejemplo anterior en código público, pero generalmente es mejor si deja tales 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 wp_cache_*
funciones pueden darle acceso a la memoria caché sin el riesgo de contaminar la base de datos.
¿Debo usar la API transitoria para almacenar en caché la matriz $ related_posts o la cadena $ html_output?
Depende de muchas cosas. ¿Qué tan grandes son las cuerdas? ¿Qué caché externo estás usando? Si va a almacenar en caché las publicaciones, almacenar una 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 estúpida API simple para una gran cantidad de software que puede funcionar bajo el capó.
Fuera de WordPress, es muy difícil encontrar esa abstracción que funciona de forma inmediata con un montón de sistemas de almacenamiento en caché diferentes, y le permite cambiar de un sistema a otro sin ningún esfuerzo.
Rara vez me oyes decir que WordPress es mejor que otras cosas modernas, pero la API transitoria es una de las pocas cosas que extraño cuando no trabajo con WordPress.
Seguramente el caché es duro, no resuelve problemas de código y no es una bala de plata, pero es algo que necesita para construir un sitio de alto tráfico que funcione.
La idea de WordPress de usar una tabla MySQL poco optimizada para hacer caché es bastante loca, pero no es mejor mantenerse alejado del caché solo porque WordPress, por defecto, lo hace.
Solo necesita comprender cómo funcionan las cosas y luego hacer su elección.