Foros del Web » Creando para Internet » Diseño web »

Enable compression

Estas en el tema de Enable compression en el foro de Diseño web en Foros del Web. Buenas, He estado investigando mucho sobre esto y no he llegado a encontrar nada en claro. A ver si me pueden echar una mano. Soy ...
  #1 (permalink)  
Antiguo 13/01/2011, 11:31
Avatar de Kanashin  
Fecha de Ingreso: enero-2011
Mensajes: 45
Antigüedad: 13 años, 3 meses
Puntos: 1
Busqueda Enable compression

Buenas,

He estado investigando mucho sobre esto y no he llegado a encontrar nada en claro. A ver si me pueden echar una mano.

Soy muy maniático en cuanto a rendimiento web, y me gustaría que mi página web fuera lo más rápida posible, por eso, me gustaría cumplir al 100% el Page Speed de Google.

El caso es que lo tengo casi todo bien, me falta el Enable compression; que he investigado mucho, añadiendo código PHP, creando un archivo php.ini, toqueteando el .htaccess, etcétera, etcétera.

Sin embargo, nada de eso ha conseguido que mi página sea detectada como comprimida (tanto por algunos tests, como http://www.gidnetwork.com/tools/gzip-test.php ) como el mismo Page Speed.

Mi página web sólo tiene archivos .html y .css (a parte de imágenes que no deben ser comprimidas por gzip) y mi servidor es 1&1 .

¿Alguien me puede arrojar algo de luz?

Gracias.



PD: De paso, ¿alguien también puede ayudarme con Specify a Vary: Accept-Encoding header? He intentado añadirlo al .htaccess pero no funciona.
  #2 (permalink)  
Antiguo 13/01/2011, 11:50
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Enable compression

Kanashin:

Lee estos posts en lo que explico algo al respecto (tratá de leerlos enteros)

http://www.forosdelweb.com/f91/compr...5/#post3560417


http://www.forosdelweb.com/f91/gzip-...0/#post3649588

y finalmente date una vuelta por http://gzip.emprear.com.ar , ahi mismo hay un rar con los códigos de ejemplo.


Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 13/01/2011, 12:01
Avatar de Kanashin  
Fecha de Ingreso: enero-2011
Mensajes: 45
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Enable compression

Según he visto, en ambos temas recomienda cambiar todos los archivos a extensión .php para poder hacer la compresión.

¿No podría hacerlo sin tener que renombrarlo todo? Es que me parece "feo" tener .css.php, aunque quizás me esté equivocando...

Muchísimas gracias por su rápida respuesta.
  #4 (permalink)  
Antiguo 13/01/2011, 13:28
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Enable compression

Bueno, de feo no tiene nada, a lo sumo represente un problema el no haber hecho eso de entrada y tener que renombrar y editar tus archivos. De todas formas el "codigo php" para realizar la compresión tenes que insertarlo, lo que requiere la edición de dichos archivos.


Sin embrago si te fijas en el código de comprimir_multiples

Código PHP:
Ver original
  1. <?php
  2. $sincomentarios = 1; // 1 quita comentarios del css cualquier otro valor no
  3. ini_set("default_charset","utf-8");
  4. header ('content-type: text/css');
  5. header ('cache-control: must-revalidate');
  6. if(extension_loaded('zlib')){
  7. ob_start('ob_gzhandler');
  8. }
  9. $offset = 60 * 60;
  10. $expire = 'expires: ' . gmdate ('D, d M Y H:i:s', time() + $offset) . ' GMT';
  11. header ($expire);
  12.  
  13. #### El siguiente bloque permite eliminar los comentarios del css
  14. if ($sincomentarios == 1){
  15. ob_start('compress');
  16. }
  17. function compress($buffer) {
  18. // eliminar comentarios
  19.  $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
  20. return $buffer;
  21. }
  22. ###### Fin bloque para remover comentarios
  23.  
  24. ### Archivos CSS a incluir
  25. include($_SERVER['DOCUMENT_ROOT'] . '/css/estilo_uno.css');
  26. include($_SERVER['DOCUMENT_ROOT'] . '/css/estilo_dos.css');
  27.  
  28. ?>

No tendrias que renombrar los css, podes ponerlos en la lista de archivos a incluir, y, desde el header de tus html/php llamar al archivo


<link type='text/css' rel='stylesheet' href='comprimir_multiple.php' />


Además, el mismo método podés usarlo para comprimir tu javascript, lo unico que se modifica es:

en la linea 3 de la scirpt
header ('content-type: text/css'); se reemplaza por

header ('content-type: text/javascript'); y la variable $sincomentarios ponela en 0


Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 13/01/2011, 13:48
Avatar de Kanashin  
Fecha de Ingreso: enero-2011
Mensajes: 45
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Enable compression

¡Gracias! Funcionó en parte, opté por utilizar el documento php, que lo he renombrado a css.php, sin embargo sigue habiendo el:

Cita:
Enable compression

Compressing the following resources with gzip could reduce their transfer size by 3.1KiB (63% reduction).

* Compressing http://www.baba.es/ could save 3.1KiB (63% reduction).
Parece que la solución sería adaptar su código a todos los archivos, ¿se podría hacer con el .htaccess?

Por ejemplo, añadiendo if(extension_loaded('zlib')) ob_start('ob_gzhandler'); a cada archivo y cambiando su extensión a PHP soluciona el problema. Pero, ¿se podría hacer con el .htaccess?

Muchísimas gracias por su tiempo.

PD: Como ánimo de mejora y para que vea que me he estudiado su código, propongo esta versión para que también arregle el problema con el Leverage browser caching y Specify a cache validator:

Coméntelo si cree que he hecho algo mal.

Código PHP:
Ver original
  1. <?
  2. $sincomentarios = 1; // 1 quita comentarios del css cualquier otro valor no
  3.  
  4. ini_set("default_charset","iso-8859-1");
  5. header ('content-type: text/css');
  6. header ('expires: access 1 week');
  7. if(extension_loaded('zlib')) ob_start('ob_gzhandler');
  8.  
  9. #### El siguiente bloque permite eliminar los comentarios del css
  10. if ($sincomentarios == 1) ob_start('compress');
  11.  
  12. function compress($buffer) {
  13.     $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
  14.     return $buffer;
  15. }
  16. ###### Fin bloque para remover comentarios
  17. ?>
  18. /****
  19. CÓDIGO CSS
  20. ****/
  21. <?if(extension_loaded('zlib')) ob_end_flush();?>

Última edición por Kanashin; 13/01/2011 a las 15:31
  #6 (permalink)  
Antiguo 13/01/2011, 17:01
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Enable compression

Si leiste los post que te indique habrás visto que indiqué que mi solución es la más "universal", hay otras maneras, pero eso depende de la configuración de apache y de como esté instalado PHP (si como módulo o como CGI). Ente otras cosas..

Lo que señalas de
Leverage browser caching , es correcto, pero optimizar el cacheado no significa comprimir.

Si observas los encabezados de la página de pruebas

http://gzip.emprear.com.ar/test.php
vas a ver

Código Apache:
Ver original
  1. Date: Thu, 13 Jan 2011 22:45:34 GMT
  2. Server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635
  3. X-Powered-By: PHP/5.2.14
  4. Cache-Control: must-revalidate, max-age=604800
  5. Expires: Thu,13 Jan 2011 23:45:35 GMT
  6. Content-Encoding: gzip
  7. Vary: Accept-Encoding
  8. Content-Type: text/css;charset=utf-8
  9.  
  10. 200 OK

No se bien que es lo que indicas que funciona a medias

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 13/01/2011, 17:05
Avatar de Kanashin  
Fecha de Ingreso: enero-2011
Mensajes: 45
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Enable compression

Cita:
Iniciado por emprear Ver Mensaje
No se bien que es lo que indicas que funciona a medias
Me refería a que faltaba tratar también los archivos .html.

Pero he hecho esto para arreglarlo:

Cita:
Iniciado por Kanashin
Por ejemplo, añadiendo if(extension_loaded('zlib')) ob_start('ob_gzhandler'); a cada archivo y cambiando su extensión a PHP soluciona el problema. Pero, ¿se podría hacer con el .htaccess?
Ya tengo 100/100 en el Page Speed gracias a usted, pero me gustaría saber si en lugar de tener que cambiar cada extensión a .php, se podría jugar con el .htaccess para comprimir de forma globalizada.

De todos modos, muchísimas gracias, sin usted no lo habría logrado nunca.
  #8 (permalink)  
Antiguo 13/01/2011, 18:30
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Enable compression

Kanashin:

si insistes es sólo cuestion de probar


crea una carpeta de pruebas, pon en ella un archivo de cada tipo
php
html
xml
txt
css
js

crea un .htaccess

con lo siguiente

Código Apache:
Ver original
  1. Options +indexes
  2.  
  3. #Optimizar Cache
  4. Header unset ETag
  5. FileETag None
  6. <FilesMatch "(?i)^.*\.(ico|flv|jpg|jpeg|png|gif|js|css)$">
  7. Header unset Last-Modified
  8. Header set Expires "Fri, 6 Jan 2012 00:00:00 GMT"
  9.  
  10. ####3 si tenes activado el module Expires podés usar en lugar de Header set Expires
  11. #ExpiresActive On    
  12. #ExpiresDefault "access plus 1 year"
  13.  
  14. Header set Cache-Control "public, no-transform"
  15. </FilesMatch>
  16.  
  17. #comprimir text, html, javascript, css, xml:
  18. #los php pasan como text/html
  19. AddOutputFilterByType DEFLATE text/plain
  20. AddOutputFilterByType DEFLATE text/html
  21. AddOutputFilterByType DEFLATE text/xml
  22. AddOutputFilterByType DEFLATE text/css
  23. AddOutputFilterByType DEFLATE text/javascript
  24. AddOutputFilterByType DEFLATE application/xml
  25. AddOutputFilterByType DEFLATE application/xhtml+xml
  26. AddOutputFilterByType DEFLATE application/rss+xml
  27. AddOutputFilterByType DEFLATE application/javascript
  28. AddOutputFilterByType DEFLATE application/x-javascript



Por supuesto hay que ver que apache tenga cargados todos los móduilos involucrados, si no vas a obtener un error 500, y que la compresión no afecte la ejecución de algunas scripts, si no, no lo vas a poder hacer tan global.


Por eso te decia que mi solución es mas universal, porque solo depende de php.

Demás esta decir, que si esto ultimo te funciona, estan demás todos los agregados previos que se hicieron a traves de php, y el nombre de tus archivos no deberia alterarse, respentando asi las extensiones originales.


Para realizar los tests, te sugiero uses Firefox más la extensión Webdeveloper
(Webdeveloper/informacion/ver encabezados de página)

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #9 (permalink)  
Antiguo 13/01/2011, 22:56
Avatar de Kanashin  
Fecha de Ingreso: enero-2011
Mensajes: 45
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Enable compression

Algo así tenía antes de pedir ayuda en el foro, pero comprobando <IfModule mod_deflate.c> para prevenir los 500, pero claro, no hacía nada.

Lo máximo que he encontrado para hacer una versión minimalista (gracias a su explicación), y para ayudar a futuros lectores, es:
  1. Renombrar todos los archivos a .php
  2. Crear un fichero php.ini con el siguiente código:
    Código:
    zlib.output_compression = On
    zlib.output_compression_level = 1
    
  3. Subir el fichero php.ini EN CADA CARPETA que se tengan archivos .php .
  4. Los archivos que vayan a ser usados como CSS añadir esta línia al principio de todo:
    NOTA: Este código supone que los archivos CSS son minimalistas.
    Código PHP:
    Ver original
    1. <?ini_set("default_charset","iso-8859-1");header('content-type: text/css');header('expires: access 1 week');?>
  5. Crear un .htaccess con el siguiente código y subirlo a la raíz del servidor (o donde apunte el dominio):
    Código .htaccess:
    Ver original
    1. ## EXPIRES CACHING ##
    2. <IfModule mod_expires.c>
    3.     ExpiresActive On
    4.     ExpiresDefault "access plus 1 week"
    5. </IfModule>

De este modo se evita modificar todos los archivos PHP.
Téngase en cuenta que esta configuración funciona para servidores de 1&1, quizás en otro servidor se pueda utilizar el mod_deflate.c .

Muchas gracias por todo emprear, si se le ocurre alguna mejora, coméntela con mucho gusto.
  #10 (permalink)  
Antiguo 14/01/2011, 01:03
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Enable compression

Kanashin:

Me parece muy loable porque intentes encontrar una variante más sencilla, pero eso de colocar un archivo php.ini en cada carpeta de tu servidor, es algo completamente "fuera de lugar", el único que puede definir valores en php.ini es el Administrador del sistema, lo que si podés hacer es a traves de la función ini_set(); es modificar ciertos valores, que y cuales son modificables a traves de esta función, se detallan en una lista que encontrarás en http://www.php.net/manual/en/ini.list.php

aquellos marcados con PHP_INI_ALL, son modificables desde tus scripts, y desde el htaccess

los identificados con PHP_INI_PERDIR, pueden ser cambiados desde .htaccess, pero como condición, y te lo repirto una vez más, de que php este instalado como Módulo de Apache
Si ese fuera el caso, No hace falta todo eso que pusites, basta con que en tu .htaccess pongas
Código Apache:
Ver original
  1. #procesar como si fuesen php los js y css
  2. AddType application/x-httpd-php .js .css
  3. # habilitar la compresión
  4. php_flag zlib.output_compression on


como ves nos encontramos con otro método más, pero quye metodo funcionará o no depende de las configuraciones de nuestro server, las cuales estan fuera de nuestro alcance en modificar.

Me parece que estas complicando las cosas.


Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #11 (permalink)  
Antiguo 14/01/2011, 03:17
Avatar de Kanashin  
Fecha de Ingreso: enero-2011
Mensajes: 45
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Enable compression

El problema es que salta error 500 al poner la instrucción

Código .htaccsess:
Ver original
  1. php_flag zlib.output_compression on

Eso es el código que tenía en mi servidor 000webhost, pero que no funcionó al pasarme al de pago 1&1, por eso tanto lío; lo que antes era una instrucción, ahora se convierte en un conjunto enorme.
  #12 (permalink)  
Antiguo 14/01/2011, 07:01
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Enable compression

Kanashin:

Disiento con vos, esto sucede porque no has leido como te indique, toda la información de los posts que te cite al inicio de todo esto.


http://www.forosdelweb.com/f91/compr...5/#post3596875


000webhost usa
Apache 2.0 Handler

1&1
Server API CGI


Te hice incapié en eso varias veces, si lo hubieses chequeado ya estaría resuelto

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #13 (permalink)  
Antiguo 14/01/2011, 07:03
Avatar de Kanashin  
Fecha de Ingreso: enero-2011
Mensajes: 45
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Enable compression

Sí que lo leí, pero eso no quita que me dé error 500 al hacerlo en 1&1, sea porque no tenga Apache o por lo que fuere, pero lo cómodo de 000webhost no lo puedo hacer a 1&1.
  #14 (permalink)  
Antiguo 14/01/2011, 07:26
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Enable compression

Cita:
pero eso no quita que me dé error 500 al hacerlo en 1&1
Ni quita ni deja de quitar, el ERROR es completamente normal

Te da error 500 porque en 1&1 esto

php_flag zlib.output_compression on

NO se puede hacer porque tienen instalado php como CGI !!!


En cambio en 000webhost lo tienen como módulo y si se puede

está claro, vos no podés configurar ni tu Server ni tu php.ini a tu total antojo, podrás hacer algunos ajustes, y con el resto, Adaptarte
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #15 (permalink)  
Antiguo 17/01/2011, 17:05
Avatar de Tedel  
Fecha de Ingreso: enero-2011
Ubicación: Lima
Mensajes: 2.744
Antigüedad: 13 años, 3 meses
Puntos: 444
Respuesta: Enable compression

Yo no usaba PHP para la compresión, solo usaba el htaccess. ¿Qué plataforma usa tu hosting? ¿Apache o Litespeed?
  #16 (permalink)  
Antiguo 17/01/2011, 20:11
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Enable compression

Ese es el punto, yo no trabajo con un hosting, trabajo al menos con 15, en todos los casos Linux+apache, y con configuraciones y versiones variadas, aunque todos con php. De ahi de usar el método, más "universal" como señale. Por supuesto, se puede usar "cualquier sistema que funcione" ..

saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #17 (permalink)  
Antiguo 20/01/2011, 15:56
Avatar de Tedel  
Fecha de Ingreso: enero-2011
Ubicación: Lima
Mensajes: 2.744
Antigüedad: 13 años, 3 meses
Puntos: 444
Respuesta: Enable compression

Lo usual en Apache 2+ es esto:

AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-javascript Header append Vary Accept-Encoding

No necesitas comprimir imágenes porque (se supone que) ya están comprimidas.

Si te funciona, merezco karma (y una cerveza, pero solo el karma está bien por ahora)
  #18 (permalink)  
Antiguo 21/01/2011, 02:08
Avatar de Kanashin  
Fecha de Ingreso: enero-2011
Mensajes: 45
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Enable compression

Buenas Tedel, gracias por responder y disculpe que yo no haya respondido hasta ahora, he estado liado.

A la primera pregunta: No sé si 1&1 usa Apache, ni cómo está instalado ni nada.
A su aportación: Eso fue lo primero que probé, que sale en casi todas las búsquedas en Google sobre el tema, y nunca funcionó y da error 500:

Cita:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
Aunque muchas gracias por su respuesta, sigo atento por más.

PD: Funcione o no, por la aportación, ¡cuando quiera le invito a una cerveza!

Última edición por Kanashin; 21/01/2011 a las 02:14
  #19 (permalink)  
Antiguo 21/01/2011, 20:49
Avatar de Tedel  
Fecha de Ingreso: enero-2011
Ubicación: Lima
Mensajes: 2.744
Antigüedad: 13 años, 3 meses
Puntos: 444
Respuesta: Enable compression

Bueno, yo te dije que eso funcionaba con Apache 2... Tú tienes Apache 1.3.3... Por eso no funcionó. ¿Puedes actualizar o es Hosting?
  #20 (permalink)  
Antiguo 23/01/2011, 13:21
Avatar de Kanashin  
Fecha de Ingreso: enero-2011
Mensajes: 45
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Enable compression

Estoy en 1&1,así que creo que es hosting
  #21 (permalink)  
Antiguo 23/01/2011, 20:53
Avatar de Tedel  
Fecha de Ingreso: enero-2011
Ubicación: Lima
Mensajes: 2.744
Antigüedad: 13 años, 3 meses
Puntos: 444
Respuesta: Enable compression

ok, entonces múdate de hosting a uno que use Apache 2.2 Eso resuelve tu problema.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:50.