Para los que queráis ver los artículos anteriores de ésta serie:
En este capítulo no apuntaremos muy alto, pero introduciremos una “nueva” herramienta (para los que no la conozcáis, claro está) y seguiremos en la misma línea de intentar reducir el peso de la página. En capítulos posteriores introduciremos otras técnicas complementarias que ya no consistirán en “aligerar” la página.
Texto plano : CSS y JavaScript
A medida que hacemos que nuestra página web sea más y más dinámica y vayamos refinando su estilo los archivos JS y CSS de nuestro sitio crecerán hasta llegar a alcanzar tamaños considerables para tratarse de simples archivos de texto plano. Podéis ver por ejemplo el tamaño de jQuery o Prototype, las dos librerías son bastante pesadas en cuanto a tamaño.
Ciertos programadores de Yahoo decidieron entonces crear una herramienta, el YUI Compressor . Podéis obtenerla desde su página oficial o bien, si estáis usando Debian o Ubuntu (supongo que también estará disponible en Fedora y otras distros) podéis instalarla mediante el instalador apt:
apt-get install yui-compressor
Esta herramienta nos servirá para eliminar todo aquello cuanto sea innecesario en nuestras hojas de estilo y ficheros de script. El problema es que lo hará eliminando espacios, puntos y coma donde pueda, saltos de línea… incluso a veces modificando los nombres de algunas variables internas en funciones para acortarlos. No hará lo mismo con los nombres de las funciones ya que si lo hiciera el fichero de script se tornaría inútil ¡Ni una de las llamadas realizadas desde la página funcionaría!
La forma de hacerlo funcionar (funciona sobre la línea de comandos) es bien sencilla:
yui-compressor fichero_que_quiero_minimizar.css -o nombre_de_nuevo_fichero_minimizado.css
Lo mismo se aplica a los ficheros con extensión .js , aunque yui-compressor dispone de algunas opciones específicas más para esta extensión. Si queréis conocer las opciones de yui-compressor solo tenéis que llamarlo con la opción –help .
Importante: YUI-Compressor no se lleva bien con el CSS no estándar, es decir, si os da por probar características aun experimentales como los gradientes de Firefox, Chrome, Safari u Opera entonces tendréis que ir con más cuidado para evitar que YUI-Compressor os estropee vuestros CSS .
Quiero destacar que, dado que probablemente vayáis a estar desarrollando la web al mismo tiempo que ésta ya esté online y siendo visitada por surferos de la red, el tener código ofuscado por esta herramienta os pueda parecer sumamente molesto aunque os permita reducir el tiempo de envío de los ficheros. Lo que recomiendo en estos casos es no subir directamente lo que tengáis en vuestro directorio de trabajo al servidor sino que tengáis un directorio intermedio donde haya las versiones optimizadas de dichos archivos. Una opción para hacer llevadero este sistema es que os hagáis un script que os sincronice los dos directorios (en una sola dirección, claro) a la vez que os comprime las hojas de estilo y los ficheros de script con yui-compressor de forma automatizada. Al principio puede parecer un rollo hacerse el script, pero a la larga simplifica muchísimo el trabajo y ahorra más tiempo aun.
Imágenes: paletas indexadas
En el capítulo anterior ya hice algunas referencias a las imágenes con paletas indexadas ¿pero qué son exactamente? Intentaré no extenderme con la explicación mucho porque esto es más propio del estudio de gráficos por computador que del diseño de páginas web. Para los que ya sepáis a qué me refiero podéis saltar directamente a la parte práctica, donde comento el caso práctico con GIMP.
Los ordenadores actuales acostumbran a representar internamente los colores mediante tres números (generalmente enteros), uno para cada color luz “básico”. Éstos colores luz básicos son el rojo, el verde y el azul, y por eso llamamos al esquema de representación mencionado RGB (Red Green Blue). Combinando dichos colores podemos obtener “todos” los demás ( en realidad es falso, pero a nivel perceptivo podríamos decir que es cierto ). Normalmente se usan números del 0 al 255, siendo el 0 el número que indica intensidad mínima y el 255 la máxima. Así el color blanco estaría representado por la terna (255, 255, 255). Cada uno de estos números cabe en un byte, por lo que para representar el color de un solo píxel necesitamos 3 bytes.
El sistema mencionado conlleva un problema: las imágenes acaban pesando demasiado. Por eso mismo se inventaron formatos de imágen en los que se aplican ciertas técnicas de compresión, como JPEG, GIF o PNG. JPEG aplica compresión “con pérdida”, lo que significa que se pierden ciertos detalles poco importantes de la imagen a cambio de una reducción drástica en su tamaño, mientras que en otros formatos se usa compresión “sin pérdida”. No “perderé el tiempo” explicándoos como funcionan los sistemas de compresión (en general) porque necesitaría introducir la Teoría de la información y entonces no acabaríamos nunca.
Pero sí os explicaré un sistema de compresión de imágenes muy básico y fácil de entender, el indexado de colores. En el caso de tener una imagen con una cantidad relativamente pequeña de colores nos podemos plantear una forma sencilla para reducir su tamaño: hacer una lista de colores de forma que para cada uno haya un número determinado por su posición en la lista. Si la lista tiene 255 o menos colores podremos representar cada pixel con un solo byte en vez de con 3, pues sólo tendremos que usar un número y no 3 para indicar su color. Si tuviéramos 16535 (256×256-1) o menos colores en nuestra lista, podríamos usar 2 bytes en vez de 3 para representar cada píxel, la reducción no es tanta en este caso, pero sigue siendo considerable. ¿Y solo se puede reducir en un factor de 3 el tamaño de la imagen? No, de hecho podemos reducir aun más el tamaño de la imagen, pero en este caso la lista de colores debería ser más pequeña. Por ejemplo, si tuvieramos 127 o menos colores podríamos reducir en un factor de 6 el tamaño de la imagen (descontando el pequeño añadido en tamaño debido a la lista de colores), si tuvieramos 63 o menos colores podríamos reducir en un factor de 12 el tamaño de la imágen, y así. Supongo que podéis ver fácilmente el patrón.
Práctica
Es interesante saber como reducir el tamaño de nuestras imágenes sin perder demasiada calidad. Una forma sería guardar nuestras imágenes en formato JPEG con una calidad inferior o igual al 85%. En cualquier editor gráfico que se precie podréis seleccionar la calidad de salida del fichero JPEG si hacéis “Guardar como…” o “Exportar”.
El problema de la opción JPEG es que sirve más para imágenes grandes o fotografías que para elementos de la web, en los que probablemente querremos más nitidez. Por suerte, aunque queramos más nitidez también se dará el caso de que usamos menos colores y las imágenes serán más pequeñas, en este caso es aconsejable usar imágenes con paletas indexadas. Indicaré como hacerlo en GIMP, hace tiempo que no toco Photoshop y no sabría deciros qué pasos exactos deberéis seguir los que lo uséis, pero seguramente será también bastante intuitivo.
En primer lugar debéis acceder al menú de Imagen e ir a seleccionar un modo:
Una vez ahí podréis seleccionar cuantos colores queréis que haya en la paleta. A veces se dará el caso de que la imagen tenga más de 255 colores (en este caso las paletas pueden tener solo 255 colores, aunque en la teoría se pudieran tener paletas más grandes), en dicho caso podéis optar por perder algo de calidad eliminando algunos colores (el editor intentará aproximarlos lo mejor posible con los colores de la paleta) o renunciar al indexado de colores.
Después solo tendréis que guardar la imágen (recomiendo el formato PNG por encima de GIF), si usáis las nuevas versiones de Gimp tendréis que usar la opción Exportar y no Guardar, pues ésta se ha dejado solo para el formato nativo de Gimp, XCF .
Consejo final (fuera de contexto)
Lo que escribiré ahora debería haber estado en capítulos anteriores, pero me despisté. Aunque sea recomendable reducir la cantidad de ficheros que deben ser cargados para visualizar la página, hay algunas excepciones que vale la pena mencionar. Tal es el caso de las imágenes redimensionadas, no conviene redimensionar una imagen en tiempo de renderizado dentro de la web, es decir, no es conveniente ajustas las medidas de una imagen a otras que no sean las suyas. El tiempo que tarda el ordenador del visitante en redimensionar hace que su experiencia pueda verse mermada, es preferible tener distintas versiones de la imagen adaptadas a los tamaños pertinentes. Es usual que las redimensiones se den cuando se quieren hacer thumbnails, y también es usual que cuando se está visualizando el thumbnail no se esté visualizando simultáneamente la imagen a tamaño real, por lo que (generalmente) no supondrá un problema en cuanto aumento de peticiones HTTP tener versiones específicas de la imagen para cada tamaño.
Espero que os haya resultado útil, un saludo
.




