As you may know, I use WP SuperCache on all of my blogs to enable them to handle the rather high loads the server runs at occasionally. One of the things that WP SuperCache does is enable compression for all of the cached pages. It’s an option in the control panel, which I ALWAYS enable. This saves a lot of bandwidth and makes pages download much faster for readers.
Well, what I didn’t realize was that the compression is only being performed on the cached files apparently. Because I did some testing and on the non-cached files there was no compression. So, I’ve got a really, really easy trick that anyone can do on their PHP blog to enable GZip compression.
Of course I’m going to show you how to do it in WordPress because that is what I know – but a simple one line addition to your theme file will enable it on any PHP based system (Drupal, Joomla, or whatever). If you have instructions for another CMS please let me know and I’ll add them here too.
What we are going to do is add a very simple line that tells your server to compress all of the HTML pages that it creates using the build in function that PHP has. In order to do this in WordPress all you need to do is go into your Admin control panel, and choose the Theme Editor under the Appearance menu.
Instructions
- Select the Header.php template
- Add the following line to the very beginning of the template (before anything else)
<? ob_start("ob_gzhandler"); ?>
- Save the template
- Have a cold beer.
That’s it. Your job is done.
GZip Compression Improvement
What will this do for you? Well, in my case lets look at the before and after results from OneMansBlog.com. These results were measured by the Firebug plugin for Firefox and each example was the best of three back to back pageloads. I also enabled the compression immediately between the before and after reloads to try and ensure similar load circumstances. The test was conducted via a 15mbps cable internet connection.
Prior to implementing GZip Compression the homepage was 99.6kb and took 1.96 seconds to download (click the image to view full size):
After turning on GZip compression in WordPress the homepage was compressed to 18.3kb, and it took only 1.15 seconds to download. The 80% page compression saved about 40% of the download time (click the image to view full size):
Once you’ve enabled compression you can go here to test your Webpage to see if it is working.
Whoopee! 1 Second. Who Cares?
Hold on there honcho. I managed to save about one second on just one pageload. On average I routinely get over 20,000 page loads per day. So that would be 20,000 seconds – or 5.5 hours – per day saved. That is 2,027 hours per YEAR – or the equivalent of an entire full time employee.
In addition, we saved over 80kb of data from being downloaded or 1.6 gigabytes per day. That is almost 600GB per year (128 complete DVDs) in what would have been completely wasted bandwidth.
Now, just imagine if everyone did this how much time we would save, and how much faster the Internet would be going. Heck, its a moral imperative for everyone to turn on compression!
So, what are you waiting for? Your readers are begging you to speed things up for God’s sake!
PS – You can try and find a plugin to do this for you too. But it’s so easy why not just add the line and be done with it?
Just wish to say your article is as surprising. The clearness on your post is simply excellent and i can assume you’re knowledgeable in this subject. Fine together with your permission let me to seize your feed to keep updated with forthcoming post. Thanks one million and please continue the rewarding work.
Thanks so much for this terrific tip on adding the code in the header.php to speed up site load pages! It worked like a charm and my pages are loading much, much faster. Still have some other things to work on though, like image lossing and some other stuff, but at least things are looking up, and this tip was soooo easy!
thanx is hosting problems :S
Wow…
Original Size: 76.21 KB
Compressed Size: 11.53 KB
Data Savings: 84.87%
That’s not bad at all!
can i use this with wp-total cache?
Great Tips, it works
Thanks
Thanks for this informative post. My website is being gziped after following your tips.
I tried and the script @Eddy suggested and got 500 error I am using Ultimate Seo any one have same problem.
I added as author suggested and got a blank page then I added php so it is
even then I got blank page.
Any suggestions
adimahardika.com
Original Size: 95.41 KB
Gzipped Size: 15.64 KB
Data Savings: 83.61%
I thank to you John. This is a great solution.
@iTechRoom – Yes, it conflicts with All in One SEO. It breaks the rewriting of the title tag.
Does this code conflicts with WP Super Cache plugin or WP All in one SEO plugin, It’s showing “Content Encoding Error” during first visit but works on refresh.
The very use plug HiperCashe, but the simplicity of the method was intrigued.
It’s a very simple but very useful tips. Checking the results for my site. Thanks for sharing
Load time before WP Cache enabled – 0.69 seconds
Load time after WP Cache enabled – 0.36 seconds
Amazing…!
I have just checked my site. See the results below. It is a huge difference, really.
Actual Page Size: 39.39 KB
Size if Gzipped: 9.19 KB
Potential Savings: 76.67%
Not working for Drupal.
Getting the Content Error:
The page you are trying to view cannot be shown because it uses an invalid “or unsupported form of compression.”
Quick update…this greatly decreased my load time, but it is not really compatible with the All in One SEO plug in – it breaks the title tag. FAS, this could also be the reason for the broken home page title. Are you using All in One SEO plugin?
For now I’ve removed gzip, installed WP Super Cache, and will consider using another SEO plugin so that I can use gzip.
Thanks for the great tip…hope to use it again soon!
Thanks for making this so easy. I’m always intimidated by things like this, and the previous suggestions I had read about how to implement gzip compression were beyond me. I added your code to my site in just a few seconds…
Now I have more time to enjoy that beer!
An alternative solution but guaranteed to work.
If you have an access to .htaccess file in your WordPress root folder, add this script at the very bottom: (just copy and paste)
SetOutputFilter DEFLATE
# Netscape 4.x has some problems
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48, the above regex won’t work. You can use the following
# workaround (comment the above line and uncomment the below line) to get the desired effect:
# BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
# Don’t compress already-compressed files
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:avi|mov|mp3|mp4|rm|flv|swf|mp?g)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .pdf$ no-gzip dont-vary
# Make sure proxies don’t deliver the wrong content
Header append Vary User-Agent env=!dont-vary
# AddDefaultCharset UTF-8
AddType text/x-component .htc
php_value upload_max_filesize 128M
php_value post_max_size 128M
php_value memory_limit 256M
php_flag zlib.output_compression On
Thanks for the tip and great explanation. I just finished reading quite a few tips on compression and wish I would have found yours first :)
If anyone suffers from ‘Content Encoding Errors’ after enabling GZIP, double check there is no whitespace before gzip is loaded in the header. I had this and it stumped me for weeks!
JOhn, Can you tell me why does the gzip cause the name of the home page title to change?
To those whose sitemaps and archives are not opening, add this code
Where X and Y are your pages to exclude from gzip compression.
The compression mentioned may do wonders, especially if quasi-static pages are used (as those generated by Super Cache).
I would only add that using Apache’ mod_deflate and a .htaccess directive
SetOutputFilter DEFLATE
(remember, you can apply it to any type of file using Files directive)
will apply the GZip compression to files not served by the WP or whatever engine do you use. If you allow downloading files that do compress even a while, that will donate to efficiency.
No sitemaps are not auto generated, sitemap and archives templates are there in the theme. Any solution to the problem? How to exclude sitemap and archives in the GZip compression.
Plus sometimes the home title changes to something else with this active.
In the past some browsers could not handle GZiped pages. But like 99% do now so it’s not a big deal.
That is weird. I can’t understand why it would work on some pages, but not others. And is your sitemap auto-generated? It shouldn’t even be using the same header.php file as the other stuff!
John
Great article. I implemented this tip into my wordpress blog and I can already see a difference.
I also would recommend WP Super Cache as a plugin that you need to have for your wordpress.org blog. It is invaluable!
I never thought of that. Thanks! My friend use to tell me that Gzipping is bad for your site. Maybe it was because he doesn’t know how to do it.
Ok John, its woriking but archives and sitemap are not showing up. It says The page you are trying to view cannot be shown because it uses an invalid or unsupported form of compression. This happens when the code you have given is added. Any solution?
Great find. But I still would prefer a plug-in ;-) Maybe WP should just come with Supercache by default, that would surely help and we could donate some bytes to people with less bandwith.
I put that code in but Firefox said it was unsupported file compression and would not render the page. Did not work in Safari either (mac versions both). Does WP SuperCache have to be enable for this code to work?
Thanks a ton, just added it. Is working fast, cant thank you enough :)
“Content Encoding Error
The page you are trying to view cannot be shown because it uses an invalid or unsupported form of compression.”
That’s if you use google cse search on your site with the default header.
Hi John and thanks! That saved 67% on my site. Appreciate the tip!
Thanks John, I have been looking for the past couple of days on ways to trim my blogs overhead. I added the code and cut my download by 80%.
Thanks for the tip John…I have a shared hosting plan on GoDaddy so I need all the help I can get to speed things up…