Blog updates: faster, mathier, and more cacheable

Posted by Tom Moertel Mon, 27 Dec 2010 00:14:00 GMT

After much neglect, my poor blog is finally getting some much-needed care.

The first improvement I wanted to make was to add support for TeX mathematics. Last week’s article on how to update your beliefs after observing a coin toss contained enough painstakingly entered mathematical notation to provide the necessary motivation. The solution I preferred was MathJax, a JavaScript library that runs in the browser to render TeX markup into mathematical notation after a page is loaded. But that solution created a new problem.

MathJax, you see, has a rather large footprint. And my blog runs on a decrepit server that is already overtaxed. So, to use MathJax, I first had to put a reasonably tuned cache in front of my blog to offload the byte-slinging duties soon to be imposed.

Varnish

Enter Varnish, an efficient, highly tunable, caching HTTP proxy. I set it up on a front-end server and told it to cache anything mostly static on the blog’s server:

# allow caching of mostly static resources
sub vcl_fetch {
 if (req.url ~ "\.(ico|png|gif|jpg|swf|css|js)$" ||
     req.url ~ "^/xml/.*\.xml$" ||
     req.url ~ "^/$") {
   set obj.ttl = 600s;
 }
 if (req.url ~ "/javascripts/MathJax/") {
   set obj.ttl = 3600s;
 }
 if (req.url ~ "\.(ico|png|gif|jpg|swf|css|js)\?[0-9]+$") {
   set obj.ttl = 1d;
 }
}

Basically, that bit of Varnish Configuration Language says that after the proxy fetches a resource from the back-end blog server, if it’s an image, script, feed, or MathJax resource, it should be given some reasonable amount of time to live in the cache. Once in the cache, Varnish will serve it up until its time to live expires, when Varnish will finally ask the old blog server to fetch another copy.

This little change made a big difference in my blog’s responsiveness. It feels much snappier now. (Let me know if you agree.)

MathJax

The front-end cache done, I moved on to installing MathJax. Basically, I downloaded a couple of Zip archives, decompressed them, and dropped the resulting files onto my blog’s server. Then I tweaked the blog’s default page template to load the root MathJax JavaScript file. That’s it.

Now I can have fun with TeX-markup mathematical formulas on the blog: $$1 + x_1 + x_2 + \cdots$$

The only downside to using a client-side library like MathJax is that it will probably not go so well for readers using Instapaper and e-readers. (If you’re one of them, let me know how it goes for you.)

Posted in
Tags , , , , ,
3 comments
no trackbacks
Reddit Delicious

Comments

  1. Gabriel said about 10 hours later:

    “The only downside to using a client-side library like MathJax is that it will probably not go so well for readers using Instapaper and e-readers. (If you’re one of them, let me know how it goes for you.)”

    I am one of them, and it goes fine because I know Latex markup.

  2. Andre said 1 day later:

    The equations show up as Latex markeup in the RSS feed.

  3. Yitzhak said 16 days later:

    “The only downside to using a client-side library like MathJax is that it will probably not go so well for readers using Instapaper and e-readers.”

    Or for those like me, who have Javascript disabled for normal browsing.

Trackbacks

Use the following link to trackback from your own site:
http://tea.moertel.com/articles/trackback/1799

(leave url/email »)

   Comment Markup Help Preview comment