I order to choose the web framework that meets best my need for a further big project (web application for a real estate company), I have decided to do some benchmarks because good performance is one of the constraints with agility development.
The benchmarks are made with Apache HTTP server benchmarking tool launching a minimalist html w3C compliant web page which presents the list (in tags ul, li) of ten user names stocked in a Postgresql data base.
I arbitrarily chose the web framework Zend Framework (ZF 1.11.11), Zend Framework 2 (which is currently in beta stage), Symfony 2, PHP No-Framework (pure php), Pyramid and Express. I would like to test PlayFramework but I do not have time :(
For the PHP web frameworks, all the benchmarks are made with APC enabled the option apc.stat=0 (no disk access)
|CPU||Xeon 5500/Core i7|
|Disk||SSD, buffered disk reads : 288.51 MB/sec|
|OS||Gnu/Linux (Debian wheezy/sid)|
|PHP No-Framework||None (PDO)||PHP||Apache (libapache2-mod-php5)|
|ZF1 & ZF2||Zend_DB_Table||PHP||Apache (libapache2-mod-php5)|
|Framework||Time taken for tests||Requests per second (mean)||Time per request (mean, across all concurrent requests)|
|Express||0.066 s||2342.20||0.427 ms|
|Pyramid||0.775 s||199.95||5.001 ms|
|PHP No-Framework||0.882 s||175.76||5.690 ms|
|ZF1||1.197 s||129.53||7.720 ms|
|Symfony||1.218 s||127.28||7.857 ms|
|ZF2 (*beta stage*)||11.091 s||13.98||11091.008 ms|
Here are some charts that shows the evolution of response time based on the number of simultaneous requests and the level of competition.
I leave the reader in interpreting the results. Personally, my preference will go to Pyramid, but I'm not completely decided yet since I am more at ease in php.
All the results and the charts can be downloaded HERE.