PHP: Comprimir la salida del servidor para ahorrar ancho de banda
23 de Julio de 2008 en Programación, PHP
Lecturas: 2,448
alprazolam pills buy alprazolam without prescription acomplia cheap generic synthroid cheap generic lasix xanax cheap viagra lorazepam generic lowest price synthroid cialis online discount alprazolam prozac pills soma without a prescription order diazepam cheapest doxycycline prices buy tramadol cheap online viagra price of cialis accutane online zithromax purchase lorazepam xanax prices discount clomid prozac online cheapest prozac prices discount prozac buy tramadol online synthroid no prescription levitra sale cialis discount cheap generic alprazolam xanax generic cheapest flagyl prices buy lasix bactrim online stores cheap acomplia tablets zoloft online stores cheapest phentermine acomplia online cheap buy cheap bactrim online viagra cheap zoloft discount flagyl sale generic zithromax cheap doxycycline online generic alprazolam buy cheap diazepam online buy cheap synthroid online propecia online cheap purchase flagyl propecia generic cialis sale cheap lasix tablets levitra for sale discount valium price of accutane cheap phentermine valium pills lorazepam online clomid sale phentermine generic levitra no prescription nexium prices buy generic clomid soma online stores order clomid online pharmacy diazepam plavix generic tramadol online zoloft for sale cheapest lasix order zoloft buy lorazepam cheap buy doxycycline zithromax prescription cheap nexium tablets pharmacy accutane cheapest zithromax buy cheap prozac online lowest price propecia lasix online stores cheapest viagra clomid pharmacy buy flagyl diazepam without a prescription zithromax online cheapest prozac order viagra online alprazolam online stores tramadol cheap alprazolam online prozac generic cheap lorazepam cheap prozac tablets buy alprazolam cheap order cialis online order propecia online cheapest cialis prices diazepam online cheapest phentermine prices pharmacy levitra buy flagyl online cheap generic levitra buy diazepam cheap order plavix soma price of diazepam cheapest bactrim diazepam pharmacy bactrim sale propecia discount pharmacy nexium cheap lasix online xanax where to buy phentermine purchase viagra online lowest price tramadol buy zoloft lowest price zoloft alprazolam pharmacy price of levitra propecia prices cialis without prescription accutane online cheap buy plavix diazepam prescription purchase tramadol online clomid without a prescription zithromax cheap levitra phentermine prices doxycycline generic valium generic xanax discount viagra generic purchase phentermine order viagra cheapest flagyl soma prescription buy acomplia cheap online nexium buy diazepam online prozac online cheap bactrim no prescription clomid generic cheap valium online accutane pharmacy generic lasix buy cheap doxycycline online buy propecia cheapest plavix prices order alprazolam online purchase soma prozac lasix online cheap purchase acomplia cheap viagra online plavix pills valium pharmacy alprazolam for sale where to buy acomplia cheap lorazepam tablets lowest price valium purchase zithromax buy zithromax without prescription order soma doxycycline online cheap plavix discount cheap clomid tablets price of bactrim buy clomid without prescription purchase viagra bactrim pharmacy order zithromax online order synthroid valium sale soma online cheapest zithromax prices buy soma cheap cheapest lorazepam cialis no prescription online diazepam cheapest nexium order bactrim online cheapest clomid buy cheap acomplia buy cialis purchase zithromax online pharmacy lasix order tramadol online buy accutane buy clomid price of zoloft buy prozac without prescription online phentermine cheap doxycycline buy valium without prescription lorazepam discount flagyl purchase zoloft cheap prozac online cheap synthroid online price of prozac zoloft without prescription buy cheap nexium propecia online buy generic phentermine buy generic cialis online synthroid cheap valium tablets cheapest synthroid prices nexium prescription lasix pills alprazolam without prescription online tramadol lowest price cialis buy levitra zithromax online stores acomplia for sale accutane prices price of alprazolam cheap soma online levitra generic discount soma purchase nexium tramadol discount phentermine without prescription purchase bactrim buy cheap accutane online acomplia without a prescription buy generic lasix doxycycline prescription doxycycline prices cheap zoloft tablets online plavix where to buy alprazolam diazepam online stores price of nexium cheap flagyl tablets propecia pills buy generic valium order nexium online generic phentermine cheap valium buy cheap flagyl prozac pharmacy purchase lasix online levitra online buy prozac alprazolam no prescription lasix prescription buy cheap bactrim pharmacy soma lowest price phentermine pharmacy valium where to buy lasix lowest price zithromax viagra sale purchase levitra cheap soma valium for sale purchase doxycycline online price of zithromax discount zoloft accutane without prescription buy cheap valium soma cheap purchase valium cheapest alprazolam levitra prescription buy tramadol without prescription buy generic acomplia purchase flagyl online order lasix valium without prescription flagyl online cheap zoloft online buy generic zoloft buy bactrim without prescription generic clomid cheap synthroid tablets purchase alprazolam bactrim discount cheap generic doxycycline buy zoloft without prescription lowest price soma cheap bactrim online buy viagra online cialis online cheap online zoloft purchase lasix buy acomplia online cheap viagra tablets cheap levitra tablets cheapest clomid prices buy flagyl cheap buy xanax cheapest acomplia buy cheap levitra online synthroid generic propecia without a prescription cheap generic soma xanax online cheap cheap propecia cheapest nexium prices cheapest soma price of doxycycline where to buy levitra lorazepam prescription online acomplia zithromax for sale price of clomid pharmacy doxycycline purchase cialis online order zithromax cheap levitra lorazepam pills tramadol generic buy acomplia cheapest tramadol cheap generic cialis pharmacy propecia acomplia prescription lowest price accutane zoloft cheap plavix tablets zoloft pills cheap flagyl buy plavix without prescription where to buy viagra buy generic prozac cheap diazepam cheapest lorazepam prices discount levitra price of lorazepam clomid online stores phentermine online pharmacy viagra order bactrim viagra without a prescription cheapest synthroid cheap zithromax online purchase cialis propecia prescription online soma buy cheap lasix online accutane cheap price of tramadol diazepam cheap cheap clomid online where to buy prozac buy phentermine online cheapest diazepam purchase phentermine online clomid for sale soma sale generic acomplia levitra online stores cheapest acomplia prices viagra no prescription nexium pills generic plavix buy cheap lorazepam online nexium without prescription propecia for sale cheap generic zoloft doxycycline online buy plavix online doxycycline sale order phentermine lasix online buy cheap cialis online cheap generic diazepam where to buy diazepam price of propecia online cialis flagyl prices buy generic synthroid acomplia online purchase bactrim online cheap xanax pharmacy phentermine discount propecia nexium online phentermine without a prescription cheapest zoloft purchase propecia online buy zoloft online acomplia prices buy generic soma price of plavix buy lasix online buy doxycycline online bactrim cheap pharmacy zoloft price of phentermine prozac without prescription generic nexium buy cheap nexium online tramadol cheap cheap acomplia online cheap xanax tablets phentermine for sale discount lorazepam nexium no prescription alprazolam purchase plavix online flagyl no prescription generic viagra buy cheap diazepam prozac without a prescription discount diazepam buy accutane without prescription buy soma online buy zithromax cheap buy lasix cheap cheapest alprazolam prices clomid without prescription flagyl prescription order prozac cheap nexium cialis cheap generic bactrim buy cheap viagra valium without a prescription valium online cheap order acomplia online levitra zoloft generic lasix without a prescription purchase doxycycline buy viagra bactrim without prescription levitra prices plavix for sale cheap plavix buy cialis online buy prozac online nexium sale where to buy soma nexium without a prescription lasix for sale order tramadol buy plavix cheap buy bactrim online order soma online price of acomplia buy alprazolam prozac prescription lasix without prescription purchase synthroid online buy generic doxycycline lorazepam without a prescription price of flagyl cheap levitra online prozac prices order flagyl online generic zoloft buy nexium online alprazolam prices buy cheap levitra nexium order alprazolam plavix cheap diazepam without prescription buy cheap flagyl online buy generic zithromax online alprazolam price of lasix buy cheap soma xanax prescription zoloft online alprazolam without a prescription order clomid purchase prozac online buy accutane cheap phentermine online cheap doxycycline no prescription plavix without prescription phentermine cheap diazepam for sale zithromax discount buy phentermine cheap synthroid without a prescription valium xanax without prescription discount synthroid phentermine prescription online clomid accutane online online prozac generic diazepam valium no prescription cheapest accutane cheap alprazolam buy cheap zoloft online prozac cheap levitra discount pharmacy flagyl clomid cialis cheap doxycycline without a prescription discount cialis discount viagra soma generic xanax nexium online stores buy soma cheap doxycycline tablets xanax sale nexium pharmacy cheap cialis online cheapest viagra prices bactrim without a prescription lowest price plavix cheap generic tramadol flagyl pills synthroid online cheap tramadol for sale zoloft online cheap cheap diazepam online buy levitra cheap buy generic flagyl buy acomplia without prescription purchase xanax online buy clomid cheap cheapest xanax prices bactrim generic cheap prozac doxycycline without prescription purchase synthroid lowest price flagyl nexium generic buy cheap clomid cialis prescription buy cheap soma online online lasix lorazepam cheap acomplia where to buy nexium where to buy xanax propecia without prescription xanax for sale order valium lowest price xanax order synthroid online buy alprazolam online where to buy synthroid zoloft pharmacy order lorazepam online propecia online stores cheap zithromax doxycycline for sale xanax pharmacy generic flagyl clomid prescription acomplia without prescription buy cheap propecia synthroid sale cheap phentermine tablets buy diazepam plavix pharmacy generic xanax order acomplia online doxycycline cheap buy clomid online soma for sale bactrim discount nexium prozac discount soma without prescription doxycycline pills purchase alprazolam online purchase diazepam bactrim online cheap alprazolam online cheap where to buy plavix plavix online prozac sale bactrim online buy diazepam without prescription zithromax without a prescription price of viagra xanax online soma no prescription cheapest bactrim prices order levitra online buy doxycycline cheap lasix discount prozac no prescription buy lasix without prescription alprazolam prescription flagyl for sale alprazolam sale discount tramadol buy generic alprazolam buy propecia online prozac online stores cheap generic accutane where to buy zoloft purchase diazepam online lowest price bactrim acomplia pharmacy buy cheap zithromax buy synthroid bactrim for sale tramadol no prescription lorazepam without prescription where to buy propecia synthroid for sale cheap cialis tablets cheapest tramadol prices diazepam generic clomid no prescription generic prozac generic tramadol alprazolam discount pharmacy synthroid valium online stores phentermine sale phentermine pharmacy acomplia discount zoloft cheap alprazolam online buy cialis without prescription buy lorazepam online cheapest zoloft prices order xanax lasix sale cheapest xanax buy zithromax order accutane lowest price lorazepam buy cheap prozac where to buy tramadol generic lorazepam plavix online cheap clomid discount online doxycycline online flagyl cheap lorazepam online buy cheap lasix order lorazepam cheap generic clomid cheap lasix online zithromax no prescription buy generic nexium buy generic levitra buy phentermine buy prozac cheap synthroid prescription pharmacy bactrim valium discount pharmacy alprazolam synthroid discount buy levitra online discount plavix cheap generic xanax viagra online online bactrim propecia cheap cheap generic flagyl soma pills accutane generic online lorazepam discount zithromax discount accutane soma prices pharmacy cialis lowest price diazepam cheap generic zithromax synthroid cheap where to buy zithromax buy lorazepam without prescription plavix prescription levitra pills propecia no prescription buy viagra cheap flagyl online stores bactrim prescription pharmacy tramadol acomplia sale order doxycycline cheap propecia online cialis for sale alprazolam generic levitra without prescription diazepam prices synthroid prices cheap zithromax tablets zithromax online cheap xanax no prescription cheap accutane online generic levitra clomid pills diazepam pills order accutane online buy cheap tramadol buy cheap plavix online buy valium buy cheap viagra online buy tramadol discount acomplia buy cheap xanax order levitra synthroid online stores zithromax without prescription acomplia generic plavix lowest price viagra cheap viagra cheap generic valium where to buy cialis levitra cheap diazepam no prescription buy valium cheap tramadol pills buy generic bactrim buy nexium without prescription buy synthroid cheap cheapest levitra buy levitra without prescription zoloft sale order valium online doxycycline pharmacy cheap diazepam tablets buy generic accutane cheapest doxycycline buy viagra without prescription price of soma purchase valium online tramadol pharmacy viagra pharmacy accutane sale buy propecia cheap cheap cialis accutane without a prescription diazepam discount soma discount where to buy accutane cheapest lasix prices lowest price doxycycline online propecia cheap phentermine online zithromax generic soma pharmacy cheapest accutane prices viagra online cheap bactrim prices order propecia propecia sale valium online buy accutane online flagyl pharmacy tramadol prices buy cheap zithromax online cheap zoloft buy cheap zoloft purchase xanax buy generic xanax valium prices purchase propecia viagra without prescription soma online cheap cheap generic phentermine tramadol without a prescription pharmacy zithromax discount doxycycline flagyl generic flagyl without a prescription cheap synthroid buy cheap plavix cheap generic prozac online valium xanax online stores buy generic tramadol buy bactrim cheap plavix sale purchase clomid online lowest price prozac zithromax lasix cheap doxycycline online stores price of synthroid lowest price lasix order plavix online accutane pills purchase plavix purchase lorazepam online buy generic diazepam purchase clomid viagra online stores zithromax pharmacy cheap generic propecia cheapest valium buy nexium cheap lorazepam no prescription levitra pharmacy buy cheap acomplia online cialis prices cheap alprazolam tablets purchase tramadol buy cheap accutane order diazepam online where to buy flagyl zithromax pills nexium cheap order cialis clomid online cheap diazepam discount phentermine buy soma without prescription buy lorazepam levitra without a prescription prozac for sale viagra pills zoloft without a prescription lorazepam for sale cheap accutane tablets generic bactrim lasix prices accutane discount lowest price clomid nexium online cheap accutane online stores flagyl discount clomid cheap cheapest levitra prices diazepam online cheap generic valium propecia pharmacy acomplia online stores cheap xanax online doxycycline lasix no prescription nexium for sale cheap bactrim flagyl without prescription cialis pharmacy zithromax prices cheap clomid accutane for sale buy xanax cheap cheap soma tablets cheap plavix online purchase levitra online where to buy clomid propecia cheap tramadol cheapest diazepam prices price of valium where to buy bactrim generic cialis where to buy lorazepam zoloft prices synthroid pharmacy order nexium buy cheap tramadol online zoloft prescription levitra online cheap pharmacy plavix buy flagyl without prescription cheap generic nexium lorazepam pharmacy synthroid online generic doxycycline cheap generic plavix purchase prozac buy cheap lorazepam accutane prescription cheap propecia tablets clomid prices viagra prescription order prozac online buy generic plavix where to buy valium tramadol online cheap cheapest plavix cheapest soma prices generic propecia plavix prices buy propecia without prescription nexium discount buy cheap propecia online flagyl online cheap order lasix online buy generic viagra lowest price nexium generic accutane alprazolam cheap plavix without a prescription diazepam sale cheap accutane cheap generic viagra buy synthroid online discount bactrim phentermine phentermine online stores pharmacy prozac valium cheap tramadol without prescription cheapest propecia prices synthroid where to buy doxycycline order flagyl flagyl cheap cheap tramadol tablets discount xanax pharmacy acomplia xanax pills synthroid pills cheap generic acomplia pharmacy clomid order doxycycline online buy cheap doxycycline purchase soma online cialis online stores discount flagyl cialis without a prescription buy synthroid without prescription buy cheap alprazolam online buy cheap valium online purchase acomplia online lowest price acomplia viagra discount buy cheap synthroid plavix online stores buy cheap phentermine online cheap tramadol online generic soma purchase nexium online buy phentermine without prescription order xanax online doxycycline discount buy cialis cheap cheap acomplia buy generic propecia lorazepam online cheap purchase accutane buy xanax online zithromax sale cialis generic cheapest cialis tramadol prescription accutane no prescription acomplia pills lowest price levitra buy generic lorazepam purchase accutane online viagra prices cheapest valium prices lorazepam phentermine pills buy cheap xanax online lasix pharmacy online accutane tramadol sale buy xanax without prescription buy cheap alprazolam price of xanax viagra for sale pharmacy xanax order zoloft online buy cheap cialis buy cheap clomid online phentermine discount zoloft no prescription cheap bactrim tablets discount lasix lorazepam sale valium prescription tramadol online stores lorazepam prices cheap nexium online purchase zoloft online lasix generic phentermine no prescription lasix cialis pills plavix no prescription acomplia no prescription lorazepam online stores buy bactrim buy nexium cheap flagyl online buy doxycycline without prescription cheap generic synthroid buy zoloft cheap clomid online pharmacy lorazepam lowest price alprazolam xanax without a prescription buy valium online synthroid without prescription bactrim pills buy cheap phentermine order phentermine online buy zithromax online cheapest propecia cheap generic lorazepam

zlibEn un proyecto en el que estoy trabajando actualmente se requiere generar un XML con datos tratados, para que un código Javascript monte un grid a modo de Excel online.

El problema viene cuando la cantidad de registros se vuelve grande… En unas pruebas con registros de producción nos encontramos que el grid se demoraba mucho en mostrarse… Pusimos algunas alertas y llegamos a la conclusión que de 20 segundos que tardaba en montarse el grid, sólo 5 correspondían a la generación del XML y el resto era tráfico de red y proceso javascript.

Pero cuánto pesa el XML? Un mega y medio de XML? Y cómo lo hacemos más pequeño para generar menos tráfico y ganar tiempo? Comprimiendo el XML de salida…

¿De qué se trata?

Los datos que se encargan de montar una página web son básicamente imágenes y diferentes tipos de datos en texto plano. Las imágenes habitualmente ya vienen comprimidas (JPG, PNG, GIF,…), pero el texto plano (HTML, XML, CSS, …) es altamente comprimible… Simplemente es código ASCII que se repite y repite en el mismo archivo. Si enviamos el texto plano comprimido estamos enviando realmente menos datos por la red, consiguiendo que la totalidad de los datos llegue antes al navegador, quien descomprime los datos y obtiene el código HTML, XML, CSS o lo que sea como si se hubiese enviado así directamente.

