
Desde hace tiempo, este blog está superando los 1000 visitantes diarios y las 2300 páginas vistas. Eso empieza a plantearme algunos problemas, sobre todo teniendo en cuenta la cantidad de recursos que consume el wordpress y que a mà me gusta mucho optimizar el rendimiento del servidor.
Es por eso que he estado buscando alguna forma de añadir cache de páginas al blog. Las opciones que he encontrado han sido:
Pero ninguno de los dos me ha convencido. Lo que yo busco es algo que sea muy eficiente pero a la vez muy simple. Ni siquiera necesito interfaz de administración.
Y es ahà cuando me he dado cuenta de lo evidente… Tanto tiempo usando el Zend Framework y su cache de páginas y no se me habÃa ocurrido aplicarlo al wordpress :P
La instalación es muy sencilla, simplemente he bajado el Zend Framework y he copiado la carpeta «library» a mi directorio raÃz de wordpress. Después he creado una carpeta donde irán las páginas cacheadas (en mi caso ha sido: wp-content/cache) que debe tener permiso de escritura (0777).
Y ahora viene lo importante. Hemos de modificar el index.php de wordpress para añadir el código que nos permite usar la cache. Este es ahora mi index.php:
<?php
set_include_path ('library' . PATH_SEPARATOR . get_include_path ());
require_once ‘Zend/Cache.php’;
$frontendOptions = array(
‘lifetime’ => 3600*6,
‘debug_header’ => false, // for debugging
‘default_options’ => array(
‘cache_with_session_variables’ => true,
‘cache_with_cookie_variables’ => true
),
‘regexps’ => array(
‘^/$’ => array(‘cache’ => false),
‘^/2007/’ => array(‘cache’ => true),
‘^/category/’ => array(‘cache’ => true),
‘^/2008/’ => array(‘cache’ => true)
)
);
$backendOptions = array(
/* cache_dir debe ser una ruta absoluta por temas del ob_start */
‘cache_dir’ => dirname($_SERVER[‘SCRIPT_FILENAME’]) . ‘/wp-content/cache/’
);
// getting a Zend_Cache_Frontend_Page object
$cache = Zend_Cache::factory(‘Page’, ‘File’, $frontendOptions, $backendOptions);
$cache->start();
/* Short and sweet */
define(‘WP_USE_THEMES’, true);
require(‘./wp-blog-header.php’);
?>
Podeis encontrar documentación sobre el sistema de cache del Zend Framework aquÃ. Pero básicamente lo que hago es cachear todos los posts y los listados de las categorÃas durante 6 horas (3600 segundos * 6). De esta forma, durante esas 6 horas, si se accede a alguno de los posts del blog o a alguna categorÃa, se tomará la copia de cache y se evitará el pasar por todo el codigo de wordpress, incluida la conexión a la base de datos.
Lo malo de esta solución es que cuando vuelva a actualizar wordpress, tendré que acordarme de no pisar el index.php.