My last post on how to optimize WordPress covered some general optimization techniques to speed up a website. Reducing HTTP requests, removing wasteful plugins and decreasing file sizes helped quite a bit. Now it’s time to try out page caching.
If you remember, the five things that normally occur for each page are:
- Initialize PHP
- Query the database
- Create the page
- Send the page
- Send additional files
All of the plugins were fairly easy to install. And I discovered during my tests that WP Super Cache, at least at Nearly Free Speech.NET, works just fine with safe mode on.
This graph shows the time it took to load my home page with each of the caching plugins enabled. I have circled the point where I first turned on page caching.
Hyper Cache and WP Super Cache both performed well. W3 Total Cache seemed to struggle. It does more than page caching, like reformatting files to save space, but clearly slowed things down.
WP Super Cache has a few advantages over Hyper Cache:
- It supports browser caching better
- It doesn’t need to load PHP
- It checks for security problems and suggests fixes
So I am now a happy WP Super Cache user.
UPDATE Dec 2009:
After a few days, I started having issues with WP Super Cache and switched back to Hyper Cache. You can see how the irregularities went away. I’ve been using Hyper Cache for almost a week now, and things have remained stable.
After being contacted by the author of the W3 Total Cache plugin, I’ve agreed to give it another try. I turned off all the settings except for “disk enhanced” page caching. I’ll update the article again in a few days.
UPDATE Jan 2010:
After looking into things a bit more, my results are still showing Hyper Cache to be faster than W3 Total Cache. However, when I test using the curl command line tool from home, it seems that both plugins are about the same speed. My web hosting company uses a network-level reverse proxy and a few other caching tricks that eliminate the need for some of the features provided by these types of plugins. I’m not sure what’s going on here, but will be sticking with Hyper Cache for now since it appears to work better with my particular situation.
I do like that W3 Total Cache handles page compression properly. I could not get page compression to work with Hyper Cache and had to turn it off. I’d recommend you try all three plugins and measure which works best for you.
UPDATE Apr 2010:
I’ve been having some troubles with Hyper Cache recently. Page redirects were working properly in Firefox, but not in Safari. I tried a new caching plugin I hadn’t heard of before: Quick Cache. Redirects are now working in both browsers. After a week of using Quick Cache, it’s performance is very good. I’ve decided to stick with it.
Early this year, I switched from Movable Type to WordPress for my blog. I’ve been very happy with that decision. So I thought I’d give an update on how I feel after using WordPress for eight months.
First, I should say that the speed issue hasn’t bothered me like I thought it would. I haven’t added caching, but may still do so at some point. Let me know if things feel slow.
Second, I’ve changed the which plugins I use, so let me give you the current list.
- NEW — Twitter Friendly Links let’s me use my own domain for short URLs instead of Bit.ly or TinyURL.com
- NEW — RF Twitter Post will update Twitter when I write a new post. I’m testing this one and hoping the next version adds support for Twitter Friendly Links
- NEW — SexyBookmarks makes it easy for readers to share things they find interesting
- Aksimet filters comments from spammers of which there are many
- All in One Adsense and YPN handles the ads on my site though I have them turned off now
- FD Feedburner Plugin lets me use FeedBurner for my RSS feeds
- Google Analyticator adds the Google Analytics tracking code
- KB Robots.txt allows me to add my sitemap to my robots.txt file
- Markdown allows me to write using Markdown syntax
- Recently Popular highlights what posts people find interesting
- Simple Google Sitemap automatically creates a sitemap for me
- Twitter lets you know exactly what I’m up to at all times
- WP-DB-Backup makes it easy to back up the content on my site
- Yet Another Related Posts Plugin suggests additional posts that relate to the one you’re reading
Since January, I’ve stopped using
Automatic Timezone because putting WordPress 2.8 and PHP 5 together makes the daylight savings time magic work.
Third, I was able to find several WordPress themes that I liked and get them installed fairly easily. And switching between them is simple.
Overall, I’m still very happy.
About two years ago, I installed Mephisto and started blogging. I chose Mephisto mainly because it was written in Ruby, one of my favorite programming languages. However, I soon realized I was better off using the best tool for writing instead of caring so much about which language the tool was written in.
So I moved from Mephisto to Movable Type and was very happy with the switch. For a while anyway. Recently, there were several things about Movable Type that started to really bother me.
- Manual upgrades were annoying as they seemed to take a lot of time, and I occasionally broke things during the process.
- I never figured out how to install my own themes. My site looked bland for a long time while I waited for better default themes.
- I couldn’t figure out plugins either. I wanted to customize the sidebar of my site, so I ended up spending a lot time changing the theme by hand. After that, I couldn’t switch themes without losing all my work.
- Publishing static content just took too long. My site loaded quickly because of it, but I wanted something that wasn’t so annoying to me.
- I tried switching to dynamic publishing, but it didn’t work very well. It may have been my web hosting company, but I really like them and don’t want to switch.
My first thought was to try the hosted version of Movable Type over at TypePad. I’d never have to do an upgrade, and I assume the included themes are much nicer. However I decided that $9 a month is more than I wanted to pay to use my own domain.
Several of my friends and family use Blogger, which is free, so it seemed a good place to try next. Blogger only includes a few default themes, but adding your own is easy. It feels like thousands of custom themes are available, though I would have to install and maintain them myself.
Blogger does not support uploading PDF or MP3 files, which isn’t convenient, but I probably could have hosted them elsewhere without too much trouble. I also would have lost the ability to have a static page for our family newsletters. But the biggest issue was email. I couldn’t use my own domain unless I switched to Google Apps for email.
WordPress provides free hosted blogging accounts, so I thought I’d give it a shot next. I got quite far along the road to satisfaction. MP3 files were still evil, but PDF files were okay. $10 to use my own domain seemed reasonable. I found a theme I liked, and there was enough built-in functionality to get my sidebar set up how I wanted.
The biggest win was not worrying about upgrades or performance. WordPress would even import a blog exported by Movable Type. Awesome. Except I’d written everything in Markdown format, which wasn’t supported.
The WordPress guys said Markdown was more demanding on their systems, which sounded fair enough. So I had some fun writing a script to convert my Markdown-formatted blog entries to HTML. During the process, I found several broken links, which I was glad to fix.
But I found that writing HTML takes longer than writing Markdown. Not surprising really. It’s why John Gruber created it in the first place. Then I discovered that embedding YouTube videos required using some proprietary format. And then I realized they had the same email problem that haunted Blogger. I don’t want to switch to Google Apps. Please just add email forwarding as a paid upgrade.
I wasn’t happy. But after reading a bit more, I stumbled across the fact that the WordPress software could update itself. Interesting. I decided to try installing it myself.
Installing themes and plugins turned out to be fairly easy — unzip a theme into the themes directory, then select it on the Themes page; unzip a plugin into the plugins directory, then activate it on the Plugins page. Wash, rinse, repeat. Some of the plugins put their configuration pages into odd locations, but I was able to track everything down. And once I’d set up a widget in my sidebar, I could change themes without losing anything. It just worked.
Well, mostly. WordPress says it supports installing and updating plugins from within the software itself, which would be awesome, except that I couldn’t get that to work. Manual installation was easier. I sigh and shake my head whenever I think about it.
2009-01-21: I got automatic plugin installs to work by following these instructions (member’s only) on NearlyFreeSpeech’s forums:
- First I created a folder at the root of my site called “tmp” (for me, it was /home/public/tmp).
- Then I added this line to my WordPress configuration file:
The problem is that WordPress tries to download stuff to a temp folder before moving it to its final destination, but the system settings had the wrong temp folder listed. Since I’m running with PHP’s safe mode on, WordPress couldn’t read or write to the temp folder, causing the whole thing to fail.
It’d be nice if WordPress added a “Temp Folder Location” setting to their configuration options or just downloaded stuff directly to its destination if the temp folder is inaccessible.
I’m happier now that I can install, update and remove plugins, as well as update WordPress itself, all from within WordPress.
Here are the plugins I’m using right now.
- Automatic Timezone because WordPress is too lame to figure this out on its own.
- Google Analyticator adds the Google Analytics tracking code.
- Simple Google Sitemap automatically creates my sitemap.
- KB Robots.txt allows me to add my sitemap to my robots.txt file.
- Markdown (of course :-))
- Recently Popular highlights what people are reading on my site.
- Twitter lets you know exactly what I’m up to at all times. You do want to know this, right?
- Yet Another Related Posts Plugin works great and requires no work at all.
- Next of Kin isn’t activated yet, but I’m thinking about it.
- All in One Adsense and YPN handles the ads on my site.
- FD Feedburner Plugin lets me use FeedBurner for my feeds.
I tried these out, but stopped using them pretty quickly.
WordPress.com Statswas annoying because it required me to login to my WordPress.com account every time, which didn’t work reliably. The reports and statistics were pretty good when I could get it to work. Redirectionhas a feature where it monitors post and category URL changes and automatically starts redirecting visitors. However, when I deleted a category, it created an endless redirection loop that took down my entire site. Other than that, it worked pretty well at helping me figure out and solve problems with missing pages.
I recently noticed two more things about WordPress that I really like.
- A word count is always visible when I’m writing. I’m happy the final version of this article is a few hundred words shorter than the original.
- My comments are automatically highlighted in a different color, which makes it easy for readers to find my replies. Not that you’d miss me in a list of three comments.
There are a couple of things I don’t like about WordPress.
- Maybe I’m just used to Movable Type’s static publishing, but I’m not sure that’s a valid excuse for WordPress to be slow. Luckily, there are caching plugins that should help a lot. I find I prefer cached dynamic content over pre-published static pages. At first, it didn’t seem to matter, but one is handled for you behind the scenes while the other is constantly in your face. It may be a personal preference, but it makes a difference to me.
- The media library is pretty lousy. You can’t rename files, though you can delete and re-upload the file with a new name. I have to be extremely careful when uploading files.
Overall, I’m very happy with WordPress. There is lots of good, very little bad, and no ugly. The hardest part was trying out similar plugins and picking the best ones to keep.