Con la rápida evolución de los sitios web de simples escaparates de información, a complejos sistemas de administración de contenidos, foros, tiendas en línea y muchas otras elaboradas plataformas.

php7Podemos ver la flexibilidad que el contenido creado de manera dinámica ofrece al crear aplicaciones web. Unos de los lenguajes de programación más usados es PHP, este tiene ya una larga trayectoria como un lenguaje de interpretación o script y es aún uno de los más usados en las plataformas web en el ciberespacio.

Este lenguaje, como lo hemos mencionado, permite crear contenidos dinámicos, lo que lo hace muy flexible para la creación de aplicaciones. Así mismo es un lenguaje que se ejecuta en el servidor, en el equipo que aloja el contenido, a diferencia de lenguajes de interpretación en el cliente, como lo es JavaScript.

A diferencia de PHP, JavaScript es un programa que se carga en el navegador del usuario y se ejecuta en el mismo, lo que hace que los recursos ocupados para la ejecución del programa sean los del equipo del usuario y no lo de los servidor.

Sin embargo, la gran variedad de navegadores y diferentes soportes de JavaScript hacen poco efectivo este lenguaje al querer desplegar programas para los usuarios. Retomando el tema de PHP, los programas diseñados en PHP se ejecutan en el servidor cada ocasión que un usuario visita el sitio, y el contenido se genera en el servidor y se manda al navegador del usuario.

lenguajes-cliente-servidor

Lo cual se podría convertir en un problema cuando la aplicación a ejecutar es un framework de gran complejidad así como si se genera un gran tráfico de visitantes. Lo que significaría ejecutar miles de líneas de código de manera continua consumiendo gran cantidad de los recursos del servidor incluso ponerlo fuera de producción.

Para evitar este tipo de situaciones existen una amplia gama de opciones cada una con ventajas y requerimientos en su implementación. En esta ocasión hablaremos del cache, una de las formas más accesibles para mejorar el desempeño de una aplicación web en PHP.

El cache, es la memoria de acceso rápido de una computadora.

En otras palabras imagina que alguien te pide que hagas la operación

\frac{123\times123}{2}

el elaborar toda la operación para obtener el resultado tomaría tiempo hacerla y llegar a su resultado 3025.8, sin embargo una vez hecha si anotas,

\frac{123\times123}{2}=3025.8

cuando te pidan la misma operación ya no necesitas hacerla de nuevo.

Lo que evita que uses tiempo y esfuerzo en volver a hacer la operación, ya que la tienes registrada.

Así es como funciona el cache, básicamente permite que una operación que se ejecuta una vez, almacena el resultado en memoria y en lugar realizar la operación de nuevo sólo necesita entregar el resultado a la operación previamente realizada.

Esto mejora notablemente el desempeño y ahorro de recursos en el lado del servidor.

En el caso de PHP, tenemos diferentes opciones, en esta ocasión hablaremos de dos, Memcache y Redis.

memcached

Memcached es un sistema distribuido para almacenamiento de cache en memoria, este fue uno de los primeros sistemas de cache diseñados y ampliamente usados por grandes plataformas. Para más información puede ver el artículo en Wikipedia.

memcache

Redis

Por otra parte es un servidor de base de datos en memoria RAM, lo que lo hace muy versátil y con soporte de una amplia cantidad de lenguajes, al estar diseñado como un servidor este puede ser escalado de manera sencilla permitiendo la creación de Clusters Redis, para más información visite.

redis

Redis es un sistema relativamente nuevo, pero su gran desempeño le ha permitido tomar terreno como sistema de implementación de caché.

Mientras que el sistema memcached está disponible como parte del conjunto de PHP lo que le permite ser el sistema más sencillo de implementar en servidores. Redis requiere la instalación por parte del administrador y aun cuando muchas plataformas de alojamiento básico no cuentan con dicho sistema.

Redis, consideramos que es una opción muy viable y sencilla de implementar, mientras esté disponible y desde que usamos esta solución para otro sistema, nos hemos decantado por esta opción con muy buenos resultados.

wp-logoNuestra página web usa WordPress un Sistema de Administración de Contenidos, CMS por sus siglas en inglés (Content Management System), escrito en PHP y una interfaz muy intuitiva para personas nuevas y gracias a su repositorio de Plugins su funcionalidad puede ser fácilmente extendida. Algunas de las razones por las cuales lo usamos.

redis-requisitoLa mayoría de los CMS populares ya cuentan con soporte para Redis, para la mayoría se logra a través de plugins, por lo que también se necesita confirmar que la versión de PHP usada cuenta con soporte de Redis y el servidor tiene instalado el servidor Redis, de esta manera podemos beneficiarnos de este sistema.

Es muy probable que si tiene un servidor web, tenga mas de una página web alojada, por lo que si usa Redis, es necesario que agregue un parámetro que diferencie entre esos diferentes sitios, ya que si usa diferentes sitios en WordPress por omisión estos usan wp_ como diferenciador, y si no se cambian al integrarlos a un servidor Redis, el cache del primer sitio irá a los demás sitios en WordPress, ya que usan el mismo identificador  wp_ .

Por lo que en el archivo wp-config.php, que se encuentra en la raíz de la carpeta de instalación de WordPress en el servidor, necesitamos declarar esta variable para evitar problemas,

define('WP_CACHE_KEY_SALT', 'misitioweb.com');

De esta manera podemos diferenciar de un sitio a otro y no tendremos un error de principiante al usar este sistema de cache.

En nuestra experiencia hemos obtenido reducción de un sitio en tiempo de respuesta de 10 segundos a 2.58 segundos.

Sin embargo también esto está relacionado con el caché de las imágenes y la optimización de las mismas, pero eso lo discutiremos en otra entrada.