Plugins, consejos y herramientas para mejorar la velocidad de tu blog en WordPress

por | diciembre 2, 2014

No soy un sabio ni me considero experto en WordPress, pero al ser la plataforma de blogs con la que más he trabajado, sí que a base de hostias he aprendido ciertas cosas. A partir de esas experiencias os voy a dar algunos consejos y comentaros qué herramientas os pueden resultar útiles.

Potencia del servidor y plan de hosting contratado (compartido, dedicado, VPS…)

Como con todo, lo bueno cuesta pasta, y cuando mejor, más dinero. La mayoría de compañías de hosting ofrecen planes flexibles según nuestras necesidades y especialmente, capacidades económicas. De hecho, si empiezas desde cero en el mundo de la web veo que una buena opción es empezar con planes más económicos a pesar de estar algo limitados en el aspecto técnico. Más tarde si todo va bien ya tendrás tiempo de contratar planes más caros e invertir más.

Los planes suelen ser:

  • Hosting compartido: suele ser una opción barata, y a su vez las compañías de hosting suelen tener varios planes dentro de esta categoría con más o menos limitaciones. En un hosting compartido, como su nombre indica, tendremos nuestro propio espacio pero en un entorno/servidor en el que compartimos recursos con otros muchos clientes. ¿Problema? Que el rendimiento de nuestra web se verá determinado en gran parte por el uso que se esté haciendo de esos recursos, y como digo estos no son sólo tuyos sino que los compartes con el resto de clientes. Además, las capacidades de administración son limitadas, ya que no seremos root/administrador, sino que estaremos confinados a un área y sólo a esa, con permisos dentro de ella. La administración del servidor como tal no recae sobre nosotross sino sobre el proveedor de hosting.
  • VPS (Virtual Private Server, Servidor Virtual Privado): es una opción más cara que la anterior, ya que en esta ocasión somos dueños de nuestro servidor virtual, el cual tendrá sus propios recursos exclusivos asignados y no compartidos con nadie más. A su vez, la cantidad de recursos (nº de CPUs, RAM…) que tengamos dependerá de cuánto estemos dispuestos a pagar al proveedor de hosting. En estos casos también seremos administradores del servidor, lo que nos otorgará más flexibilidad a la hora de configurar nuestra máquina, pero también nos hará plenamente responsables de la misma. Si administráis Vmware ESX, el concepto de VPS es bien sencillo: dentro de un ESX tendremos mútiples máquinas virtuales a las que asignamos recursos. Un VPS no deja de ser una máquina virtual dentro de un servidor físico virtualizado.
  • Servidor dedicado: en este caso somos dueños de nuestra máquina por completo. La diferencia con VPS es que éstos residen en una misma máquina física (aunque con recursos dedicados a ese VPS de forma exclusiva) mientras que un servidor dedicado es una máquina física, no compartida con nadie más, dedicada exlusivamente al cliente que la contrata. Los planes que ofrecen los proveedores consistarán en más o menos recursos de la máquina en función de la pasta que desembolses, y seremos plenamente responsables y administradores.

CDN

Que viene a ser Content Delivery Network. Cuando un usuario visita una web, recae sobre el servidor en el que está alojada todo el procesamiento que implica esa petición (CSS,HTML…). Un CDN consigue dos cosas: actúa por una parte como capa adicional de seguridad (ya que podemos aplicar firewalls y políticas de filtros) y además funcionan técnicamente como un proxy con capacidad de cacheo.

Un CDN cachea en sus servidores (distribuidos) el contenido de nuestra web, para que en las peticiones que hagan los usuarios, sea el CDN quien sirva esos recursos en vez de recaer sobre el servidor propio de nuestra web. Esto mejora el rendimiento al reducir/optimizar el uso de recursos, ya que nuestro servidor recibirá menos carga de trabajo. Además, al repartirse los servidores del CDN en redes distribuidas mejora la alta disponibilidad del sitio web, ya que hay menos puntos de fallo críticos.

