Posts Tagged ‘comprimir’

h1

Mejorando el rendimiento : Comprimir los componentes

31 enero 2009

Se puede reducir notablemente el tiempo de respuesta y peticiones HTTP a través de la red reduciendo el tamaño de los elementos, aunque evidentemente hayan más factores como el ancho de banda, la proximidad, los puntos de intercambio y demás, que son independientes de los desarrolladores.

La compresión de ficheros se ha utilizado durante décadas para mejorar la transferencia en emails, FTP desde la versión HTTP/1.1 los navegadores soportan cla compresión de ficheros. Hay dos formatos el delate y gzip, siendo el segundo el más popular y óptimo de los dos. Se pueden comprimir los documentos html, las css, los scripts, y aunque no se suele hacer, los ficheros XML y JSON, las imágenes y los PDF, ya están comprimidos por lo cual no es necesario hacerlo de nuevo, ya que supone un coste de los recursos de la CPU innecesario. Hay que tener en cuenta el tamaño de los ficheros a comprimir sobre todo, ya que, a lo mejor el coste de descomprimir sea más alto que el coste en la transferencia del mismo. Normalmente se comprimen los ficheros mayores de 1 ó 2 Ks, lo cual se puede controlar a través de la directiva mod_gzip_minimun_file_size.

Existe un problema cuando se usan los proxies, ya que, si se hace una petición desde un navegador que permite la compresión y las sucesivas desde uno que no lo permite el segundo no podrá ver el contenido, si el orden de las peticiones es al revés, no es tan grave porque nadie deja de ver el contenido. Para solucionar este problema se debe conseguir que el proxy varíe las repuestas a las peticiones ya que la compresión depende de cada uno de los navegadores. Podemos cachear varias respuestas, es decir, tener una respuesta cacheada con los componentes comprimidos y otra con los componentes normales. Esto se hace mediante la directiva Vary: Accept-Encoding.

Otro problema pueden ser los navegadores y sus versiones,  ya que algunas permiten la compresión y otros que no, por lo cual al vary se le añade User-Agent, para que almacene una respuesta cacheada dependiendo del navegador y la versión.