¿Alguna vez se ha caído tu web por exceso de consumo de recursos de ancho de banda, memoria, CPU? ¿Tu web va lenta y no sabes el motivo? ¿Has recibido una amable invitación de tu empresa de hosting para que amplíes tu plan de alojamiento?
Si te sientes aludido en alguna de estas preguntas este artículo es para ti.
Normalmente pensamos que el único parámetro de medida de consumo de recursos de nuestra web son las visitas, y algunas empresas de hosting tienen parte de culpa en esto, pues distinguen sus planes a contratar por este parámetro, pero no es así.
Puedes tener pocas visitas y mucho consumo de recursos y, en el lado opuesto, tener un montón de tráfico y ser un ahorrador nato de recursos del servidor.
Así, hay webs con pocas visitas que necesitan contratar planes de hosting carísimos, al mismo tiempo que webs de alto tráfico que funcionan de maravilla incluso con planes de hosting compartido de bajo costo.
En consecuencia, todo depende del uso eficaz que hagas de los recursos disponibles, y apliques medidas de eso conocido como WPO, abreviatura de optimización del rendimiento web, que no solo tiene que ver con lo rápida que carga tu web, sino con el dineral que puedes ahorrar en hosting si haces un uso efectivo de los recursos del mismo.
Nos concentraremos en aquellas medidas de WPO que te ayudarán a no tener que cambiar a un plan de hosting mayor, y más caro, e incluso – quien sabe – a pasarte a un plan inferior, o incluir uno o varios sitios adicionales en el tu plan actual -si es multidominio y te lo permite- y empezar a ahorrar dinero.
Una empresa de hosting, a fin de cuentas, te está alquilando espacio en sus servidores, te cobra por las prestaciones que tiene en cuanto a espacio en disco, memoria, CPU, ancho de banda y demás especificaciones de servicio.
Si nos fijamos en las prestaciones de los planes de alojamiento hay una relación directa entre capacidad-prestaciones y precio. A mayor espacio en disco, memoria, CPU, ancho de banda, etc, mayor será el costo. Así que la estrategia de WPO debe ir dirigida a ahorrar recursos en esas prestaciones.
Igual que cualquier sistema informático, uno de los elementos que influyen en el rendimiento de tu aplicación es el espacio en disco.
Es más común de lo que imaginas, ver webs lentas, aparentemente optimizadas, en las que el único problema sin resolver es que tenían prácticamente agotado el espacio en disco. Así que, antes de pagar por una ampliación de disco duro o capacidad, podemos revisar algunas estrategias para ahorrar espacio.
¿De verdad tienes que tener una copia del directorio de plugins y temas de WordPress? ¿Sufres de angustia por la separación o algo así?. En serio, borra todos esos plugins o temas que no utilizas. Si alguna vez quieres volver a usarlos los vuelves a instalar desde cero. Si quieres/necesitas tener respaldos, genéralos, descárgalos a tu computador y luego bórralos del servidor.
No te preocupes -por ejemplo- por las configuraciones que hayas hecho a algún plugin, éstas se guardan en la base de datos, así que la próxima vez que borres, y posteriormente instales y actives, por ejemplo, All in One SEO Pack, no tendrás que volver a poner tus ajustes preferidos, pues ya quedará guardado en la base de datos la configuración que le asignaste inicialmente.
Con los temas es lo mismo. Solo tienes que tener en tu alojamiento el tema activo, el tema hijo si lo usas, y cualquiera de los temas por defecto de WordPress, solo uno, por si algún día falla tu tema activo, para que WordPress muestre automáticamente tu contenido con el tema por defecto, una salvaguarda que hace WordPress y que no todo el mundo conoce.
El resto sobra.
Si el tema, o los plugins, han añadido carpetas o archivos y ya no los necesitas por haberlos desinstalado, simplemente borra todo lo que ya no esté en uso.
Si tu plugin de caché guarda todo el histórico de caché desde el siglo pasado ¿de verdad lo necesitas? Borra cualquier carpeta histórica de caché que te encuentres, y ante la duda borra toda la caché, tu plugin de caché creará la versión más actual necesaria.
Como la inmensa mayoría de servidores web utilizan alguna versión de Linux, tienen una limitación de los conocidos como inodes o inodos, que son la cantidad de unidades de archivo que puede contener un sistema, da igual su tamaño, aquí puedes saber más al respecto.
Debido a esto, puedes tener tu web caída, no por haber ocupado los 10 Gb de espacio en disco, sino por haber superado el número de inodes que tu plan de hosting admite.
Así que vigila, no los archivos grandes – que también es importante – sino esos miles de pequeños archivos de esas copias de webs antigua que guardas en tu alojamiento, todas y cada una de esas ya innecesarias versiones que alguna vez tuviste de tu web.
Si quieres seguir “guardando recuerdos” hazlo en tu disco duro local, que sale mucho más barato el precio/giga que en un plan de hosting. Descarga tus webs históricas y luego borras la copia alojada en el servidor; recordando vaciar la carpeta Trash al finalizar, para que no sigan quedando allí los archivos borrados.
Y es solo un ejemplo. Vigila carpetas con muchos archivos, por pequeños que sean, especialmente si son pequeños, y muchos, allí se esconde el mayor consumo de inodes.
Otra práctica efectiva de ahorro en el consumo de espacio es configurar y manejar las cuentas de correo desde plataformas externas como Outlook, Thunderbird y similares, bajo protocolo POP3, de esta manera todo lo enviado y recibido quedará siempre alojado en tu computador, y no consumiendo espacio e inodes del servidor.
¿De verdad necesitas subir la foto de ese bonito paisaje en su versión HD?
Cuando ofrecemos imágenes en nuestra web son para ilustrar contenidos o como elementos de diseño, y ni unos ni otros requieren calidad de alta definición.
Recuerda que la mayoría del tráfico actualmente es móvil, donde tampoco tendrán sentido imágenes de enorme peso -y dimensiones- que, además, harían la experiencia de navegación terriblemente lenta.
Así que, antes de subir imágenes…
En cuanto a la CPU la RAM de tu servidor tenemos que centrarnos en aquellos procesos dinámicos que requieran alta capacidad de proceso de estos recursos.
Sí, estamos hablando de la programación, la base de datos, o sea, de WordPress, el tema, los plugins, y su código, de la web como la conocemos.
La mejor estrategia para no consumir recursos dinámicos es convertir todo lo que se pueda a estático. Así que utiliza caché de objetos, de procesos, de memoria, persistente, para ofrecer versiones estáticas de todas las peticiones, consultas y solicitudes comunes de programación.
De este modo, las consultas más habituales a la base de datos, las peticiones de datos meta que hace WordPress, se servirán desde su copia estática, reduciendo el consumo de recursos dinámicos de tu hosting (CPU, RAM, I/O, IOPS).
El único detalle de la caché es que al mismo tiempo que ahorras en recursos dinámicos consumes más espacio en disco (al realizar copias estáticas del contenido dinámico), así que debes analizar cual es tu principal carencia, aunque nuestro consejo es que priorices la caché, porque la derivada es que ofrecerás páginas más rápidas a tus visitantes.
Si te es posible utiliza una CDN, tipo Amazon o CloudFlare, para servir remotamente desde sus servidores tus contenidos estáticos e imágenes, liberando así de peticiones a tu propio servidor.
Si reduces, digamos, al 40 o 50% el peso de cada página ¿a que tu web en su conjunto se servirá más rápido, y consumirá menos recursos por parte de, por ejemplo, el motor de PHP?
Además, que con plugins como Autoptimize es cosa de hacer 3 clics. Elimina líneas vacías, tabulados, espacios, todo lo que sobra en el HTML, CSS y JavaScript que entregamos al navegador del visitante.
Las versiones actualizadas de WordPress, plugins, temas, PHP, MySQL y demás aplicaciones necesarias para que funcione tu web están habitualmente más optimizadas que las antiguas, a veces con enorme diferencia.
Así que ¡actualiza, actualiza, actualiza!
La base de datos de WordPress va aumentando de tamaño, llenándose de restos de procesos que hacen que tu hosting cada vez consuma más recursos para cualquier proceso de, solicitud, lectura y envío de datos.
Puedes depurar residuos simplemente usando la utilidad incluida en WordPress o el mismo PHPMyAdmin, o con plugins como Advanced DB Cleaner, que además te ayudará a vaciar datos transitorios temporales, los pesados transients.
Además de depurar residuos, en la base de datos de WordPress encontrarás tablas, líneas y elementos que ya no necesitas, normalmente de plugins y temas que ya no utilizas.
Si encuentras una tabla añadida por un tema o plugin que ya no usas bórrala. Pero ojo con esto, hazlo solo si estás seguro al 100%, sino puedes cargarte la web en un milisegundo.
Recuerda hacer una copia de la base de datos antes de hacer cualquier modificación, limpieza o borrado, para poder recuperar la web en caso de desastre.
Mención aparte merece la tabla options
de la base de datos de WordPress, casi siempre repleta de restos de todo tipo de ajustes de plugins y temas antiguos, que ya no usas, de datos transitorios (transients) y demás basurilla que vamos acumulando en nuestra vorágine de probar todo nuevo tema o plugin disponible.
Si a eso le sumamos que no está estandarizado que los plugins y temas vacíen sus «cosas» de la base de datos al desinstalarlos, te encontrarás siempre con una tabla options
de miles de líneas que ya no necesitas.
El problema es que no es fácil casi nunca saber qué puedes borrar y qué no, pues no siempre las líneas de esta tabla que dejan os plugins tienen un nombre que te permita identificar a qué pertenecen, o pertenecieron.
Sí es cierto que encontrarás a veces, con suerte, líneas del tipo «nombreplugin_opcion-del-mismo» pero no es así siempre.
De nuevo, lo mejor es trabajar con red, teniendo una copia de seguridad reciente antes de ponerte a pasar el aspirador.
En cualquier caso hay que intentarlo, pues no hay parte de la base de datos que genere más consultas, tráfico y consumo que las líneas de la tabla options
.
Todas las líneas de la tabla options
de WordPress tienen una columna llamada Autoload
, que define si se cargará la misma en cada ejecución de WordPress.
Todas estas opciones en carga automática y permanente tienes que verlas como pequeñas aplicaciones consumiendo recursos siempre, en todo momento, así que es buena idea cambiar el estado de «yes» a «no» de aquellas que no sea realmente necesario que se activen siempre.
Aquí volvemos a terreno incógnito, pues hay tantas, son tan poco descriptivas, que cuesta adivinar qué estás desactivando o no.
No obstante el riesgo de hacer este cambio es mínimo, pues si ves que algo deja de funcionar con un plugin o lo que sea siempre puedes volver a cambiar el Autoload
a yes.
Fácil ¿no?, pero ¿cuáles son? ¿cómo los detecto?
Muchos puedes detectarlos analizando un poco en ¿qué hace este plugin? pero sobre todo ¿cómo lo hace?
Un ejemplo muy claro son los plugins de entradas relacionadas:
Verás que, por lógica, el consumo de recursos puede variar, pero siempre será extenso. En el ejemplo de este tipo de plugins procura siempre usar los que hagan el análisis previo en vez de en tiempo real.
Otros ejemplos de plugins que consumen muchos recursos del servidor, y para los que deberás buscar el más optimizado, serían:
Hay plugins que es posible que queramos tener siempre instalados para tareas de mantenimiento o revisión, pero no es necesario que estén siempre activos.
Me refiero a comprobadores de enlaces como Broken Link Checker, de optimización de base de datos como Advanced DB Cleaner, etc, que aunque nos faciliten tareas no siempre tienen que estar activos, sino que podemos activarlos, ejecutar lo que quiera que hagan, y cuando termine desactivarlos.
Lo mismo para utilidades que sea innecesario tener activas de plugins o el tema. Hablo de cosas como módulos que no uses de Jetpack, ajustes que no utilizas del tema activo, ese tipo de cosas.
Por defecto, todos los correos que manda WordPress lo hace usando PHP Mail()
, un consumo de recursos que puedes ahorrarte enviándolos por SMTP, mejor si es externo.
Para ello hay plugins como WP Mail SMTP que lo hacen fácil.
Constantemente hay rastreadores revisando tu web, pero no todos son buenos, no todos lo hacen para mandarte tráfico, y además algunos rastrean de manera muy poco eficiente para ti, con demasiado tráfico cada poco tiempo.
Un modo de controlar cada cuanto pueden rastrearte es aplicar una regla de retardo al archivo robots.txt, esta:
Crawl-delay: 30
En el ejemplo anterior reclamamos que no se repita un rastreo hasta dentro de 30 segundos. Lo mejor de este método es que Google no hace caso a esta regla. La mala noticia es que no solo Google no hace caso a esta regla.
Para estos otros insistentes rastreadores podemos usar las reglas de control de crawlers de plugins como WordFence y otros.
Una medida de seguridad para WordPress que también evita consumos altísimos de los recursos de tu servidor es bloquear todo intento de acceso masivo a tu administración.
Plugins como iThemes Security te ofrecen ajustes para bloquear accesos masivos.
Si estás navegando y dejas activa la administración de WordPress en otra pestaña estarás consumiendo recursos innecesariamente.
Tampoco tengas varias ventanas abiertas de administración, varias vistas previas de entradas, etc.
Todo ello consume mucha RAM y CPU de tu servidor.
El cron de WordPress ejecuta procesos programados, del mismo WordPress y de plugins y el tema, y no todas esas tareas son necesarias, y casi nunca son necesarias con la frecuencia por defecto de WordPress.
Lo usa WordPress para publicar artículos programados, lo usan los plugins de copias de seguridad para sus tareas programadas, WooCommerce para cancelar pedidos sin pagar y muchos otros.
Un modo de controlarlo es cambiar su programación, forzando por ejemplo a que se ejecute solo 1 vez al día en vez de cada hora, lo que redundará en menos consumo de CPU del servidor.
Puedes ver las tareas programadas en el cron de WordPress usando comandos de WP-CLI:
wp cron event list
O puedes valerte de plugins como WP Crontrol para optimizar y personalizar su ejecución o incluso eliminar tareas del cron.
Si quieres ir más allá puedes desactivar el cron de WordPress y crear un cron de Linux en tu servidor. Lo primero es desactivar el cron de WordPress añadiendo esta línea al archivo wp-config.php:
define('DISABLE_WP_CRON', true);
Cuando guardes habrás liberado todas las tareas cron, y el consumo de recursos de tu hosting habrá llegado a mínimos, nunca vas a tenerlo más optimizado y consumiendo menos CPU y RAM.
Ahora bien, puede que algo no funcione (seguro) así que puedes crear un cron en tu alojamiento, normalmente en cPanel, en el que podrás especificar cada cuanto tiempo se ejecutará.
Este sería un ejemplo de trabajo cron creado en cPanel que se ejecutará cada media hora:
El comando a introducir para que el cron real lance el cron de WordPress sería así:
wget -q -O - http://tudominio.es/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Todas estas tareas cron de WordPress se almacenan en una línea de la tabla options
de la base de datos de WordPress, con Autoload
en «yes
» que, curiosamente, se llama también cron
.
Si alguna vez has analizado la velocidad de tu web en herramientas como las Pingdom Tools habrás observado que hay un archivo de WordPress, admin-ajax.php
, que aparece montones de veces en la lista de procesos, y en ocasiones ralentiza mucho la carga total de la misma.
Esto es debido a que es el archivo que, entre otras cosas, gestiona la famosa utilidad de WordPress llamada HeartBeat, además del uso extensivo que pueden también llegar a hacer de admin-ajax.php
algunos plugins.
Como los procesos de admin-ajax.php
no suelen poderse cachear provocan además un enorme consumo de RAM y CPU de tu alojamiento.
Esto es debido a que admin-ajax.php
se ocupa de servir contenido al navegador sin tener que recargar la página, por eso a los plugins de redes sociales, maquetadores, e-commerce y muchos otros les encanta usar esta utilidad de WordPress.
Y el modo de reducir esta carga es controlando la cantidad y frecuencia de peticiones a admin-ajax.php
ajustando la HeartBeat (aquí, puedes ver cómo, además de opciones adicionales de optimización).
Para ir terminando, seguramente ya sabrás que WordPress carga montones de elementos por defecto que no siempre son necesarios; de hecho algunos casi nunca son necesarios.
Para evitar la carga de todas las funcionalidades que carga WordPress que aportan poco o nada a tu web puedes instalar y activar (no hay nada que configurar) el plugin WordPress WPO Tweaks que, entre otras optimizaciones, hace las siguientes: