performance

Red Moon
Un sistema de archivos organizado es más eficiente y permite realizar búsquedas más rápidas y sencillas. Un servidor web consume muchos recursos para encontrar un fichero en una carpeta con 1.000.000 de archivos, sin embargo si en la carpeta hay 1.000 subcarpetas con 1.000 ficheros cada uno, el acceso será mucho más rápido. El número máximo de ficheros por carpeta para obtener la mayor eficiencia dependerá del hardware disponible en el servidor, aunque en general no conviene que sobrepase los 10.000 elementos. La carpeta files Drupal dispone de un sistema público de archivos donde los módulos pueden guardar todos los ficheros necesarios. Para configurarlo estableceremos en admin/config/media/file-system la ruta de la carpeta que funcionará como raíz. El valor por defecto para esta ruta es sites/default/files, aunque puede configurarse donde más nos interese. Hacer que la carpeta files tenga una estructura de árbol eficiente es muy sencillo, ya que los módulos que utilizan el sistema público de archivos disponen de opciones de configuración para crear subcarpetas donde almacenar los archivos. La mayoría de los ficheros que se almacenan suelen ser imágenes o documentos que los usuarios cargan en los campos de los tipos de contenido cuando se crean los nodos, por lo que la ruta final donde se guardará el archivo dependerá de la configuración que se haya establecido en cada campo. Algunos de los módulos incluidos en el core de drupal que permiten la creación de campos para subir archivos son Field, File e Image, en estos campos se puede configurar una ruta dentro de la carpeta files para poder tener separados los archivos de cada uno. File (Field) Paths te ayuda a organizar A veces no es suficiente con tener una carpeta por campo, por lo que es necesario crear también una estructura de subcarpetas con más profundidad de modo que no se sobrepase el número máximo de ficheros por carpeta que hayamos establecido como límite. La herramienta perfecta para crear esta estructura es el módulo File (Field) Paths, que permite configurar un patrón para la ruta de almacenaje del archivo utilizando valores del nodo mediante el módulo Token. Una vez instalado el módulo aparecen nuevas opciones en la configuración de cada campo. La más interesante es el campo “ruta de archivos”, donde podemos escribir un patrón que se usará para generar la ruta final en la que se almacenará el fichero. Un ejemplo de patrón podría ser: main-image/[node:created:custom:Y]/[node:created:custom:m]/[node:created:custom:d]/ Con este patrón un archivo llamado example.jpg cargado en un campo llamado “Main Image” de un nodo creado el 25 de Junio de 2016 se guardaría en la carpeta “sites/default/files/main-image/2016/06/25/example.jpg” El módulo también ofrece otras opciones adicionales como eliminar las barras (/) o transliterar y limpiar los valores de los tokens para que hacer que las rutas sean amigables y uniformes. Si lo hubiera sabido antes… En muchas ocasiones el sistema se ha creado sin tener en cuenta todos estos consejos y por ello todos los ficheros se encuentran en la raíz de la carpeta files, poco a poco esa carpeta se va llenando y llega un momento en el que se produce un “cuello de botella” en la gestión del sistema de archivos por parte del servidor condicionando el rendimiento general de la web. Llegados a este punto se puede realizar la instalación y configuración del módulo File (Field) Paths, que además nos proporciona varias opciones muy útiles para evitar problemas y facilitar la gestión de los ficheros existentes: Create redirect. Crea automáticamente una redirección entre el fichero antiguo y el nuevo. Retroactive update. El sistema moverá todos los ficheros existentes a la ruta que debería tener en función del patrón establecido en el campo. Active updating. El sistema no moverá los archivos existentes en el momento de guardar el campo, sino que cada vez que un nodo se edite y guarde, el sistema moverá el fichero a su nueva ubicación si es necesario. Es importante tener en cuenta que la ubicación física de los archivos existentes se va a modificar, por lo que estas opciones hay que usarlas con precaución para evitar la aparición de enlaces rotos. Si el número de ficheros existentes es muy grande, no es recomendable marcar la opción "Retroactive update", ya que puede lanzar un proceso que tarde demasiado y no sea capaz de finalizar en el navegador. En estos casos la configuración recomendada es marcar "Active updating" y posteriormente realizar un proceso de actualización controlada de los nodos cuyas imágenes queramos reorganizar. Este proceso se puede hacer con un pequeño módulo que cree una cola de proceso en la que cada nodo se cargue con node_load() y se guarde con node_save(), al guardar el nodo todas las imágenes que tenga en sus campos serán movidas automáticamente a su nueva ubicación. Mejor prevenir que curar Tener que reorganizar imágenes de un sitio web ya en funcionamiento es una potencial fuente de problemas, sin embargo, en las primeras fases del desarrollo es muy rápido y fácil crear una estructura organizada para la carpeta files, no retardará el proyecto y disponer de un sistema así es mucho más ventajoso aunque el número de archivos de la web crezca indefinidamente. Siempre compensará dedicar unos minutos de desarrollo a este asunto, ya que por muy poco tiempo obtenemos grandes beneficios a medio y largo plazo. En el inicio de un proyecto web casi nunca se sabe cómo va a evolucionar, pasado el tiempo puede desaparecer, mantenerse o crecer hasta convertirse en un proyecto con millones de usuarios, por lo que es importante realizar un diseño y desarrollo que permita ser escalable tanto como sea necesario.   Fotografía principal: Anders Jilden