Los transients son una parte fundamental en WordPress, pero muy poca gente conoce su existencia y aún menos gente sabe cómo funcionan y cómo nos ayudan.
Si tratamos de resumirlo, los transients son datos que se guardan en la base de datos de WordPress y que sirven como cache de ciertas funcionalidades para evitar ejecutar ciertas funciones PHP constantemente para generar datos o para obtener datos externos.
Para que te hagas una idea hay funcionalidades, como los contadores de «likes» de plugins de botones sociales, que se apoyan en los transients para funcionar y no estar constantemente enviando la petición de actualización del contador a las API de los principales servicios.
Los transients llevan siempre fecha de caducidad, es decir, los transients caducan y se borran de la base de datos de WordPress mediante el wp-cron.php.
En teoría, los transients suelen ayudar a mejorar los tiempos de respuesta y el rendimiento; sin embargo, en la práctica algunos plugins suelen abusar del uso de transients y pueden llegar a saturar la tabla wp_options de nuestro WordPress con miles de options.
Por si no te ha quedado claro lo que son los transients en la base de datos de WordPress, te dejo este vídeo:
A lo largo de mi trayectoria como consultor WordPress especializado en la resolución de errores complejos, me he encontrado tablas wp_options con cientos de megas de transients sin caducar. Esto provoca que las consultas realizadas a esta tabla se ralenticen, lo que genera un problema MUY grave en la consulta de opciones con parámetro autoload.
Como he dicho antes, en teoría los transients de WordPress son muy beneficiosos, ya que actúan como cache, pero en la práctica esto no siempre es así. En la captura anterior puedes ver un ejemplo de un WooCommerce que genera un transient con cada visita por culpa de un plugin (que ha sido identificado, pero es necesario). Ese transient tarda 30 días en caducar.
Esta instalación de ejemplo está funcionando correctamente, ya que ese plugin se apoya en los transients para guardar una serie de datos serializados del usuario. El problema es que los transients no están pensados para caducar a los 30 días, sino como mucho cada día.
Por esta razón, la tabla wp_options de esta instalación con WooCommerce pesa 30MB, tiene 19.000 filas y cuando se hace la query a las options con parámetros autoload, tarda más y se consumen más recursos de MySQL o MariaDB debido a que la tabla donde hay que buscar es mucho más grande de lo que debería.
¿Solución óptima? Prescindir de ese plugin.
¿Y si no se puede? Pues borrar los transients cada semana para limpiar la tabla wp_options e intentar tenerla lo más despejada posible.
¿Existen más soluciones? Actualmente, no hay muchos plugins de cache de base de datos MySQL o MariaDB para WordPress, pero utilizando W3 Total Cache puedes llegar a mitigar el efecto negativo de un exceso de transients.
Precisamente por esta razón le hemos dado a WP Database Tools la capacidad de gestionar y ver los transients almacenados en la base de datos de tu WordPress. También hemos puesto una funcionalidad para que borres TODOS los transients, no solo los caducados. De vez en cuando, el purgado general de todos los transients acumulados en la tabla wp_options es beneficioso.
WP Database Tools hace algo que no hacen otros plugins similares: permite segmentar el plugin o theme propietario de cada transient que podemos encontrar en wp_options.
También quiero aclarar que, en instalaciones donde se acumulan muchos transients, lo óptimo no es estarlos borrando constantemente, sino que es necesario saber de dónde viene el problema y solucionarlo de raíz.
Como decía al principio del post, cuando un transient caduca es borrado por una tarea programada que ejecuta el wp-cron.php cada cierto tiempo. No obstante, si queremos forzar el borrado de transients caducados, podemos hacerlo mediante WP Database Tools:
La gestión y el manipulado de transients no es algo que haga todo el mundo, pero es algo a lo que debemos prestar atención durante la revisión o mantenimiento de un sitio web WordPress.
En casos como el que hemos expuesto brevemente en este post, agilizando y descongestionando la carga de opciones con autoloads, al solucionar los problemas de «flujo» de los transients conseguimos mejorar el WPO general y la velocidad de carga de toda la web, sobre todo en zonas no cacheadas de la tienda online.
Si no quieres usar un plugin como WP Database Tools y buscas a alguien que se encargue del mantenimiento de tu sitio web WordPress, en Raiola Networks podemos darte ese servicio.
Si quieres probar WP Database Tools, puedes obtener más información en este sitio web: https://wpdatabasetools.com/