Mejorando la velocidad de WordPress


Hace unos cuantos días ví en las “Herramientas para webmasters” de Google que el tiempo medio de carga del blog era de 6,1 segundos (medida tomada a principios de febrero) y recientemente esta latencia se había disparado hasta unos exasperantes 7,9 segundos. Demasiada demora sin lugar a dudas; incluso el complemento Page Speed para Firebug me otorgaba unos nada fascinantes 83 puntos…

Asi que me he puesto manos a la obra y he conseguido adelgazar un poco mi WordPress, esperando que esto sea suficiente para volver a unos tiempos más razonables (en torno a 5 segundos).

Sentido común: Actualiza lo que uses, borra lo que no.
Para empezar, desactivé todos los plugins innecesarios. Ya no tenía muchos, pero he dejado tan solo un puñado de ellos activos, porque la gran mayoría ralentizan el sitio con peticiones absurdas al servidor. Ahora tengo:
Akismet: para protegerme del spam
Google XML Sitemaps: Que es evidente lo que hace
Jetpack: Una de las más recientes incorporaciones con características multipropósito bastante interesantes
User Avatar: El más estético y menos util de todos, con seguridad. Aún asi me apetece mantenerlo.
W3 Total Cache: Es innecesario, porque el servidor por ahora ha respondido perfectamente y no hay aluviones de visitas, pero puede mejorar los tiempos de respuesta de forma dramática.

Hasta ahora, el que menos me convence es “Jetpack”. Solo uso una de sus características (los botones para Twittear una entrada o publicarla en el muro de Facebook) así que es posible que acabe eliminándolo. De todas formas es un plugin joven y respaldado por Automattic, por lo que quizás acabe siendo casi un “imprescindible”.
El resto que pudiese tener, los he eliminado/desactivado para evitar desperdiciar ese valioso tiempo.
Algo similar ocurre con los widgets. Si puedes prescindir de ellos, hazlo. La mayoría se pueden sustituir por pequeños pedazos de código que seguramente aligeren la carga.

En WordPress, además, se suele poner énfasis en mejorar el rendimiento. No siempre se consiguen mejoras enormes, pero es algo muy demandado por sus usuarios, así que mantenerse al día en cuando a WordPress, temas y plugins es importante.

El botón “Más” y la página principal
Desde el principio, he publicado las entradas en su totalidad en la página principal, a veces dando lugar a un interminable “index” lleno de párrafos e imágenes. Pero si reduzco la cantidad de información que se ha de cargar, se reducirá tambien el tiempo necesario para ello.
La forma más simple es utilizar el botón “Más” (Alt+May+T) cuando editas una entrada. Verás que se inserta la etiqueta “more“.
Lo que provoca es que en la página principal solo se publique el texto que hay por encima de ella y aparezca un enlace para cargar el resto del contenido (habitualmente “Leer más” o “Seguir leyendo” o cosas parecidas). Tras el salto de página, se carga el artículo en cuestión.
Por supuesto, es buena idea utilizar miniaturas de imágenes e incluso cargarlas en otro servidor si tenemos esa posibilidad, para optimizar el rendimiento.

Metiendo mano al código
Un vistazo más en profundidad nos permite hilar más fino. En el fichero wp-config.php del blog podemos incluir dos optimizaciones bastante interesantes referidas a la publicación de entradas. Mientras las editas, wordpress las va guardando cada un cierto espacio de tiempo automáticamente para permitirte retomar el trabajo desde un punto reciente. Por defecto, usa una frecuencia bastante alta de autoguardado, así que podemos retrasar esto marcandole un margen más amplio.

Antes del cierre del php del fichero, tenemos que incluir el siguiente código:
/**
* Tiempo entre guardados automáticos de los posts
*/
define('AUTOSAVE_INTERVAL',300);

Yo he puesto 5 minutos (300 segundos) pero podrías ampliar este espacio de tiempo mucho más, incluso al doble. Hacer esto ahorra más peticiones al servidor y operaciones sobre la base de datos.

Tambien podemos aprovechar para evitar que se creen revisiones de las entradas (copias de cómo se encontraban en un instante determinado) o limitar su numero:
/**
* Desactivar revisiones de posts
* Cambiar false por un numero entero, limita el numero de revisiones de un post
*/
define('WP_POST_REVISIONS',false);

Esto no engordará tanto nuestra base de datos de wordpress. Si tenemos acceso a ella (por ejemplo, mediante phpmyadmin) podemos realizar una consulta SQL que elimine además cualquier revisión que haya almacenada (haz por si acaso una copia de seguridad antes):
DELETE FROM wp_posts WHERE post_type = "revision";

He comparado el tamaño de mi base de datos antes y despues de eliminar todas las revisiones y el resultado es muy pero que muy notorio. De más de 800 Kb ha pasado a ocupar menos de 500. Casi 300Kb menos…

Las plantillas, su codigo y las llamadas innecesarias
Otro de los grandes problemas son los temas o plantillas de wordpress. Cuanto mejor luce su aspecto, mayor suele ser su tamaño, y no es fácil encontrar un equilibrio. Escoge la que mejor se adapte a tu gusto, pero teniendo en mente si será o no muy pesada.

Lo primero que deberíamos pensar es optimizar su hoja CSS. Se encontrará en la carpeta del tema y lo habitual es que sea un archivo llamado style.css. Haz una copia de seguridad.
Ahora, copia todo su contenido en Styleneat y procésalo para optimizarlo (puedes dejar las opciones tal cual están).
En mi tema, se redujo en 100 lineas de código, pero en otros, como el famoso K2 de wordpress se reduce en unas 500 lineas.

Por otra parte, en el codigo se suelen encontrar con frecuencia llamadas del tipo:
<?php bloginfo(‘name’); ?>
Estas llamadas preguntan al servidor el nombre del blog. Como no es algo que se suela cambiar, puedes sustituir el codigo de la llamada por el texto del título del blog directamente. Por ejemplo, en el header.php
<title><?php bloginfo(‘name’); ?></title>
por:
<title>Emilio</title>

Si cambias o actualizas tu tema, tendrás que volver a editar todo esto, así que algo más eficiente puede ser declarar una variable global que devuelva de forma directa el resultado. De nuevo, abre tu wp-config.php y añade las siguientes definiciones:
// URL de la instalacion de WP
define('WP_HOME', 'http://miblog.com');
// URL de tu blog
define('WP_SITEURL', 'http://miblog.com');
// Carpeta del tema
define('TEMPLATEPATH', '/ruta/absoluta/wp-content/themes/mitema');
// Carpeta de la hoja CSS
define('STYLESHEETPATH', '/ruta/absoluta/wp-content/themes/mitema');

Recuerda que en ruta absoluta debes poner la ruta de carpetas del servidor. Ahora al tener todo esto centralizado, cambiar de theme será menos traumático 🙂

En el blog ayudawordpress.com he encontrado más información sobre esto:
13 Tags que puedes quitar para acelerar tu Blog
Acelera WordPress definiendo llamadas a funciones

¿Y la caché?
El tema de la caché da para mucho en WordPress (y en general, en cualquier CMS) así que prefiero dejarlo para más adelante, cuando yo tambien lo tenga más afianzado porque es un asunto extenso y lleno de detalles que pueden marcar la diferencia.
Parece que habrá una segunda entrada 😀

Y tu? Ya has acelerado tu WordPress?

Anuncios

Un pensamiento en “Mejorando la velocidad de WordPress

  1. Tiempos de carga con Loads.in | Emilio

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s