Sorry folks, it turns out that the discard_first_request flag in
repoze.profile wasn't
working correctly in my last round of
tests, which
skewed the absolute number of profile lines emitted by each
profile run for all frameworks. The previous conclusion
counted profile lines which were only meaningful for the first request.
This was due to a bug in repoze.profile. Since they only happen on the first request, these
lines are not indicative of reality, so I've redone the tests.
I've released a fixed version of repoze.profile (0.7), and I've updated the numbers using this version. This time, however, the first request is actually discarded, so its function calls don't show up in the profiler output. The resulting numbers, linked to detailed output, are below:
Links to those numbers lead to repaired profile output as well as enough
information to reproduce the test on your own system. I've amended
the previous blog
post with a
pointer to this one. Note that instead of using ab -n1000 -c4, I used ab -n1001 -c4 in
order to show even numbers for most of the lines in each profile
result.
The relative numbers between frameworks are not completely wildly different (previously they had been bfg 50, django 105, pylons 163, and grok 834; the relative "ranking" remained the same), Grok definitely got the short end of the stick on the last round of tests, they now fare better by a little less than 3X (apologies Grok folks). It should also be noted that the Pylons trunk fares better on this test, if you also use the Routes trunk and the WebOb trunk. Django fared better by half in this round as well.