Those who have worked with me know that I can become a bit obsessed with optimizing software. I like to think that as I’ve matured as a developer I’ve become more strategic and disciplined in my optimizations. Regardless, when programming, I’m often at my happiest when I’m making code go faster.
About two months ago I started a project to track how the performance of Clojurescript evolved with each commit to the repository. The project produces plots that look like this:
Each line of the plot represents a different Clojurescript runtime environment. On this plot we see Spidermonkey (the javascript implementation found in Firefox), JavaScriptCore (Webkit), and V8 (Chrome.) Also, included for comparison, is the same test running in Clojure on the JVM. I’ve carefully selected one of the cases where Clojurescript actually perfoms better than Clojure.
You can see all of the plots here.
Grab the source here.
One of my favorite engineering professors in undergrad told me that “measurement precedes control.” This is just as true when optimizing software as it is when building actuator control systems.