Habilitar compresión con gzip

  • Autor Autor condor08
  • Fecha de inicio Fecha de inicio
C

condor08

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola gente buen día!
Antes que nada pido disculpas si este tema no esta en el lugar que corresponde, estuve buscando en el foro y creo que este es el mejor lugar pero si no es así por favor avísenme para cambiarlo.
Habiendo dicho eso quería comentarles mi experiencia y desconcierto. He leído ya varios temas en el foro sobre como habilitar la compresión de los archivos php y css utilizando deflate y he probado los códigos que muchos compañeros copiaron para solucionar este tema. Ahora bien, lo que esta pasando es que si bien pagespeed me sigue diciendo que tengo que habilitar la compresión, páginas como la de GIDZip test informa que mi web ya la tiene habilitada.
Me olvidé de hacer algo? no basta solamente con modificar el htaccess?
Lo que hice hasta el momento fue poner este código en el htacccess

php_flag zlib.output_compression On
php_value zlib.output_compression_level 2

mi web Friselina Lanus está alojada en 000webhost que tiene apache 2.2

Ojalá alguien pueda ilustrarme y sacarme de esta duda.
Muchas gracias a todos y disculpen nuevamente si no es el lugar correcto.
 
no se comprimen tus archivos javascript, eso pasa porque zlib output_compression solo comprime lo que pasan por el handler php. en cambio Apache mod_deflate comprime archivos estaticos como CSS o JS.

has provado?

Insertar CODE, HTML o PHP:
<IfModule mod_deflate.c>

    # Force compression for mangled headers.
    # http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping
    <IfModule mod_setenvif.c>
        <IfModule mod_headers.c>
            SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
            RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
        </IfModule>
    </IfModule>

    # Compress all output labeled with one of the following MIME-types
    # (for Apache versions below 2.3.7, you don't need to enable `mod_filter`
    #  and can remove the `<IfModule mod_filter.c>` and `</IfModule>` lines
    #  as `AddOutputFilterByType` is still in the core directives).
    <IfModule mod_filter.c>
        AddOutputFilterByType DEFLATE application/atom+xml \
                                      application/javascript \
                                      application/json \
                                      application/rss+xml \
                                      application/vnd.ms-fontobject \
                                      application/x-font-ttf \
                                      application/x-web-app-manifest+json \
                                      application/xhtml+xml \
                                      application/xml \
                                      font/opentype \
                                      image/svg+xml \
                                      image/x-icon \
                                      text/css \
                                      text/html \
                                      text/plain \
                                      text/x-component \
                                      text/xml
    </IfModule>

</IfModule>
 
Hola! Muchas gracias por tu respuesta.
Sí he probado con

# Compressed javascript files
AddEncoding x-gzip .jgz
AddType application/x-javascript .jgz
AddType text/css .jgz

SetOutputFilter DEFLATE
AddEncoding x-compress .Z
AddEncoding x-gzip .gz .tgz
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddOutputFilterByType DEFLATE text/php text/html text/txt text/xml text/css style/css

<IfModule mod_headers.c>
<FilesMatch "\.(js|css|xml|gz|jgz)$">
Header append Vary Accept-Encoding
</FilesMatch>
</IfModule>

<filesMatch "\.(ico|pdf|flv|jpg|jpeg|jgz|png|gif|js|css|swf)$">
Header set Expires "Thu, 15 Apr 2025 20:00:00 GMT"
</filesMatch>

<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>

<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
</ifmodule>

AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
ExpiresActive On
ExpiresDefault "access plus 30 days"
FileETag none

que es lo mismo si no me equivoco aunque por las dudas borré eso y copié tu código pero NADA! será que tengo que hacer algo en los archivos? La verdad estoy perdidísima ya

- - - Actualizado - - -

Entré en duda con lo que me comentaste que el código
php_flag zlib.output_compression On
php_value zlib.output_compression_level 2
no comprime mis archivos css y js y lo borré para ver si el test de GIDZtest lo que marcaba como comprimido era gracias a ese código y efectivamente una vez borrado eso muestra que ya no está comprimida la web.
Ahora sí que estoy perdida, :ambivalence:
 
dejalo como lo tenias antes con:
php_flag zlib.output_compression On
php_value zlib.output_compression_level 2

Anade en tu .htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*\.js) gzip.php?type=js&file=$1
RewriteRule ^(.*\.css) gzip.php?type=css&file=$1
</IfModule>

despues crea en tu root directory un archivo llamado "gzip.php" y pegale el siguiente codigo:
Insertar CODE, HTML o PHP:
<?php
//check that zlib compression is enabled
if(!ini_get('zlib.output_compression')){ die(); }
 
$allowed = array('css','js'); //set array of allowed file types to prevent abuse
 
//check for request variable existence and that file type is allowed
if(isset($_GET['file']) && isset($_GET['type']) && in_array(substr($_GET['file'],strrpos($_GET['file'],'.')+1), $allowed)){
	$data = file_get_contents(dirname(__FILE__).'/'.$_GET['file']); // grab the file contents
 
	$etag = '"'.md5($data).'"'; // generate a file Etag
	header('Etag: '.$etag); // output the Etag in the header
 
	// output the content-type header for each file type
	switch ($_GET['type']) {
		case 'css':
			header ("Content-Type: text/css; charset: UTF-8");
		break;
 
		case 'js':
			header ("Content-Type: text/javascript; charset: UTF-8");
		break;
	}
 
	header('Cache-Control: max-age=300, must-revalidate'); //output the cache-control header
	$offset = 60 * 60;
	$expires = 'Expires: ' . gmdate('D, d M Y H:i:s',time() + $offset) . ' GMT'; // set the expires header to be 1 hour in the future
	header($expires); // output the expires header
 
	// check the Etag the browser already has for the file and only serve the file if it is different
	if ($etag == $_SERVER['HTTP_IF_NONE_MATCH']) {
		header('HTTP/1.1 304 Not Modified');
		header('Content-Length: 0');
	} else {
		echo $data;
	}
}
?>

Lo que estoy haciendo es pasar los ccs y js por el handler php
 
Lo pruebo y te cuento como me fue! Si funciona armo una estatua tuya y la pongo en mi mesita de luz ejjej. Gracias por la respuesta y por las ganas de ayudar!!!

- - - Actualizado - - -

GRACIAS!!!!!! Un genio!!! De verdad mil gracias!!

Por si hay alguien mas que lee este post y que está utilizando pegespeed, comento que una vez que hice esto se corrigió el problema con la habilitación de compresión pero al parecer el código que estaba para especificar la caché en el htaccess se desactivo, pero.... se soluciona modificando el archivo .php que creamos y que llamamos gzip
header('Cache-Control: max-age=300, must-revalidate');
por
header('Cache-Control: max-age=864000, must-revalidate'); que son 10 días, también pueden poner un valor distinto pero siempre mayor a una semana que es lo pegespeed pide como mínimo.

Gracias comors !
 
Atrás
Arriba