¿Y los navegadors lo soportan?

Casi la totalidad de navegadores actuales soportan la compressión de datos HTTP. De hecho, desde 1998 los navegadores han ido soportando el protocolo HTTP 1.1, que esencialmente indica que el navegador soporta “content encoding”.

Internet Explorer soporta compresión HTTP desde la versión 4 (teniendo que activar HTTP 1.1 en sus propiedades) aunque las versiones para Mac 4.5/5 no lo soportan. Netscape lo soporta desde la versión 4 aunque da bastantes fallos. Su versión 4.5 empieza a ser más interesante y la 6 funciona ya plenamente. Opera soporta la compresión desde su versión 5. Firefox desde su versión 1.

Para asegurarte que tu navegador soporta compresión puedes usar el test HTTP trace. Si aparece una línea dentro del cuadro “HTTP request received from browser” con un texto similar al siguiente es que sí que lo soporta:

ACCEPT_ENCODING: gzip,deflate

¿Cómo implementarlo?

Se puede hacer de 3 formas:

  1. Activar a nivel TOTAL del ámbito del php del servidor (editar php.ini)
  2. Activar a nivel LOCAL para un sólo site de todo el ámbito del PHP (.htaccess)
  3. Activar a nivel de SCRIPT (un sólo archivo.php)

