File compression is possible on Apache web hosts that do not have mod_gzip or mod_deflate enabled, and it’s easier than you might think.
A great explanation of why compression helps the web deliver a better user experience is at betterexplained.com.
Two authoritative articles on the subject are Google’s Performance Best Practices documentation | Enable compression and Yahoo’s Best Practices for Speeding Up Your Web Site | Gzip Components.
Compressing PHP files
If your Apache server does not have mod_gzip or mod_deflate enabled (Godaddy shared hosting, for one), you can use PHP to compress pages on the fly. This is still preferable to sending uncompressed files to the browser, so don’t worry about the additional work the server has to do to compress the files at each request. Add the following line of code to the top of your PHP pages, above the DOCTYPE declaration or first line of output:
<?php if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler"); else ob_start(); ?>
Credit: GoDaddy.com
Compressing CSS and JavaScript files
Because the on-the-fly method above only works for PHP pages, you’ll need something else to compress CSS and JavaScript files. These can be gzipped ahead of time, then uploaded along side the normal files. Use 7-Zip (quite possibly the best compression software around, and it’s free) to compress the CSS and JavaScript files as gzip, then upload them to your server. Add the following lines to your .htaccess file to send user agents the gzipped versions if they support the encoding.
<files *.js.gz>
AddType "text/javascript" .gz
AddEncoding gzip .gz
</files>
<files *.css.gz>
AddType "text/css" .gz
AddEncoding gzip .gz
</files>
RewriteEngine on
#Check to see if browser can accept gzip files.
ReWriteCond %{HTTP:accept-encoding} gzip
RewriteCond %{HTTP_USER_AGENT} !Safari
#make sure there's no trailing .gz on the url
ReWriteCond %{REQUEST_FILENAME} !^.+\.gz$
#check to see if a .gz version of the file exists.
RewriteCond %{REQUEST_FILENAME}.gz -f
#All conditions met so add .gz to URL filename (invisibly)
RewriteRule ^(.+) $1.gz [QSA,L]
Credit: opensourcetutor.com
I’m not sure it’s still necessary to exclude Safari.
For added benefit, minify the CSS and JavaScript files before gzipping them. Google’s excellent Page Speed Firefox/Firebug Add-on makes this very easy.
Verify that your content is being compressed
Use the nifty Web Page Content Compression Verification tool at http://www.whatsmyip.org/http_compression/ to confirm that your server is sending the compressed files.
Speed up page load times for returning visitors
Compression is only part of the story. In order to further speed page load times for your returning visitors, you want to send the correct headers to leverage browser caching.
I was trying to implement the solution for gzipping css and js files on godaddy, and it worked (gzipped file was served instead of normal), except for one problem: Firefox / chrome could not decompress the files outputting half-decompressed contents, so js stopped working completely. I used 7zip compressor (Gzip, method: deflate) to compress the files. I was so happy to see my jquery 1.3 downloading as 18kb file, but then disappointed to see js not working at all. Any idea why this could be happening?
The site is on shared hosting account with goDaddy, so there is no other option for compression js files.