En Drupal 7, ¿dónde podría habilitar / deshabilitar la compresión gzip? ¿Hay un módulo para esta funcionalidad?
En Drupal 7, ¿dónde podría habilitar / deshabilitar la compresión gzip? ¿Hay un módulo para esta funcionalidad?
Respuestas:
Personalmente, no me gusta la forma en que Drupal maneja la compresión de salida; Me encargo de esto fuera de Drupal.
En el sitio de Drupal, agrego
$conf['page_compression'] = FALSE;
$conf['css_gzip_compression'] = FALSE;
$conf['js_gzip_compression'] = FALSE;
a settings.php, y esto a un módulo personalizado para mostrar que esto está deshabilitado:
/**
* Implements hook_form_FORM_ID_alter().
*/
function MYMODULE_form_system_performance_settings_alter(&$form, $form_state) {
$form['bandwidth_optimization']['page_compression']['#default_value'] = 0;
$form['bandwidth_optimization']['page_compression']['#disabled'] = TRUE;
$form['bandwidth_optimization']['page_compression']['#description'] = t('Handled by Apache.');
}
Esto también es para evitar la compresión accidental de doble salida, que puede ser muy difícil de diagnosticar si no conoce los síntomas.
Luego, en mi configuración de Apache, hago
<IfModule mod_deflate.c>
# Force deflate for mangled headers 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>
# HTML, TXT, CSS, JavaScript, JSON, XML, HTC:
<IfModule filter_module>
FilterDeclare COMPRESS
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject
FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $image/x-icon
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf
FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype
FilterChain COMPRESS
FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no
</IfModule>
<IfModule !mod_filter.c>
# Legacy versions of Apache
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
AddOutputFilterByType DEFLATE image/x-icon image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
</IfModule>
</IfModule>
Esto le permite a Apache realizar la compresión de salida por tipo MIME y también asegurarse de que toda la salida basada en texto se comprima. Esto está adaptado de una versión anterior del archivo .htaccess del proyecto HTML5 Boilerplate, que ahora vive en un proyecto separado . También agrego sus directivas para el control de caché y algunas otras cosas. Guardo todo esto en un archivo individual, que luego guardo Include
en mis hosts virtuales.
La desventaja de esto es que el servidor comprime cada solicitud, pero funciona bien para mis sitios y mis clientes.
Cache pages for anonymous users
y luego guarde sus opciones en suadmin/config/development/performance
página. Esto presentará unaCompress cached pages.
opción más abajo en laBANDWIDTH OPTIMIZATION
sección (se oculta / muestra a través de JavaScript, por lo que todo podría funcionar con el primer clic, pero no lo hace aquí por alguna razón).