? gzip-101227-75.patch ? gzip-101227-78.patch Index: .htaccess =================================================================== RCS file: /cvs/drupal/drupal/.htaccess,v retrieving revision 1.103 diff -u -p -r1.103 .htaccess --- .htaccess 21 Jun 2009 10:48:06 -0000 1.103 +++ .htaccess 13 Aug 2009 18:26:06 -0000 @@ -7,6 +7,16 @@ Order allow,deny +# Gzip compressed CSS files are of the type 'text/css'. + + ForceType text/css + + +# Gzip compressed JS files are of the type 'text/javascript'. + + ForceType text/javascript + + # Don't show directory listings for URLs which map to a directory. Options -Indexes @@ -54,6 +64,12 @@ DirectoryIndex index.php index.html inde +# Requires mod_mime to be enabled. + + # Send any files ending in .gz with x-gzip encoding in the header. + AddEncoding gzip .gz + + # Various rewrite rules. RewriteEngine on @@ -89,6 +105,16 @@ DirectoryIndex index.php index.html inde RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/favicon.ico RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] + + # Serve gzip compressed CSS files if they exist + RewriteCond %{HTTP:Accept-encoding} gzip + RewriteCond %{REQUEST_FILENAME}\.gz -s + RewriteRule ^(.*)\.css $1\.css\.gz [L,QSA,T=text/css] + + # Serve gzip compressed JS files if they exist + RewriteCond %{HTTP:Accept-encoding} gzip + RewriteCond %{REQUEST_FILENAME}\.gz -s + RewriteRule ^(.*)\.js $1\.js\.gz [L,QSA,T=text/javascript] # $Id: .htaccess,v 1.103 2009/06/21 10:48:06 dries Exp $ Index: includes/common.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/common.inc,v retrieving revision 1.959 diff -u -p -r1.959 common.inc --- includes/common.inc 13 Aug 2009 03:03:03 -0000 1.959 +++ includes/common.inc 13 Aug 2009 18:26:08 -0000 @@ -2658,6 +2658,12 @@ function drupal_build_css_cache($css, $f // Create the CSS file. file_unmanaged_save_data($data, $csspath . '/' . $filename, FILE_EXISTS_REPLACE); + if (variable_get('css_gzip_compression', TRUE) && function_exists('gzencode') && zlib_get_coding_type() == FALSE) { + // If CSS gzip compression is enabled and the gzencode function exits and + // output compression is disabled then create a gzipped version of the + // above file. + file_unmanaged_save_data(gzencode($data, 9, FORCE_GZIP), $csspath . '/' . $filename . '.gz', FILE_EXISTS_REPLACE); + } } return $csspath . '/' . $filename; } @@ -3355,6 +3361,12 @@ function drupal_build_js_cache($files, $ // Create the JS file. file_unmanaged_save_data($contents, $jspath . '/' . $filename, FILE_EXISTS_REPLACE); + if (variable_get('js_gzip_compression', TRUE) && function_exists('gzencode') && zlib_get_coding_type() == FALSE) { + // If JavaScript gzip compression is enabled and the gzencode function + // exits and output compression is disabled then create a gzipped version + // of the above file. + file_unmanaged_save_data(gzencode($contents, 9, FORCE_GZIP), $jspath . '/' . $filename . '.gz', FILE_EXISTS_REPLACE); + } } return $jspath . '/' . $filename; Index: modules/system/system.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.admin.inc,v retrieving revision 1.174 diff -u -p -r1.174 system.admin.inc --- modules/system/system.admin.inc 13 Aug 2009 03:03:04 -0000 1.174 +++ modules/system/system.admin.inc 13 Aug 2009 18:26:09 -0000 @@ -1437,12 +1437,30 @@ function system_performance_settings() { '#default_value' => intval(variable_get('preprocess_css', 0) && $is_writable), '#disabled' => $disabled, ); + if (variable_get('preprocess_css', 0)) { + $form['bandwidth_optimization']['css_gzip_compression'] = array( + '#type' => 'checkbox', + '#title' => t('Gzip compress CSS aggergated files'), + '#default_value' => variable_get('css_gzip_compression', FALSE), + '#disabled' => !(function_exists('gzencode') && zlib_get_coding_type() == FALSE), + '#description' => t('This option should be disabled when using a webserver that performs compression.'), + ); + } $form['bandwidth_optimization']['preprocess_js'] = array( '#type' => 'checkbox', '#title' => t('Aggregate JavaScript files into one file.'), '#default_value' => intval(variable_get('preprocess_js', 0) && $is_writable), '#disabled' => $disabled, ); + if (variable_get('preprocess_js', 0)) { + $form['bandwidth_optimization']['js_gzip_compression'] = array( + '#type' => 'checkbox', + '#title' => t('Gzip compress JavaScript aggergated files'), + '#default_value' => variable_get('css_gzip_compression', FALSE), + '#disabled' => !(function_exists('gzencode') && zlib_get_coding_type() == FALSE), + '#description' => t('This option should be disabled when using a webserver that performs compression.'), + ); + } $form['#submit'][] = 'drupal_clear_css_cache'; $form['#submit'][] = 'drupal_clear_js_cache';