Skip to content
This repository
Newer
Older
100644 186 lines (144 sloc) 7.568 kb
e94ec84d »
2012-02-18 Initial commit
1 ================================================================================
2 The Great Web Framework Shootout
3 ================================================================================
4
5 | Copyright: (c) 2012 Seth Davis
6 | http://blog.curiasolutions.com/the-great-web-framework-shootout/
7
8
9 Synopsis
10 ================================================================================
11
12 Welcome to the great web framework shootout. Here you will find test code and
13 benchmark results comparing the performance of a few of the most popular F/OSS
14 web frameworks in use today.
15
a1ceb31c »
2012-02-20 More updates to the README to try to clear up confusion
16 Please see `The Great Web Framework Shootout's website`_ for important
17 disclaimers and other detailed information about these benchmarks. If you have
18 any questions or comments, feel free to contact me on `Google+`_.
e94ec84d »
2012-02-18 Initial commit
19
ebe83c55 »
2012-02-19 Gardening README
20 .. _The Great Web Framework Shootout's website:
e94ec84d »
2012-02-18 Initial commit
21 http://blog.curiasolutions.com/the-great-web-framework-shootout/
a1ceb31c »
2012-02-20 More updates to the README to try to clear up confusion
22 .. _Google+: http://profiles.google.com/seedifferently
e94ec84d »
2012-02-18 Initial commit
23
24
1ba4ac44 »
2012-02-19 Adding "Real world value?" section to the README
25 "Do these results have any real world value?"
26 ================================================================================
27
28 Probably not. When it comes to code, the slightest adjustments have the
29 potential to change things drastically. While I have tried to perform each test
30 as fairly and accurately as possible, it would be foolish to consider these
31 results as scientific in any way. It should also be noted that my goal here was
32 not necessarily to figure out how fast each framework could perform at its *most
33 optimized* configuration (although built-in caching and other performance tweaks
34 were usually enabled if the default configuration permitted it), but rather to
35 see what a *minimal "out-of-the-box" experience* would look like.
36
37 Additionally, nothing here is intended to make one web technology appear
38 "better" than another. When it comes to using the right tool for the job,
39 "faster" does not necessarily mean "better" (very few real world projects are
40 going to depend solely on page request speeds).
41
42
64c68ed1 »
2012-02-19 Gardening README
43 "Will you please add XYZ to the results?"
0cb80c0e »
2012-02-19 Adding "Will you add XYZ?" section to the README
44 ================================================================================
45
46 Maybe, if you can convince me that enough people would be interested in having
0425e9e4 »
2012-02-21 Adding note about submitting pull requests to the "dev" branch
47 it displayed next to heavyweights like Rails and Django. Fork the repository
48 and submit a pull request under the `dev` branch with a test app in the same
49 format as the other tests, and make sure you include your best sales pitch.
0cb80c0e »
2012-02-19 Adding "Will you add XYZ?" section to the README
50 Otherwise, I'd suggest you boot up the EC2 AMI and do your own benchmarking.
51
52
e94ec84d »
2012-02-18 Initial commit
53 Benchmark Results
54 ================================================================================
55
a1ceb31c »
2012-02-20 More updates to the README to try to clear up confusion
56 Three basic tests were set up for each framework to run. Below are the results
57 of each test in requests per second from highest (best performance) to lowest
58 (worst performance).
e94ec84d »
2012-02-18 Initial commit
59
2a208993 »
2012-02-19 Adding note to the README about how unfair this all is.
60 Remember: Comparing all of these framework tests side-by-side isn't really
61 "fair" because they are all so different. Compiled languages (e.g. Go) are
62 expected to be faster than scripted languages. Tests using an ORM (e.g. Rails,
63 Django, Pyramid, etc.) are expected to be slower than tests using only a plain
64 database library (e.g. Bottle, Flask, Sinatra, etc).
65
a1ceb31c »
2012-02-20 More updates to the README to try to clear up confusion
66 Please see `the website`_ for more detailed information and a better breakdown
67 of the tests (graphs included!).
68
69 .. _the website:
70 http://blog.curiasolutions.com/the-great-web-framework-shootout/
71
e94ec84d »
2012-02-18 Initial commit
72
73 The "Hello World" String Test
74 --------------------------------------------------------------------------------
75
76 This test simply spits out a string response. There's no template or DB calls
77 involved, so the level of processing should be minimal.
78
79 ================= ========
80 Framework Reqs/sec
81 ================= ========
82 web.go (Go r59) 3346
83 Pyramid 1.2 3026
84 Bottle 0.9.6 2825
85 Django 1.3.1 2159
86 Flask 0.7.2 2054
87 Sinatra 1.2.6 1583
88 CodeIgniter 2.0.3 929
89 TG 2.1.2 839
90 Yii 1.1.8 726
91 Kohana 3.2.0 714
92 Rails 3.1 711
93 Symfony 2.0.1 273
94 CakePHP 1.3.11 254
95 ================= ========
96
97
98 The "Hello World" Template Test
99 --------------------------------------------------------------------------------
100
101 This test prints out Lorem Ipsum via a template (thus engaging the framework's
102 templating systems).
103
104 ================= ========
105 Framework Reqs/sec
106 ================= ========
107 Bottle 0.9.6 2417
108 web.go (Go r59) 1959
109 Flask 0.7.2 1918
110 Pyramid 1.2 1650
111 Sinatra 1.2.6 1329
112 Django 1.3.1 1005
113 CodeIgniter 2.0.3 884
114 Kohana 3.2.0 675
115 TG 2.1.2 663
116 Rails 3.1 625
117 Yii 1.1.8 548
118 CakePHP 1.3.11 203
119 Symfony 2.0.1 171
120 ================= ========
121
122
123 The "Hello World" Template Test With DB Query
124 --------------------------------------------------------------------------------
125
126 This test loads 5 rows of Lorem Ipsum from a SQLite DB (via the default ORM or
127 a sqlite3 driver) and then prints them out through a template (thus engaging
128 both the framework’s ORM/DB driver and the templating system).
129
130 ================= ========
131 Framework Reqs/sec
132 ================= ========
133 Bottle 0.9.6 1562
134 Flask 0.7.2 1191
135 Sinatra 1.2.6 982
136 web.go (Go r59) 741
137 Pyramid 1.2 555
138 CodeIgniter 2.0.3 542
139 Django 1.3.1 465
140 Rails 3.1 463
141 Kohana 3.2.0 423
142 TG 2.1.2 298
143 Yii 1.1.8 201
144 CakePHP 1.3.11 193
145 Symfony 2.0.1 113
146 ================= ========
147
148
149 Test Platform Setup
150 ================================================================================
151
152 All tests were performed on Amazon's EC2 with the following configuration:
153
154 * ami-fbbf7892 m1.large ubuntu-images-us/ubuntu-lucid-10.04-amd64-server-
155 20110719.manifest.xml
156 * As a "Large" instance, Amazon describes the resources as: 7.5 GB of memory, 4
157 EC2 Compute Units (2 virtual cores with 2 EC2 Compute Units each), 850 GB of
158 local instance storage, 64-bit platform.
159 * Apache 2.2.14 was used. (Yes, I know there are other options, but with
160 Apache's market share I figured it would be a good baseline.)
161 * Python 2.6.5 and mod_wsgi 2.8 (embedded mode) were used for the Python based
162 tests.
163 * Ruby 1.9.2p290 and Phusion Passenger 3.0.9 were used for the Ruby based tests.
164 * PHP 5.3.2 (with APC enabled) was used for the PHP based tests.
165 * ApacheBench was run with -n 10000 and -c 10 about 5-10 times each, and the
166 "best guess average" was chosen.
167
168
169 Most Recent Changes
170 ================================================================================
171
172 09/12/2011
173 --------------------------------------------------------------------------------
174
175 * Updated Ubuntu LTS AMI (ami-fbbf7892 ubuntu-images-us/ubuntu-lucid-10.04-
176 amd64-server-20110719.manifest.xml)
177 * Rails 2.x and 3.0 were dropped in favor of Rails 3.1.
178 * CakePHP 1.2 was dropped in favor of 1.3, but Symfony and Yii were added as
179 they seem to have considerable market share.
180 * Corrected faulty configuration of CakePHP's caching engine.
181
182 See `CHANGELOG.rst`_ for more.
183
184 .. _CHANGELOG.rst: http://github.com/seedifferently/the-great-web-framework-
185 shootout/blob/master/CHANGELOG.rst
Something went wrong with that request. Please try again.