Tenemos en este sentido compañías como CloudFlare o Incapsula que ofrecen planes básicos gratuitos, aunque también planes de pago más completos. Por lo que he leído, uno de los CDN más completos y con un servicio de gran calidad -de pago- es el de Amazon CloudFront, aunque he de admitir que yo personalmente no lo he probado. De MaxCDN también he leído opiniones positivas.

Plugins para WordPress

Plugins de cacheo

Son una opción factible y fácil de implementar en nuestro propio blog. Se instalan como cualquier otro plugin, aunque eso sí, recomiendo que echéis un vistazo a la documentación de cada uno para aprovechar al máximo sus capacidades. Dos de los más conocidos son:

¿Qué realizan? WordPress es en esencia un Gestor de Contenido dinámico. Generar ese contenido dinámico consume recursos, muchos más que si sirvíeramos contenido estático. Parte de la tarea de estos plugins es aliviar la carga de trabajo convirtiendo ese contenido dinámico en ficheros HTML estáticos. Claro que dan para muchos más (minificar CSS, compresión…).

No hay una fórmula mágica y los resultados varían dependiendo de una gran cantidad de factores. Por ejemplo en hosting compartido utilizar un plugin de cacheo que sobrecargue el disco duro de la máquina puede resultar en que nuestro proveedor tire abajo nuestra web por consumir demasiados recursos (que afectarían al resto de usuarios con planes compartidos que utilizan la misma máquina)

Optimizadores

Por otro lado tenemos plugins que optimizan el rendimiento de nuestro blog. Los hay de muchos tipos: de imágenes, base de datos, carga de elementos web, etc… Os comento algunos ejemplos:

  • WP Optimize: permite realizar limpieza de trackbacks y pingbacks, spam, revisiones de posts (a mí en ocasiones se me acumulan una cantidad algo alarmante)…
  • RVG Optimize Database: más o menos como el anterior, pero centrado exclusivamente en la optimización de base de datos.
  • BJ Lazy Load: carga progresivamente las imágenes y los iframes a medida que vamos navegando por la web. Esto ahorra ancho de banda y mejora el rendimiento, ya que al renderizar la web no tienen que procesarse de golpe todos los elementos, sino que lo van a haciendo en función de nuestra navegación.
  • EWWW Image Optimizer: reduce tamaños de imágenes, mejoras de compresión…

Medidas en tu servidor web Apache

La capa frontal de servidor web también es susceptible de mejoras, si es que tenemos acceso a los ficheros de configuración. En los planes compartidos, por ejemplo, estaremos bastante limitados a la hora de hacer cambios de este tipo, ya que no somos administradores del servidor. Aún así podremos implementar algunas modificaciones en ficheros .htaccess.

¿Qué podemos hacer? Por ejemplo, especificar caché de navegador para que determinados elementos web se cacheen del lado del cliente y no tengan que realizarse nuevas peticiones al servidor hasta que expire dicha caché. Comprobar antes que el módulo mod_expires esté cargado en el servidor web. En el fichero de configuración de Apache httpd.conf o en un .htaccess pondremos tal que:

ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 7 days"

Por otro lado, si utilizamos Apache y hemos cargado mod_deflate podemos ahorrar ancho de banda comprimiendo el contenido de la web. Podemos hacerlo añadiendo las siguientes directivas en el fichero de configuración de Apache httpd.conf o bien en un .htaccess:

AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

Esto es un arma de doble filo, ya que la compresión se come por otro lado recursos de la máquina. En concreto recae sobre la CPU el trabajo de compresión. Por esto en los planes de hosting compartido no se suele permitir, ya que afectaría al resto de clientes que utilizan un mismo servidor.

Y como esta medida, muchas otras: optimización del número de hilos concurrentes, workers MPM de Apache, Keepalives…