How many times were you curious which one of, modern web frameworks is the best? For developers who have their favourite, answer is simple. But there are plenty of questions from begginers or devs who want to learn new technology, wondering which one should take, to stay on the edge.
I code in Symfony (PHP) since 2008 and this one is my favourite. But from time to time I have opportunity to use some other technology. I wrote my master thesis project in Django, and found it very handy and sexy. Lately I’m doing a little bit in Ruby On Rails. I never coded in Ruby. It was always a little bit awkward language for me. But since I tried it, I really appreciate it.
If you ask me, which one is the best – I can’t point one, all of them are very good. But let’s try to measure frameworks. For purpose of this article, I created three applications in Symfony2, Django and Ruby On Rails. All those apps do the same – show two tables, one shows top USA cities (by population), second shows US states with highest number of big cities (above 100k citizens). I don’t want to measure frameworks by echoing “Hello world”, because it’s pointless. Assumptions:
- each application uses same fixtures – cities and states (provided by sql script),
- applications uses sqlite3 database
- applications uses default ORM (Doctrine2 for Symfony, Django ORM and Active Record for RoR),
- queries are as optimized, so one view uses two queries,
- html is rendered by built-in templating engine,
- every float number in template is rounded to one decimal place and formatted thousands with comas.
|Ruby On Rails||rails-thin.cities.sznapka.pl||github.com/wowo/cities-rails|
The performance was measured by linux CLI program ab. Each test were ran with concurency level 15 and for 240 seconds.
ab -c15 -t240 http://URL/
The result is shown in below table.
|Framework||Environment||Requests per second
|Time per request
|Symfony2||Apache2, PHP 5.3.5||53.85||18.569|
|Ruby On Rails||Thin, Ruby 1.8||35.51||28.159|
|Django||FCGI, Python 2.6.1||17.99||55.591|
UPDATE: there are some more accurate test results (with better environments): http://blog.sznapka.pl/always-use-most-latest-versions-for-benchmarks/
Lines of code
This factor could be tricky. Lines of code not always tells if the code is better or not. To measure that, I used sloccount, Linux program, which also calculates cost of creating this code based COCOMO method.
|Framework||Lines of code||Schedule Estimate
|Ruby On Rails||51||1.06||$ 1,187|
As you can see, with Rails you need the least number of lines of code, but with Django you will do it fastest.
All of measured technologies have strong and mature communities. They are well documented and has regular, stable release cycle. Only factor, that can be compared is community interest on Github.
|Framework||Watchers||Forks||Opened issues||Opened pull requests|
|Ruby On Rails||12004||2615||674||217|
* Please note, that Django repo is only SVN mirror
Ruby On Rails dominates in this section. Base on watchers, it has 4 times bigger community than other solutions.
As we can see in above comparisons, we can’t clearly determine which framework wins this comparison. Symfony2 is the fastest one, Rails has the biggest community and is cheapest to develop and Django has lowest Schedule Estimates. If you want to discover the most suitable solution for you and your project, you need to try those by yourself.
If you want to contribute, please write app in your favourite framework, which does excatly same as those above, share the code on Github, and let me know, I’ll be happy to extend this comparison.