1.- TOTAL

  1. Editar el php.ini de apache

    $ vim /etc/php5/apache2/php.ini

  2. Cambiar el valor de los parámetros siguientes:

    zlib.output_compression = On
    zlib.output_compression_level = 7

  3. Guardar y salir
  4. Reiniciar apache

    $ /etc/init.d/apache2 restart

2.- LOCAL

  1. Editar o crear el archivo .htaccess en el directorio del sitio a aplicar

    $ vim /var/www/misitio/.htaccess

  2. Insertar las siguientes líneas:

    php_flag zlib.output_compression on
    php_value zlib.output_compression_level 7

  3. Guardar y salir (no es necesario reiniciar)

3.- SCRIPT
Hay dos formas de hacerlo:

  1. Insertar al inicio del script la siguiente línea

    ini_set(’zlib.output_compression’, ‘On’);

    NOTA: Según el comentario en php.net esta forma no funciona.
    Personalmente yo no lo he probado.

  2. Insertar al inicio del script la siguiente línea

    ob_start(”ob_gzhandler”);

    NOTA: Sin haber activado el zlib desde php.ini, al ejecutar ésta línea me causaba un error.

Niveles de compresión:

Van de 0 a 9 indicando de menos a más compresión respectivamente. A menos compresión más rápido es y menos CPU consume, pero menos comprime. A más compresión se tarda más en comprimir y consume más CPU, pero la compresión es mejor. Establecer el valor a -1 hace que se deje a elección del propio PHP el nivel de compresión (generalmente 6).

