Cómo Incrementar la velocidad de tu ecommerce del lado del servidor

Si alguna vez te has preguntado cómo algunas tiendas online consiguen una asombrosa velocidad de carga, en éste artículo podrás aprender la teoría de lo que hace falta para conseguirlo.

Una de mis obsesiones en el desarrollo de ShopinCloud es hacer que las tiendas carguen a una velocidad que no deje indiferente a las personas que conocen éste mundo. El usuario de a pie nunca valorará el trabajo que hay detrás de un motor de ecommerce que cargue rápido, él dá por sentado que la tienda debe cargar rápido. Y si no carga rápido buscará en otra tienda y le habremos causado un efecto negativo y sentirá que hemos dado un mal servicio.

Para los responsables de la gestión de un ecommerce, ya sean técnicos, de perfil marketing, dueños, etc... la velocidad de carga de la tienda online es verdaderamente importante.

Pero, ¿cómo se consigue?

Cada software de ecommerce es un mundo y debe analizarse de forma individual, no obstante la teoría es válida para todos. Yo os hablo desde mi experiencia vivida en el desarrollo de Shopin.

Una plataforma de ecommerce es compleja. Cada página ejecutada requiere de mucho procesamiento y muchos accesos a disco (lectura de archivos y consultas a base de datos). Probablemente, cómo más grande y potente es el software, más consumo de recursos necesita.

Después de muchos años dedicándome a la programación de ecommerce, he descubierto que el aspecto más importante para la velocidad de carga es cachear. Para los que no sabéis que significa cachear lo definiré de una forma sencilla:

Cachear significa guardar en memoria el contenido generado de la ejecución de un proceso. Por ejemplo, guardaríamos en memoria el contenido que se genera al ejecutar el proceso responsable de crear un listado de productos. Si éste proceso tarda en ejecutarse X segundos, ahorraremos tiempo de ejecución si el resultado de dicho proceso  lo cacheamos (es decir, lo guardamos en un archivo) para posteriormente no tener que ejecutarlo de nuevo. Mientras, el acceso a los datos cacheados son infinitamente más rápidos.
El objetivo es ahorrar en ejecución de procesos y utiizar los datos cacheados para cargar más rápido el contenido.

Dicho esto, seguidamente conocerás los tipos de cache existen y que utilizo en ShopinCloud. Pero antes es importante comprender que la técnica de cachear necesita siempre dos elementos fundamentales:

El identificador de la cache que identificará un determinado proceso.
Y el contenido resultante del proceso que se ha ejecutado.
El sistema debe relacionar estos dos elementos para poder preguntar si existe el identificador del proceso cacheado. En el caso de que no exista, el proceso se ejecutará y su resultado se guardará con el nombre del identificador de cache. 

Ordenados de mayor a menor importancia y basándome en mi experiencia, estas son las 3 técnicas de cache que más te ayudarán a incrementar la velocidad de carga de la tienda.

CACHEAR la página completa: Esta técnica es el santo grial de la velocidad de carga. Identificamos la cache con el nombre de la URL de la página y guardamos la página completa con ese identificador. Esta técnica se suele llamar Full Page Cache. Todos los software de ecommerce modernos la tienen, y de ahí aprendí a implementarlo en Shopin.

OPCACHE: Ahorra tener que compilar el codígo PHP cada vez que se carga una página. Me dí cuenta que si el Software de ecommerce contiene una gran cantidad de archivos los accesos a estos archivos producen un enbotellamiente en disco, es como estar parado en una autopista rodeado de muchos coches, siendo los coches los accesos al disco duro. Si tu ecommerce no tiene muchas visitas al mismo tiempo, no será necesario, de lo contrario es un aspecto 100% obligado.

CACHEAR bloques de la tienda:
Veamos un ejemplo. El proceso responsable de cargar el menú principal de la tienda puede consumir muchos recursos y necesitar de mucho tiempo. Cachear éste bloque es fundamental para que en la próxima petición no tenga que ejecutarse. El menú principal es un ejemplo, pero puede aplicarse a cualquier otro bloque. 
Ésta técnica fue la primera que implementé debido a que la arquitectura modular de Shopin pone en bandeja el pensar que se podría cachear el resultado de la ejecución de un módulo. Realmente es la más complicada de las 3 y la menos agradecida. No obstante, cuando no está habilitada se echa de menos.



Con estas 3 técnicas, el ahorra de ejecución de procesos es espectacular. Recomiendo implementarlos encarecidamente. 




El acceso a disco es uno de los grandes enemigos de las visitas simultáneas.

Cuando crees que tu ecommerce es rápido y de repente comienza a incrementar el número de visitas simultáneas, empiezas a sufrir las consecuencias que se producen al tener miles de procesos accediendo a disco. ¿Cuantos accesos a disco se producen en una sola petición a la página de incio de tu tienda online? ¡Muchos! ¡Cientos! incluso ¡miles!. Es una auténtica barbaridad. Imagina que tienes muchas peticiones recurrentes en la tienda, ¿qué sucede? El disco se colapsa, comienza a ir lento y a retrasar la entrega de los datos. Se produce una cola de miles de procesos que quieren leer el disco.

Los discos antiguos tienen un rendimiento muy deficiente. Los discos SSD son fundamentales si el sistema de cache utiliza disco para guardar los elementos cacheados. Si tienes la opción de hacerlo, no dudes en contratar sevidores con disco SSD. No obstante, otra opción y que sin duda es mucho más eficiente es utilizar la memoria RAM para guardar la cache. Todos sabemos que acceder a la RAM es muchisimo más rápido que acceder al disco duro. Y ¿cómo podemos cachear en memoria RAM? Es sencillo, sigue leyendo.

Existen librerías o programas de PHP que ya se encargan de hacer esto y para el desarrollador es completamente transparente la forma de guardar datos cacheados en la RAM. Yo utilizo APCU y Memcached. Las dos estupendas.

Realmente, guardar en memoria RAM es la solución contra los cuellos de botellas producidos por el acceso a disco.