Revolution Slider y W3 Total Cache

Me he encontrado con un problema con RevSlider y W3 Total Cache, cuando actualizo un slider no se renueva la caché. La verdad es que no me gusta nada RevSlider, y para colmo no hay ningún action que permita añadir funciones extra, por lo que para poder borrar la caché cuando se actualiza un slider, tengo que meter mano a la acción ajax:

add_action( 'wp_ajax_revslider_ajax_action', 'purge_cache', 1);
function purge_cache() {
  // Me aseguro que sea cuando se actualiza el slider
  if (isset($_POST['client_action']) && $_POST['client_action'] == 'update_slide') {
    // Si está instalado el plugin
    if( class_exists('W3_Plugin_TotalCacheAdmin') ) {
        $plugin_totalcacheadmin = & w3_instance('W3_Plugin_TotalCacheAdmin');
        // Borro toda la caché, seguro que hay un método que borra la página específica
        $plugin_totalcacheadmin->flush_all();
    }
  }
}

Tutorial y librería para caché fragmentado

El caché fragmentado se usa para dividir una página en partes y cachearlas independientemente para así poder reutilizarla en diferentes partes, por ejemplo si se trata de un módulo del sidebar que va en distintas páginas, se puede cachear independientemente y utilizarlo en cada uno de ellas.

La página que referencio explica muy bien el concepto de cache fragmentado y a su vez ofrece una librería que facilita su uso de este tipo de cache.

if (!FragmentCache::beginCache('all_available_products')) {
echo "content to be cached...";
FragmentCache::endCache();
}

Fragment Cache - an introduction / PHP

Vía / PHPDeveloper.org

Diferentes técnicas de cacheado

Otro interesante artículo sobre caché y los distintos modos de poder llevarlo a cabo. Para aquellos que quieran añadir caché a su sistema y ahorrar recursos y no sepan qué hacer, puede venirles muy bien este wiki y el listado de tipos de cache que hay:

  • Caching Proxy Servers
  • Content Delivery Networks
  • Cachear páginas completas
  • Cachear páginas parciales
  • Cabeceras HTTP
  • Memoria compartida (memcache, APC)
  • Cache en la BD

Web application/Caching

Vía / DZone

Hack para mejorar la velocidad de WP-Cache

Interesante hack que permite darle más velocidad al plugin de WP-Cache, para lo cual enviará más datos en la cabecera para que el caché sea más rápido: Content-Length y Cache-Control.
Es curioso que para el primero lo que hace el hack es descomentar líneas del código original que por lo visto estaban comentadas porque daban error con algunas instalaciones de PHP.
Hack WP-Cache for Huge Speed Increase

Agiliza tus páginas mediante htaccess caching

Un artículo extenso y completo que nos muestra como usar dos módulos de Apache para lograr la caché en nuestro servidor. Para ello se necesitan los módulos mod_headers, el cual modifica las cabeceras de las peticiones y respuestas HTTP, y mod_expires

, el cual permite generar las cabeceras HTTP para expiración y control de caché según criterios fijados por el usuario.

Como ejemplos sencillos incluiremos el ejemplo para uso de mod_headers, poniendo un mes de tiempo de caché para imágenes:

<FilesMatch "\.(flv|gif|jpg|jpeg|png|ico|swf)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>

Para el uso de mod_expires tendremos que añadir lo siguiente:

ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpg A2592000

El artículo es mucho más completo que lo que hemos mencionado, sobre todo la discusión que existe referente al uso de expires, por lo que la lectura es bastante recomendable para quien quiera profundizar en el tema.

Speed Up Sites with htaccess Caching

Vía / del.icio.us

Laboratorio: acceder a contenido dinámico de forma estática (caché)

La verdad es que el título puede ser un tanto difícil de entender. Pero explicando que es lo que quiero decir, supongo que será fácil de entender. En este caso se trata totalmente de “laboratorio”, ya que es una idea que se me ha ocurrido y que su implementación puede que no se pueda necesitar, ya que se trataría de un ejemplo muy a la medida. Aunque bien pensado, se trata de una caché.

El problema de acceder a contenido dinámico (sobre todo pasa en Java) es sobrecargar el acceso a un mismo script (o JSP), a parte de que el acceso a contenido estático es mucho más rápido que el acceso a un contenido dinámico. El problema es cuando queremos acceder a contenido dinámico de forma estática.

Imaginemos un mapa tipo Google Maps, tenemos la Tierra totalmente vectorizada y dividimos el mapa en cuadrículas (x e y). Para acceder a una imagen queremos que sea de forma estática para agilizar la carga de la página y no sobrecargar el servidor, pero la imágen no se puede cargar porque no existe, se tiene que crear dinámicamente.

¿Cual es la solución?, controlar la página de error 404, para que cuando no exista la imagen que deseamos la cree y así la próxima vez ya podamos acceder a ella de forma estática.

Para ello tendremos que modificar el fichero .htaccess para que cuando no encuentre la imagen la cree y la devuelva.

ErrorDocument 404 /sentidoweb/imagenes-estaticas/createimage.php

Y tendremos que crear un script PHP para que cree la imagen y la devuelva. En este caso hemos añadido unas condiciones, y es que la imagen tiene que ser png y que tiene que tener el nombre con el siguiente formato (en expresión regular): /\d{1,2}_\d{1,2}\.png/ .

<?php
$url = $_SERVER["REQUEST_URI"];
// Si es una imagen PNG
if (preg_match("/\.png$/", $url)) {
$nombreImagen = substr($url, strrpos($url, "/")+1);
// Si el nombre de la imagen tiene el formato que deseo
if (preg_match("/^\d{1,2}_\d{1,2}\.png$/", $nombreImagen)) {
// Obtengo que imagen tengo que crear
$aux = substr($nombreImagen, 0, strlen($nombreImagen)-4);
$coords = split("_", $aux);
// Creo la imagen
header("Content-type: image/png");
$img = imagecreate(50, 50);
$cFondo = imagecolorallocate($img, 0, 133, 133);
$cTexto = imagecolorallocate($img, 255, 255, 255);
imagestring($img, 1, 5, 5,  '['.$coords[0].', '.$coords[1].']', $cTexto);
imagepng($img, $nombreImagen);
imagepng($img);
}
}
?>

Está claro que esto no funcionaría para nada si el contenido dinámico se actualiza con frecuencia.

Realizar caché mediante PHP

Interesante artículo sobre como cachear nuestras páginas cuando usan la base de datos para almacenar la información. Usar la BD para guardar los datos es bastante útil cuando se quiere modificar la página con facilidad o cuando se quieren usar plantillas.
El caso es que estas páginas no suelen modificarse con frecuencia, por lo que al acceder a ella, se accede a la BD para obtener los mismos datos, generar la página web y mostrarla, cosa que se ha hecho anteriormente. Por eso, este script propone guardar la página en un directorio y acceder a ella cuando el tiempo de creación y el actual no supera un cierto valor.
Para realizar este script, el auto usa las funciones de control de salida que ofrece PHP. Un script fácil de entender y que nos puede ser muy útil.
PhP Caching
Vía / Dzone