Optimizando WordPress

Aunque estoy contento con WordPress, me facilita tremendamente la edición de los posts y sus incontables plugins cubren todas las necesidades que podría tener, sin embargo me había dado cuenta que el renderizado de la página era lento, pues una de las características de WordPress es que todas las páginas se crean bajo demanda, ésto es bueno porque el contenido es dinámico pero por otro lado plantea una sobre carga para el servidor, anteriormente pensaba que como mi blog estaba en un servidor que compartía con otros dominios, esa podría ser la razón de la lentitud, pero desde que lo coloque en un server independiente me dí cuenta de que la lentitud no era por la carga sino por la forma como WordPress está diseñado.

Una de las alternativas para solucionar este problema es usar wp-cache, un plugin que efectúa el cacheo de las páginas para no tener que renderizarlas cada vez que el usuario las solicita; pero dado su naturaleza este plugin siempre está muy sujeto a ataques, es por ello que no me animaba a instalarlo. Pero buscando en diversas fuentes encontre otras alternativas que sumadas pueden dar sorprendentes resultados, al menos en mi caso he visto un notable aumento en la velocidad de renderizado de las páginas. Así que aquí un resumen de lo que he hecho.

Este howto que he preparado esta basado en Debian 4 (Etch), y sobre un servidor que tenga al menos 1 GB de memoria RAM, la velocidad del CPU no es tan crítica para nuestro caso como tener suficiente RAM. Con esa configuración su blog en WordPress fácilmente podría lidiar con un millon de visitas diarias.

Primero hay que instalar el módulo php5-memcache y activar el cacheo en memoria en el WordPress en sí mismo. Para instalar php5-memcache utilizamos estos comando como usuario "root":

# apt-get install php5-memcache
# /etc/init.d/apache2 force-reload

Y luego editamos el archivo wp-config.php donde agregaremos la línea:

define(ENABLE_CACHE, true);

Lo anterior habilitará el cacheo de queries por parte del WordPress con lo que la carga sobre el MySQL disminuirá, pero ahora hagamos una optimización más aumentemos la memoria del cache en el mismo MySQL y cambiemos su modo de operar para que no sólo guarde la versión compilada de las queries sino tambien la versión sin compilar, con lo cuál aceleraremos aún más el desempeño, para debemos de editar el archivo /etc/mysql/my.cnf agregando/editando las siguientes líneas:

#
# * Query Cache Configuration
#
query_cache_type        = 1
query_cache_limit       = 2M
query_cache_size        = 32M

Ahora debemos de reiniciar el mysql para que los cambios tomen efecto, para ello usaremos el siguiente comando como usuario "root":

# /etc/init.d/mysql restart

Como PHP debe de interpretarse cada vez que se desea ejecutar un script, si guardamos una copia de los script ya interpretada (bytecode), la ejecución de las instrucciones sera directa y nos ahorraremos en cada rederización de página el tiempo de interpretar todo el script, lo cuál haremos usando eAccelerator. Para instalar eAccelerator debemos de seguir las siguientes instrucciones como usuario "root":

# apt-get install build-essential php5-dev
# cd /tmp
# wget http://bart.eaccelerator.net/source/0.9.5.2/eaccelerator-0.9.5.2.tar.bz2
# tar xvfj eaccelerator-0.9.5.2.tar.bz2
# cd eaccelerator-0.9.5.2
# phpize
# ./configure
# make
# make install

Si llegamos hasta el final sin obtener ningun error en la compilación podremos continuar, caso contrario revisen éste howto que da más detalles sobre el proceso Integrating eAccelerator Into PHP5 (Debian Etch).

Ahora debemos de crear el archivo /etc/php5/conf.d/eaccelerator.ini y poner estas líneas dentro de él:

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/var/cache/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

Si copiaron exactamente los mismos valores debemos de crear el directorio /var/cache/eaccelerator y asignarle el usuario del apache como propietario, si uso otro valor aplicar los cambios correspondientes. Entonces procedemos como "root" con los siguientes comandos:

# mkdir -p /var/cache/eaccelerator
# chown www-data:www-data /var/cache/eaccelerator

Ahora para que los cambios tengan efecto y comenzar a utilizar eAccelerator, debemos reiniciar el Apache con éste comando:

# /etc/init.d/apache2 restart

Ahora optimizaremos un poco Apache2, para ello debemos de editar el archivo /etc/apache2/apache2.conf y cambiar/agregar éstas líneas:

<IfModule mpm_prefork_module>
    StartServers          8
    MinSpareServers       5
    MaxSpareServers      20
    ServerLimit         512
    MaxClients          512
    MaxRequestsPerChild 4000
</IfModule>

Para que los cambios tengan efecto debemos de nuevamente reiniciar nuestro Apache con el comando:

# /etc/init.d/apache2 restart

Como toque final debemos de desinstalar todo módulo de PHP que no estemos usando, revise con el comando éste comando qué módulos de PHP tiene instalado:

# dpkg -l | grep php5

Desinstale todo aquello que no éste usando. Luego de que haya terminado de desinstalar los módulos de PHP5 que no éste usando reinicie nuevamente el Apache.

Con los pasos anteriores verá como su WordPress muestra las páginas tan rápido como cualquier otro CMS.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.