We've known for a long time that Typesetter is fast. It's something we take pride in, so we make performance stats readily available. Anyone with a Typesetter installation can see memory usage and page load times in the admin toolbar under the "Performance" section.
These performance stats only show part of the picture though. They're just snapshots of what happens for one user during a single page request. But what happens when 100 people try visiting a site at the same time? How quickly can the server respond to 100,000 requests? Fortunately, the folks over Apache have already thought about this and created the Apache Bench Utility.
Using the Apache Bench utility, I recorded the amount of time required to complete a variety of tests. Each test configuration was run independently on an installation of Typesetter and, to put the results in perspective, an installation of Wordpress, which is the most common CMS in use today. Each CMS was freshly installed without any modification or optimizations to the code or content.
Tests ranged in number of requests (from 100 - 100,000) and number of concurrent requests (1 - 100). For example, the following commands were used to get benchmarks for 10,000 requests with 10 concurrent requests:
> ab -n 10000 -c 10 http://localhost/Wordpress/
> ab -n 10000 -c 10 http://localhost/Typesetter/
As you can see in the table below, Typesetter outperformed Wordpress in every configuration of the test we tried. The best Wordpress faired was over 8 times slower than Typesetter and got as bad as nearly 12 times slower.
Let's look at these results in another way. In less than the amount of time it took Wordpress to serve 100 requests, Typesetter was able to serve 1,000. While Wordpress was busy handling 1,000 requests, Typesetter finished 10,000.
In the amount of time it likely took you to read this post, Typesetter can handle 100,000 requests. In order for Wordpress to serve those same 100,000 requests, you'd probably have to read this post 10 times. That's 9 times too many.
Less.php: less.js ported to PHP