¿Cómo saber si está funcionando?

Se pueden usar herramientas de testeo como HTTP Analysis Tools. Para este caso, probar la primera herramienta “Compression Check

Experiencia personal

En el proyecto que he descrito, el XML medio pesaba sobre 1,5 MB. Al comprimir la salida se queda en unos 35 KB, una muy buena mejora. La solución que tomé fué aplicar la compresión a todo el site setando los parámetros directamente en el php.ini. La generación del XML sigue tardando lo mismo pero el tiempo total para tener el XML listo en el navegador descendió de 25 segundos a unos 10 segundos… una muy buena mejora ;)

Luego, quise hacer lo mismo en este blog. Como está alojado en un servidor compartido no tengo acceso al php.ini, así que probé de hacer el setado por .htaccess, pero obtuve siempre un error 500. La única forma de hacerlo funcionar fué editar el archivo index.php y colocar en la primera línea el ob_start(”ob_gzhandler”). La compresión funcionó y los registros mejoraron, pero la experiencia del usuario empeora debido a que el el navegador no renderiza hasta que no le han llegado todos los datos… y cómo hay algunos scripts de publicidad que se llaman y demoran todo el conjunto, la web se queda unos segundos (que se hacen eternos) en blanco. Así que lo quité dejándolo sin comprimir. Así, almenos, el usuario ve que se le va renderizando la web sobre la marcha y no tiene la sensación de que el sitio está colgado.

Más información:

Tags: , , , ,
 Enviar a Fresqui

Escribe un Comentario





Estadísticas