Baked or fresh

Much talk recently about “baked” blogs, blogs whose HTML is served from a set of static files rather than generated on the fly. I think it started with this post from Brett Simmons. More recently, Marco Arment has been talking about developing a baked blogging system on the Build & Analyze podcast. And of course, every time a (dynamic) WordPress site gets Fireballed, John Gruber rhapsodizes on the virtues of (static) Movable Type.

I’m not convinced. While I think many dynamically generated sites should be static, simply because they don’t get updated often, an active blog doesn’t fall into that category. There are real advantages to a dynamic site, and losing those advantages on the off-chance that you’ll suddenly get a big surge of traffic doesn’t seem smart to me.

I have some experience in this area. This blog was run on Movable Type for a few years before I switched to WordPress in early 2008. I’m sure MT is better now than it was then, but my strongest memory of using it was the interminable wait for it to regenerate the site whenever I posted a new article or changed something in the layout. Maybe my web host’s server was misconfigured or overloaded, maybe MT was just really slow in those days, but I’d often have to wait several minutes for the site to update after submitting a post.

Another problem with Movable Type was the lack of pagination. Whenever I found a new blog that seemed interesting, I’d read the front page and (if I could) the next couple of pages to see if I wanted to subscribe to the site’s RSS feed. Movable Type didn’t come with pagination and I couldn’t find any plugins for it.1 One of the reasons I moved to WordPress was I noticed that WP sites always had a nice “Next” or “Previous Posts” link that would take you to the next page, whereas MT sites typically had some “Archives” link (or maybe a bunch of “Archives” links, one for each month) that wasn’t nearly as convenient.

Many of you may be thinking “Wait a minute. Didn’t you get Fireballed several weeks ago? Doesn’t that prove the value of baked blogs?” Well, the answer to the first question is yes.

Gruber linked to me sometime in the early evening of February 21. Shortly thereafter, he added a link to a cache of my page on fireballed.org, so my site must have been overwhelmed by the traffic for a while. I will say, though, that I was always able to get through, both that night and the next day when traffic almost as heavy.

Fireballed? It’s up for me.

7:29 PM Mon Feb 21, 2011

No doubt, part of the reason I was able to connect was that many people were going to the cached page. Still, I think my web host did a pretty good job with all but the very first spike in traffic. That Fireballed post was a particularly difficult one to serve because it included eleven self-hosted iPhone screenshot images.

As for the second question, there’s at least one way to make a dynamic site less susceptible to a Fireballing: caching. Not caching by someone else, caching by you—generating your own static files for pages as they are visited so that later visitors will get the faster static versions. There are at least a couple of caching plugins for WordPress.

Caching was on my mind last Wednesday night as I was thinking about what I was going to say in this post. Then on Thursday, like a gift from the gods, I saw a link to this post from Justin Williams, “Recipe for Baked WordPress,” in which Justin recommends W3 Total Cache. Just what I was looking for!

But like all gifts from the gods, this one had a catch. When I activated WP Total Cache, I got an error message about it not being able to find some function named shopp. OK, I thought, I’ll just go back to the plugins page and deactivate W3 Total Cache until I can fix the error.

I tried to go back to the plugins page and it wouldn’t load—same error message.

I tried to go back to the WordPress Dashboard and it wouldn’t load—same error message.

Now worried, I tried to go to my blog’s home page and it wouldn’t load—same error message.

Grrrrr! I FTP’d into the site, found a shopp-cache-helper folder in the WordPress plugins folder—that had to be the problem plugin. I deleted it and everything went back to normal.

Umm, @justinw? Followed the instructions to install W3 Total Cache and it took my site down. That doesn’t seem Fireball-proof.

1:19 PM Thu Apr 7, 2011

Still, caching seemed like a good idea, even if I couldn’t get W3 Total Cache to work. I tried another plugin, the similarly named WP Super Cache, and it installed and activated without a hitch. I don’t know if I have all the settings just right, but it’s definitely working. Despite my frustrated tweet, I’m now doing exactly what Justin recommended, just with a different plugin doing it.

So now I think I have the best of both worlds: a fresh, dynamic site that’s easy and fast to update with baked, static serving of popular pages. Do your worst, Gruber!

1. I note that MT has pagination now, but it looks like its done using dynamic generation. Marco Arment mentioned—in this podcast, I think—that he had looked for a way to paginate in his new system and couldn’t find a good (by which I assume he meant static) way to do it.