Prestashop, inodes y todo lo demás

225.000 inodos. Esta es la cantidad (mínima) que se puede llegar a comer la opción de smarty caché en Prestashop. Pero empecemos desde el principio…

No hace mucho volví a las tiendas virtuales (las había dejado bastante de lado un buen tiempo) y esta vez, como osCommerce siento que se quedó obsoleto (y no solo por la maquetación en tablas, que también, si no por la tortura china que era ponerle las contribuciones -así se llamaban los plugins-) y que perdió totalmente el rumbo en el momento que sacaron la versión 3 y después la 2.3, no se podía actualizar de forma cómoda, etc, etc etc.

Plantilla de PrestashopPues tras trastear un poco con WooCommerce (en este mismo blog, para tiendas chiquitas en blogs ya funcionando es una muy buena opción), Open Cart (muy bonito pero no me gusta su estructura interna), Zencart y Prestashop (esto 2 últimos por cierto, son, junto a Magento y seguro que alguno mas, los “hijos” de osCommerce) opté por quedarme con Prestashop. Por qué? Pues la verdad, por nada en especial. Lo instalé, lo probé y me gustó. Aunque después le haya detectado alguna falla (qué software no lo tiene) en lineas generales me gusta.

Pues el caso es que el proyecto era una tienda con bastantes artículos. Y con bastantes me refiero a unos 15.000. Y es ahí donde el tema de los inodes empieza a ser importante…

Pero qué cara## son los inodes?

Pues un inode es una estructura de datos que contiene las características de un archivo regular, directorio, o cualquier otro objeto que pueda contener el sistema de ficheros, y es característico de los sistemas basados en UNIX como Linux (el más habitual en alojamiento web). O sea, cualquier cosa que grabas en tu hosting, ya sea un fichero, directorio o email añade un inode. Un fichero metido en una carpeta, suma 2 inodes. Si está en una carpeta dentro de otra carpeta, suma 3, y así.

Pues la gracia es que los alojamientos compartidos ilimitados que se contratan hoy en día, si bien tienen ilimitado el espacio en disco, tienen ilimitado el ancho de banda, e incluso tienen ilimitados los emails y las bases de datos… lo que no tienen ilimitados son los inodes. En empresas serias (como banahosting) el límite está entre 500.000 e incluso 1.000.000, que suele ser una cantidad más que aceptable para un uso normal, incluso para tener un buen puñado de blogs o alguna tiendecita… si se configuran bien. Pero hay otras que te limitan a 100.000 (algunas tienen el soft limit -donde te avisan- a 100.000 y el hard limit -donde te tumban la web- a 200.000) y eso si que me parece limitar bastante.

Y qué pasa con Prestashop y el Smarty Caché?

Bueno, empecemos que el problema no es Prestashop en sí, ya que ocurre igual con cualquier otro tipo de tienda, CMS… que se configure para cachear los elementos. Porque el problema viene por ahí, por las extensiones de caché.

PrestashopCómo funcionan estas extensiones? Pues generalmente hace muchas cosas pero para entender su uso (los pros y los contras) es importante saber cómo funciona una web dinámica. A estas alturas supongo que ya todos los sabréis, pero un WordPress, un Prestashop, un Joomla… cualquier web dinámica, no tiene x ficheros HTML cada uno con una de las páginas que aparecen durante tu visita a dicha web, si no que hay unas plantillas y los contenidos están en la base de datos, y cuando se pide al servidor una determinada combinación de ellos (cuando tecleas una URL o sigues un enlace), la página se crea en ese momento, juntando las piezas de lo que has pedido. Es muy potente (por eso la inmensa mayoría de las webs funcionan así, desde el blog de cocina de la vecina del 4 primera a Facebook) pero también precisa de muchos recursos, y es ahí donde entra en juego la caché.

Cuando un plugin (extensión, modulo, llamadlo como queráis) de caché entra en juego, lo que hace es una copia en HTML plano de cada combinación de plantilla-datos que se solicita. No se hacen del tirón claro, se hacen la primera vez que se visita dicha combinación, y las demás veces lo que se muestra es la copia estática (salvo que algo haya cambiado, entonces se genera una nueva copia). De esta manera se economizan recursos acelerando la carga de la web (también nos protege en cierta medida de los ataques DDOS, pero ese es otro tema). Pero esta aceleración tiene un precio: espacio en disco e inodes.
web cacheImagino que ya veréis cual es el problema… si por cada pagina que muestra un articulo de la tienda, mas por cada listado de categoría, mas por cada vista detallada, etc et etc, se genera una copia, ademas de las 3 o 4 copias extra (a distintos tamaños) que se generan por cada imagen (y cada articulo debe tener al menos 1 imagen si aspiramos a vender algo), mas la propia estructura de la carpeta donde se guarda todo esto… hacemos cuentas? 15.000 artículos = 15.000 paginas cacheadas, pero cada articulo en Prestashop (en la plantilla por defecto) se puede mostrar de 2 maneras distintas, van 30.000. Mas… pongamos 5.000 mas de listados de categorías (es un número a bulto, pero teniendo 15.0000 artículos es normal tener un buen puñado de categorías, y cada categoría tiene 2 formas de mostrarse y 4 o 5 paginados distintos, vamos, que 5.000 me parece poco), van 32.000. Mas 15.000 imágenes x 4 (la original y una media de 3 copias pequeñas), van 92.000.

Mas la caché de las búsquedas, los tags, las paginas de información y la versión móvil de todo esto… Una pu## barbaridad de ficheros. Tanto es así que en 1 mes con la tienda funcionando, mi hosting llegó al limite y tuve que entrar por FTP para borrarlo todo (borrar la caché! no la tienda) porque ni siquiera podía entrar a la administración. Y eso que solamente había activado la caché de Smarty, que es la de las plantillas, no activé la caché total (la caché total guarda también copias de las imágenes y de yo qué se cuantas cosas más).

Moraleja? Pues que si vas a montar una tienda grande, necesitarás un dedicado (ahí no suele haber limite de inodes). Y si la tienda es pequeña o no hay presupuesto para dedicados (lo mas normal al principio de cualquier proyecto) deja desactivada la caché y acelera el sitio optimizando el resto de los elementos (imágenes a tamaño correcto, javascript comprimido, etc etc etc). Ah! y testea primero la velocidad de tu hosting. Por ejemplo, en banahosting no estoy notando que la web vaya lenta (aunque es verdad que al ser un proyecto recién iniciado tampoco tiene tanto trafico) pero sí es cierto que en otros servidores si no hacía el truco de la caché, hasta un simple WordPress con el theme por defecto iba lento.

Deja un comentario

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