WordPress es un CMS que, con el paso del tiempo y con las actualizaciones,se ha vuelto cada vez más complejo (técnicamente hablando, claro).
A veces, nos encontramos con problemas de rendimiento o problemas de carga que a primera vista no sabemos de dónde vienen. Empezamos a descartar cosas paso a paso, pero no encontramos el problema y, finalmente, comprobamos si el fallo viene del hosting o de otro punto similar.
Cuando el first byte de carga de una web creada con WordPress es lento, lo primero que vamos a comprobar es el hosting o servidor donde está la web. Para ello, contactamos con el soporte o probamos algún otro script o si tenemos otra web instalada en el mismo plan de hosting.
Una vez que descartamos el hosting y ya sabemos que el hosting o servidor de la web no es el cuello de botella que nos ralentiza toda la web, vamos a pasar a comprobar la instalación de WordPress.
Lo normal que suele hacer todo el mundo es desactivar todos los plugins y comprobar la carga, ¿pero y si no fuera necesario hacer esto? ¿Y si fuera posible comprobar la carga de los plugins, el theme e incluso el código PHP personalizado sin necesidad de hacer esto?
Query Monitor es la solución. Se trata de un plugin para WordPress que te permitirá resolver problemas en WordPress, ya que te ayuda a detectarlos.
Lo que hace Query Monitor es utilizar la funcionalidad de debug de WordPress para mostrar información relevante acerca de las queries y ejecuciones de la instalación de WordPress. Pero no solo eso, sino que con Query Monitor obtendremos información de peticiones AJAX usando el API Heartbeat, peticiones al API REST de WordPress, peticiones a javascripts y CSS, consultas a la base de datos (y las slow queries, claro), etc.
Query Monitor es capaz de sacar MUCHA información relevante. No obstante, para poder usarla debemos saber lo que buscamos exactamente o, al menos, dónde vamos a encontrar los datos que debemos filtrar o cotejar para saber de dónde vienen los problemas en nuestra instalación de WordPress.
Instalar Query Monitor en WordPress
Query Monitor es un plugin totalmente gratuito y podemos encontrarlo en el repositorio de plugins de WordPress, es decir, podemos utilizar el gestor de plugins del dashboard de WordPress para instalar y activar Query Monitor en cualquier instalación de WordPress.
La URL donde puedes encontrar Query Monitor en el repositorio de plugins es esta: https://es.wordpress.org/plugins/query-monitor/
Después de instalar y activar el plugin, nos aparecerán más datos en la barra de administrador de WordPress:
Con esto ya sabemos que Query Monitor está activado y funcionando. En caso de que no se mostraran datos de ejecución, sería porque por alguna razón el plugin no puede acceder correctamente a los datos de debug de WordPress. Normalmente esto se repara activando el modo debug en el wp-config.php de WordPress.
¿Quieres
recibir mis articulos?
No te pierdas todos mis trucos para WordPress, CMS, Marketing Digital y WPO.
Encontrar problemas con Query Monitor
Si cargamos cualquier página de nuestro sitio web autentificados como administradores, en la barra superior de administrador vamos a ver datos de ejecución, como puedes ver en la siguiente imagen:
Los datos que puedes ver y que he numerado en la imagen anterior corresponden a lo siguiente:
- 1: Tiempo que tarda en generarse la página HTML que se enviará al navegador del visitante.
- 2: Memoria RAM utilizada por el intérprete PHP en el servidor para generar la página HTML que se servirá a los visitantes.
- 3: Tiempo que tardan en realizarse todas las consultas MySQL necesarias para que el intérprete PHP genere el HTML que se envía al visitante.
- 4: Número de queries MySQL que se realizarán en el servidor para cargar la página.
Todos estos datos los muestra porque las páginas servidas a usuarios administradores que están haciendo debug, se supone que son páginas no cacheadas, es decir, que no están siendo servidas desde cache.
Cuando pasamos el ratón sobre los datos que hemos visto en la captura anterior, se despliega un menú con muchas opciones como este:
Pero si pulsamos sobre esos datos, se desplegará un nuevo menú en la mitad inferior de la pantalla. Algo similar a esto:
En esta parte de Query Monitor podremos obtener todos los datos que necesitamos para detectar problemas de rendimiento o problemas de cuellos de botella provocados por hooks o slow queries que provoquen waits y delays en la carga general de la web.
Precisamente en la sección “Overview” que podemos ver arriba encontramos datos un poco más detallados que los que podemos encontrar en la barra de administrador. Por ejemplo, el límite de tiempo de ejecución del servidor, el límite de memoria RAM utilizable por PHP y el tipo de queries que se realizan a la base de datos MySQL para cargar la página.
Esta sección también nos hablará del funcionamiento de Object Cache, nos dará información acerca del uso que hace la instalación de WordPress de este cache siempre y cuando esté activo (en la imagen anterior NO está activo).
En el siguiente vídeo que he grabado para ti y que puedes ver en mi canal de Youtube, puedes ver de forma práctica cómo trabajar con el plugin Query Monitor para WordPress.
Slow queries y número de queries en WordPress
Las slow queries pueden ser un problema muy importante en WordPress. De hecho, cuando WordPress almacena mucha información en la tabla wp_options, él mismo genera una slow query que debemos optimizar con un índice para que la velocidad de carga de la web no sea mala fuera de cache.
Con Query Monitor podemos detectar las slow queries y ver qué plugin o componente de WordPress es el que realiza la petición. De esta forma, con filtrados y descartes podemos detectar cuál es el problema que nos genera los problemas de rendimiento fuera de cache.
Lo que puedes ver en la captura anterior es la petición del núcleo de WordPress a la DB MySQL para leer la configuración de la tabla de opciones.
A continuación, en la siguiente captura puedes ver el mismo caso para una instalación completamente vacía:
Como ves, el número de queries realizadas a la base de datos MySQL de la instalación de WordPress es inferior, ya que normalmente los plugins y el theme activo cargan opciones en la tabla wp_options que deben ser leídas por el núcleo de WordPress mediante llamadas en cada carga de la web que no ha sido cacheada.
Sí, es verdad que SOLO SE REALIZA UNA CONSULTA para recuperar datos de esta tabla, pero normalmente es una consulta grande, debido al paso del tiempo, los mantenimientos nulos o precarios de la DB y la poca importancia que se le da a los problemas que se pueden causar al probar plugins y themes en una instalación de WordPress que esta en producción.
Y ahora te preguntaras… ¿Cuál es la cantidad de queries máximas que debemos tener?
Es una pregunta que no tiene respuesta porque depende, simplemente depende, del tamaño de los campos (esto varía en función de los plugins activos que hayan guardado datos y del theme activo). También dependemos de los transients y de otros factores.
Cuando trabajamos con instalaciones grandes con muchos plugins complejos instalados como, por ejemplo, webs WordPress con un foro bbPress y componentes sociales con BuddyPress y encima le cargamos un WooCommerce con sus correspondientes integraciones sociales, gamificación y todo lo que se nos pueda ocurrir, vamos a tener slow queries sí o sí. Y, como he dicho antes, en estos casos debemos crear un índice de la tabla wp_options de WordPress para intentar mitigar un poco el impacto y el delay de estas consultas.
Para que te hagas una idea, compara el número de opciones cargadas con get_option() de la tabla wp_options en una instalación WordPress vacía, con las opciones cargadas en una instalación WordPress después de instalar y configurar WooCommerce (SOLO WooCommerce).
Como he dicho, el tiempo de respuesta de estas queries depende del tamaño de las opciones cargadas.
Por ejemplo, esto sería una slow query provocada por el plugin bbPress (para crear foros con WordPress) y detectada por Query Monitor en el modo “Queries by Component”:
Para que te hagas una idea, en una instalación vacía de WordPress 5.0.2 con el theme por defecto, el núcleo de WordPress realiza 27 queries, mientras que el WooCommerce recién instalado y configurado sin nada más, realiza 35 queries.
Con esta herramienta integrada en Query Monitor llamada “Queries by Component” junto con la herramienta “Queries by Caller” es muy fácil encontrar slow queries, pero también es muy fácil encontrar plugins o themes que realicen muchas consultas a la base de datos MySQL de la instalación de WordPress.
Encontrar queries duplicadas con Query Monitor
Usando una de las herramientas de Query Monitor podemos encontrar queries duplicadas que se hacen al cargar la página.
Esto es algo bastante común, ya que en algunos casos un theme y un plugin duplican la misma query para obtener exactamente los mismos datos, por lo que estamos gastando recursos y tiempo sin sentido. En otras ocasiones, el problema viene por un theme o plugin mal desarrollado que consulta datos a la base de datos de forma repetitiva y poco optimizada.
En cualquiera de estos dos casos, con Query Monitor para WordPress podemos encontrar queries duplicadas usando la herramienta “Duplicate Queries” que solo aparece cuando el plugin Query Monitor detecta esto:
Solucionar esto normalmente es complicado, ya que debemos editar código. No obstante, en algunos casos (como el mostrado en la imagen anterior) simplemente con desactivar algunas opciones del theme (en este caso Bridge) es suficiente para desactivar la query duplicada.
Obtener datos del entorno web con Query Monitor
Una de las secciones más útiles de Query Monitor para WordPress es la de “Environment”, ya que desde esta sección podemos ver un resumen de las variables de configuración y del entorno donde se aloja la instalación de WordPress:
Podemos ver desde variables de PHP y su configuración (es decir, sus valores) hasta extensiones de PHP cargadas en el intérprete o configuraciones del wp-config.php de WordPress.
Estos datos pueden servirnos para hacernos una idea de la configuración del servidor, aunque siempre es mejor contrastar los datos con el proveedor de hosting donde se encuentre alojado el sitio web para tener una visión más panorámica del entorno de la web.
Otras funcionalidades de Query Monitor en WP
Query Monitor tiene algunas funcionalidades añadidas a las que hemos comentado hasta ahora en este artículo. Simplemente las voy a mencionar y no las voy a detallar, ya que considero que existen mejores opciones en formato plugin para realizar estas tareas o son opciones más orientadas a desarrolladores, no a resolución de problemas en una instalación WordPress en producción.
- Profiling: La herramienta para hacer profiling de rendimiento en WordPress que trae Query Monitor está muy orientada a desarrolladores y es bastante espartana. Por eso, yo prefiero utilizar otras alternativas como WordPress Performance Profiler o Plugin Profiler.
- Languages: Esta herramienta de Query Monitor puede servirnos para ver qué traducciones son cargadas de plugins, themes y del propio WordPress.
- Styles y Scripts: En estas dos secciones de Query Monitor podemos ver todos los scripts javascript y hojas de estilo CSS que son cargadas utilizando los estándares de desarrollo de WordPress.
- Request: Esta funcionalidad puede darnos datos exactos sobre una petición. Aunque es, por ejemplo, para ver la ID de una página, existen formas más simples de consultar estos datos y algunos más que simplemente no son necesarios en el 99% de los casos y que se muestran en esta sección.
- Template: Es útil pero su funcionamiento es simple. Esta herramienta de Query Monitor sirve para ver los archivos del theme o plantilla que intervienen en la carga de una determinada página del sitio web. También muestra las clases CSS que se cargan.
No quiero acabar sin mencionar que Query Monitor para WordPress también tiene disponibles extensiones para ampliar algunas de sus funcionalidades. Puedes encontrarlas en el GitHub del desarrollador: https://github.com/johnbillion/query-monitor/wiki/Query-Monitor-Add-on-Plugins
Estas extensiones extra pueden ayudarte en la resolución de algunos fallos concretos como, por ejemplo, problemas con bbPress y BuddyPress, ya que hay una extensión adicional para esto.
2 Responses
Hola Álvaro, tus post son para mí como libros tipo especial para dumies.. siempre eres tan claro y exacto. Así que Ole!.
Si no me respondes, tampoco pasa nada. He buscado en Google de muchas maneras cómo poder detectar si tengo plugins instalados que son piratas. Muchas veces tenemos páginas que vienen de otras empresas/agencias y detectar este tipo de plugins estaría bien. Me ha sorprendido que no he encontrado ningún tipo de información sobre la misma.
Ojalá pudiras agregar esta información en alguno de tus post o hacer uno nuevo.
Gracias igualmente, por compartir contenido de calidad y fiable.
Hola Marisin, detectar plugins pirata si no hay nada raro en el campo de autor del theme o plugin es complicado, por no decir imposible. Por eso no has encontrado información.
La unica forma que tienes de saber si es pirata, es comprobando si actualiza, ya que si hay nuevas versiones y no aparecen en el plugin, puede que no tenga la licencia puesta y que este anulado el aviso.