9 de diciembre de 2015

httpd para archivos estáticos

Creando un servidor de archivos estáticos javascript y hojas de estilo.

Requisitos

  • ubuntu 14.04
  • docker
  • cliente svn

Instalación

Código fuente

Crear el directorio de trabajo
$ mkdir -p $HOME/razzek/lab/httpd-gzip
Descargar el codigo fuente
$ cd $HOME/razzek/lab/httpd-gzip
$ svn co https://svn.riouxsvn.com/razzeklabs/trunk/httpd_compress/ .

Configuración

Ejecutar los scripts
$ cd $HOME/razzek/lab/httpd-gzip
$ ./00-config.sh && ./01-content.sh && ./02-run.sh

Validación

Para validar la correcta instalación, ejecutamos el script
$ ./check-compressed-jquery.sh
Cuya salida, genera un renglon como este:
Content-Length: 95957
Al listar el contenido del directorio js:
$ ls -l $HOME/razzek/lab/httpd-gzip/js
Se observa que existen el archivo (y no el archivo jquery-1.11.3.js, que es el que se requirió)
jquery-1.11.3.js.min
Dicho archivo, coincide en tamaño (y contenido) con el archivo recibido por el script. A continuación, se generan los equivalentes comprimidos.
$ ./03-compress.sh
Posteriormente se ejecuta el script, para recuperar el archivo nuevamente
$ ./check-compressed-jquery.sh
Esta consulta genera un renglon como el siguiente
Content-Length: 33139
Que es menor que en la primer consulta. Al consultar nuevamente el directorio js, se puede observar que existe un archivo jquery-1.11.3.js.min.gz, el cual coincide en tamaño con esta consulta

Como funciona

Suponiendo que se solicita el archivo script.js, el servidor, al recibir la petición, valida que el cliente, acepte compresión (Accept-encoding: gzip) y en base a la existencia de alguno archivo determina qué contenido envia.


Estas reglas se encuentran definidas en el archivo
https://svn.riouxsvn.com/razzeklabs/trunk/httpd_compress/compress.conf
Para agregar un nuevo archivo, se requiere agregar a la carpeta js, se siguen los siguientes pasos:
  1. Obtener el archivo original (file.js en este ejemplo)
  2. Opcionalmente, minimizar el archivo (YUI Compressor o Refresh-JS por ejemplo) y renombrarlo como file.js.min
  3. Comprimir con gzip (zopfli puede ser una alternativa), si se tiene el archivo minimizado se comprime solo el minimizado en caso contrario, el original.
  4. Agregar a la carpeta js el archivo original o minimizado y su contraparte comprimida (file.js - file.js.gz o file.js.min - file.js.min.gz)
No es necesario que exista el archivo original, si se encuentra el archivo minimizado.

Ventajas y desventajas

Al enviarse archivos previamente minimizados y/o comprimidos se obtienen las siguientes ventajas
  • Menor uso de CPU, al no requerirse comprimir en cada petición
  • Menor ancho de banda, al enviarse el archivo minimizado y comprimido.
Y desventajas
  • Mayor uso de disco duro
  • Administrar al menos el doble de archivos
  • Manejo de actualizaciones manual (para actualizar un archivo, es necesario borrar los generados)
Necesidad de 

No hay comentarios.:

Publicar un comentario