Switching From WordPress To Jekyll

Filed in Cloud Industry Insights by Philip Thomas | December 19, 2012 3:00 pm

Incumbant: WordPress
I have used WordPress[1] to manage my personal website for the past two years. The system performed excellently, and it consistently handled traffic spikes with quick load times.

I have been on a discounted trial with my current hosting provider so cost has not been an issue. With the trial concluding, I sought a new host because the convenience afforded by the service does not justify its full cost.

Enter Jekyll
A recent article about the technology behind the Obama fundraising campaign piqued my interest. Their network used Jekyll[2]-generated static pages hosted on the Akamai CDN to accept $250 million in campaign donations. WordPress caching plugins essentially aim to serve the site with static pages, so the idea of generating static pages locally using Ruby then serving a purely static site made logical sense.

Jekyll, however, is not an automated content management system – it requires basic familiarity with Ruby, HTML and CSS. The technical granularity coupled with the ability to version-control the website with Git appealed to me.

Using a CDN to purely serve a website intrigued me most because of the potential for extremely fast speeds with near-infinite scalability. Putting my personal website on Akamai would be like strapping a Kestrel rocket[3] on the back of my Honda Civic.

Switch
The full code for my website is available on Github here[4]. Learning Jekyll and using its plugins proved quite trivial.

The tedious part of the shift was redirecting the permalinks from my WordPress site to the Jekyll site. My previous website was based on the naked domain, whereas using a CDN requires a subdomain (for a CNAME record). Thus, I had to switch both permalink structure and domain. I did this manually with 301 directs in .htaccess served by Heroku[5]. That file is here[6]. After putting the redirects online, I then manually submitted a crawl request[7] through Google for each old page. This process, though tedious, preserves inbound links and SEO.

Rackspace[8] offers access to the Akamai CDN through Cloud Files[9]. Using Akamai with Jekyll required much tinkering because the platform was not designed to serve a full website. After many calls to Rackspace’s Fanatical Support team, I was able to overcome all issues, including caching limitations. I have decided to provide a full guide to interfacing Jekyll with Akamai in a separate forthcoming blog post in order to cover all of these idiosyncrasies in sufficient deal.

Results

With my prior hosting provider, I consistently clocked page load times under two seconds. With this Jekyll implementation, load times closer to 300 milliseconds have been average, with the occasional sub-100-millisecond reading, as shown above (via Pingdom[10]). While these speeds are outrageous, it is exciting to realize that with Akamai as a host this speed is essentially independent of scale, and the network can accommodate nearly any traffic level I could expect.

Of note, though, these page load speeds are so excellent because the site is static content. Making a website scale at these speeds with database queries and sessions would be much more difficult.

This post is the first in a two-part series. Tune in tomorrow for a guide to maintaining a Jekyll website on the Rackspace Cloud Files CDN Network powered by Akamai.

Endnotes:
  1. WordPress: http://wordpress.org
  2. Jekyll: http://jekyllrb.com
  3. Kestrel rocket: http://en.wikipedia.org/wiki/Kestrel_%28rocket_engine%29
  4. here: http://github.com/philipithomas/www.philipithomas.com
  5. Heroku: http://heroku.com
  6. here: https://github.com/philipithomas/philipithomas301/blob/master/.htaccess
  7. crawl request: http://support.google.com/webmasters/bin/answer.py?hl=en&answer=1352276
  8. Rackspace: http://rackspace.com
  9. Cloud Files: http://www.rackspace.com/cloud/public/files/
  10. Pingdom: http://tools.pingdom.com

Source URL: http://www.rackspace.com/blog/switching-from-wordpress-to-jekyll/