After the previous round of benchmarking, I received one very good criticism from Matthew Weier O’Phinney about it. He suggested that the hardware I was using, a PowerPC G4 Mac Mini, had an I/O system that was not representative of what a "regular" user would have as a web server. I have to agree with that.
As such, I have prepared a new set of benchmarks for Cake, Solar, Symfony, and Zend Framework using an almost identical methodology as last time.
Much of this article is copied directly from the previous one, as it serves exactly the same purpose, and little has changed in the methodology. Please consider the older article as superseded by this one.
Introduction
If you like, you can go directly to the summary.
This report outlines the maximum requests-per-second limits imposed by the following frameworks:
The benchmarks show what the approximate relative responsiveness of the framework will be when the framework’s controller and view components are invoked.
Full disclosure: I am the lead developer of one of the frameworks under consideration (Solar), and I have contributed to the development of another (Zend Framework). I have attempted not to let this bias my judgment, and I outline my methodology in great detail to set readers at ease concerning this.
Why These Particular Frameworks?
In my opinion, the frameworks in this comparison are the most full-featured of those available for PHP. They make good use of design patterns, provide front and page controllers, allow for controller/view separation, and offer an existing set of plugins or added functionality like caching, logging, access control, authentication, form processing, and so on.
Some Code Igniter folks left comments previously asking that I include CI in the benchmark process. I don’t mean to sounds like a jerk, but after reviewing the CI code base, it is my opinion (note the small "o") that it is not in the same class as Cake, Solar, Symfony, and Zend. I won’t go into further detail than that; I think reasonable and disinterested observers will tend to agree. Code Igniter is indeed very fast, but as I note elsewhere, there is more to a framework than speed alone.
Regarding frameworks in languages other than PHP, I don’t have the expertise to set them up for a fair comparison. However, you can compare the results noted in this report with this other report. Perhaps by extrapolation, one can estimate how Rails and Django compare to the other PHP frameworks listed here.
Methodology
For each of the frameworks tested, I attempted to use the most-minimal controller and action setup possible, effectively a "Hello World!" implementation using the stock framework components and no configuration files (or as few as the framework would let me get away with). This was the only way I could think of to make sure the tests were identical on each framework.
The minimalist approach measures the responsiveness of the framework components themselves, not an application. There’s no application code to execute; the controller actions in each framework do the least possible work to call a view. This shows us the maximum possible throughput; adding application code will only reduce responsiveness from this point.
In addition, this approach negates most "if you cache, it goes faster" arguments. The "view" in each case is just a literal string "Hello World!" with no layout. It also negates the "but the database connection speed varies" argument. Database access is not used at all in these benchmarks.
Server
Previously, I ran the benchmarks on a Mac Mini G4; as noted by others, it is not exactly a "real" production server. With that in mind, these new benchmark tests were run on an Amazon EC2 instance, which is a far more reasonable environment:
- 1.7Ghz x86 processor
- 1.75GB of RAM
- 160GB of local disk
- 250Mb/s of network bandwidth.
Clay Loveless set up the instance with …
- Fedora Core 5
- Apache 2.2 and mod_php
- PHP 5.2.0 with Xcache (64M RAM)
Setup
Each framework benchmark uses the following scripts or equivalents …
- Bootstrap file
- Default configuration (or as close as possible)
- Front-controller or dispatcher
- Page-controller or action-controller
- One action with no code, other than invoking a View processor
- Static view with only literal text "Hello World!"
… so the benchmark application in each case is very small.
I did not modify any of the code in the frameworks, except for one condition. I modified the bootstrap scripts so they would force the session_id() to be the same every time. This is because the benchmarking process starts a new session with each request, and that causes responsiveness as a whole to diminish dramatically.
Benchmarking Tools
I wrote a bash script to automate the benchmarking process. It uses the Apache benchmark "ab" tool for measuring requests-per-second, on localhost to negate network latency effects, with 10 concurrent requests for 60 seconds. The command looks like this:
ab -c 10 -t 60 http://localhost/[path]
The benchmark script restarts the web server, then runs the "ab" command 5 times. This is repeated for each version of each framework in the test series, so that each gets a "fresh" web server and xcache environment to work with.
Benchmark Results
Baseline
First, we need to see what the maximum responsiveness of the benchmark environment is without any framework code.
| framework | 1 | 2 | 3 | 4 | 5 | avg |
|---|---|---|---|---|---|---|
| baseline-html | 2613.56 | 2284.98 | 2245.98 | 2234.94 | 2261.01 | 2328.09 |
| baseline-php | 1717.74 | 1321.49 | 1292.86 | 1511.40 | 1327.35 | 1434.17 |
The web server itself is capable of delivering a huge number of static pages: 2328 req/sec for a file with only "Hello World!" in it.
Invoking PHP (with Xcache turned on) to "echo ‘Hello World!’" slows things down a bit, but it’s still impressive: 1434 req/sec.
Cake
I ran benchmarks for Cake with the debug level set to zero. I edited the default bootstrap script to force the session ID with this command at the very top of the file…
<?php
session_id('abc');
?>
… but made no other changes to the distribution code.
The page-controller looks like this:
<?php
class HelloController extends AppController {
var $layout = null;
var $autoLayout = false;
var $uses = array();
function index()
{
}
}
?>
The page-controller automatically uses a related "index.thtml" view.
Running the benchmarking script against each version of Cake gives these results:
| framework | 1 | 2 | 3 | 4 | 5 | avg |
|---|---|---|---|---|---|---|
| cake-1.1.10 | 85.65 | 85.87 | 85.71 | 85.66 | 85.93 | 85.76 |
| cake-1.1.11 | 113.78 | 114.13 | 113.59 | 113.35 | 113.73 | 113.72 |
| cake-1.1.12 | 114.62 | 114.26 | 114.55 | 113.89 | 114.64 | 114.39 |
So the most-recent release of Cake in a fully-dynamic mode has a top-limit of about 114 requests per second in the benchmarking environment.
Solar
The Solar bootstrap file looks like this; note that we force the session ID for benchmarking purposes.
<?php
session_id('abc');
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', true);
$dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
$include_path = $dir . 'source';
ini_set('include_path', $include_path);
require_once 'Solar.php';
$config = $dir . 'Solar.config.php';
Solar::start($config);
$front = Solar::factory('Solar_Controller_Front');
$front->display();
Solar::stop();
?>
The Solar page-controller code looks like this:
<?php
Solar::loadClass('Solar_Controller_Page');
class Solar_App_HelloMini extends Solar_Controller_Page {
public function actionIndex()
{
}
}
?>
The page-controller automatically uses a related "index.php" file as its view script, and uses no layout.
Running the benchmarking script against each version of Solar gives these results:
| framework | 1 | 2 | 3 | 4 | 5 | avg |
|---|---|---|---|---|---|---|
| solar-0.25.0 | 170.80 | 169.22 | 170.29 | 170.75 | 170.22 | 170.26 |
| solar-svn | 167.83 | 166.97 | 167.56 | 164.56 | 162.30 | 165.84 |
Clearly the current Subversion copy of Solar needs a little work to bring it back up the speed of the most recent release, but it can still handle 165 requests per second in the benchmarking environment.
Symfony
The Symfony action controller code looks like this:
<?php
class helloActions extends sfActions
{
public function executeIndex()
{
}
}
?>
The action controller automatically uses a related "indexSuccess.php" file as its view script. However, there is a default "layout.php" file that wraps the view output and adds various HTML elements; I edited it to look like this instead:
<?php echo $sf_data->getRaw('sf_content') ?>
If there is some way to make Symfony not use this layout file, please let me know.
Finally, I added session_id('abc'); to the top of the web/index.php bootstrap script to force the session ID to be same for each request.
Running the benchmarking script against each version of Symfony gives these results:
| framework | 1 | 2 | 3 | 4 | 5 | avg |
|---|---|---|---|---|---|---|
| symfony-0.6.3 | 53.10 | 53.15 | 52.27 | 52.12 | 52.10 | 52.55 |
| symfony-1.0.0beta2 | 67.42 | 66.92 | 66.65 | 67.06 | 67.83 | 67.18 |
It looks like the most-recent beta version of Symfony can respond to about 67 requests per second in the benchmarking environment.
Zend Framework
As before, the Zend Framework involves some extra work. As others have noted, Zend Framework requires more putting-together than the other projects listed here.
The Zend 0.2.0 bootstrap script looks like this …
<?php
session_id('abc');
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', true);
date_default_timezone_set('Europe/London');
$dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
set_include_path($dir . 'source/library');
require_once 'Zend.php';
require_once 'Zend/Controller/Front.php';
Zend_Controller_Front::run($dir . 'application/controllers');
?>
… and the Zend 0.6.0 bootstrap looks like this:
<?php
session_id('abc');
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', true);
date_default_timezone_set('Europe/London');
$dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
set_include_path($dir . 'source/library');
require_once 'Zend.php';
require_once 'Zend/Controller/Front.php';
$front = Zend_Controller_Front::getInstance();
$front->setControllerDirectory($dir . 'application/controllers');
$front->setBaseUrl('/zend-0.6.0/');
echo $front->dispatch();
?>
The differences are minor but critical, since the front-controller internals changed quite a bit between the two releases.
Similarly, the page-controller code is different for the two releases as well. Zend Framework does not initiate a session on its own, whereas the other frameworks do. I think having a session available is a common and regular requirement in a web environment. Thus, I added a session_start() call to the page-controller for Zend; this mimics the session-start logic in the other frameworks. Also, the Zend Framework does not automatically call a view, so the page-controller code below mimics that behavior as well.
The page-controller code for Zend 0.2.0 looks like this …
<?php
require_once 'Zend/Controller/Action.php';
require_once 'Zend/View.php';
class IndexController extends Zend_Controller_Action
{
public function norouteAction()
{
return $this->indexAction();
}
public function indexAction()
{
// mimic the session-starting behavior of other application frameworks
session_start();
// now for the standard portion
$view = new Zend_View();
$view->setScriptPath(dirname(dirname(__FILE__)) . '/views');
echo $view->render('index.php');
}
}
?>
… and the page-controller code for Zend 0.6.0 looks like this:
<?php
require_once 'Zend/Controller/Action.php';
require_once 'Zend/View.php';
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
// mimic the session-starting behavior of other application frameworks
session_start();
// now for the standard portion
$view = new Zend_View();
$view->setScriptPath(dirname(dirname(__FILE__)) . '/views');
echo $view->render('index.php');
}
}
?>
Running the benchmarking script against each version of Zend Framework gives these results:
| framework | 1 | 2 | 3 | 4 | 5 | avg |
|---|---|---|---|---|---|---|
| zend-0.2.0 | 215.91 | 208.50 | 207.84 | 210.43 | 211.73 | 210.88 |
| zend-0.6.0 | 133.60 | 134.18 | 132.10 | 129.53 | 130.16 | 131.91 |
In the benchmarking environment, the most-recent Zend Framework can handle about 131 requests per second.
But look at Zend 0.2.0 — 210 req/sec! Richard Thomas noted this in a comment on the last set of benchmarks. If that’s a sign of what a future release might be capable of, it’s quite stunning.
Summary
To compare the relative responsiveness limits of the frameworks, I assigned the slowest average responder a factor of 1.00, and calculated the relative factor of the others based on that.
| framework | avg | rel |
|---|---|---|
| cake-1.1.10 | 85.76 | 1.63 |
| cake-1.1.11 | 113.72 | 2.16 |
| cake-1.1.12 | 114.39 | 2.18 |
| solar-0.25.0 | 170.26 | 3.24 |
| solar-svn | 165.84 | 3.16 |
| symfony-0.6.3 | 52.55 | 1.00 |
| symfony-1.0.0beta2 | 67.18 | 1.28 |
| zend-0.2.0 | 210.88 | 4.01 |
| zend-0.6.0 | 131.91 | 2.51 |
Thus, the Zend 0.2.0 framework by itself is about 4 times more responsive than Symfony 0.6.3. (My opinion is that this is likely due to the fact that the Zend code does less for developers out-of-the-box than Symfony does.)
For comparison of the currently-available options, we can highlight the most-recent releases of each framework, and place them in order for easy reading:
| framework | avg | rel |
|---|---|---|
| solar-0.25.0 | 170.26 | 3.24 |
| zend-0.6.0 | 131.91 | 2.51 |
| cake-1.1.12 | 114.39 | 2.18 |
| symfony-1.0.0beta2 | 67.18 | 1.28 |
As we can see, the framework with the greatest limits on its responsiveness is Symfony. Zend is about 15% faster than Cake. And as with the last benchmark series, Solar has the least limit on its responsiveness in a dynamic environment.
You can download the individual benchmark log files, including the report summary table, here.
Conclusion
It is important to reiterate some points about this report:
-
The benchmarks note the top limits of responsiveness of the frameworks components themselves. This functions as a guide to maximum speed you will be able to squeeze from an application using a particular framework. An application cannot get faster than the underlying framework components. Even "good" application code added to the framework will reduce responsiveness, and "bad" application code will reduce it even further.
-
Each of these frameworks is capable of building and caching a static page that will respond at the maximum allowed by the web server itself (about 2300 requests/second, as noted in the baseline runs). In such cases, the responsiveness of the framework itself is of no consequence whatsoever. But remember: the moment you hit the controller logic of a framework, responsiveness will drop to the levels indicated above.
-
Dynamic responsiveness is only one of many critical considerations when choosing a framework. This benchmark cannot measure intangibles such as productivity, maintainability, quality, and so on.
Again, it is entirely possible that I have failed to incorporate important optimizations to one or more of the frameworks tested. If so, it is through ignorance and not maliciousness. If you are one of the lead developers on the frameworks benchmarked here and feel your project is unfairly represented, please contact me personally, and I’ll forward a tarball of the entire benchmark system (including the framework code as tested) so you can see where I may have gone wrong.
UPDATE (2007-01-05): I have created a repository of the benchmark project code for all to examine.
I am curious about the accuracy of the test results not because of configuration and versioning, but rather the fact that they are being performed on a virtualized system. The very nature of virtualization dictates that system resources are always in a state of flux. I do not have intimate knowledge of how EC2 is configured, but I have my doubts that each client gets their own physical machine.
If they don’t, there is know way you could reliably depend on the results being accurate as resources would be in contention while performing the benchmarks.
think your tests are off… i seem to get WAY faster benchmarks for cakephp. maybe your computer is too slow, 1.75gb ram and 1.7ghz processor is a few years behind. I would suspect all numbers in this case to be increased but you make everything sound like they are all slow…just from general usage of these frameworks, i’ve personally seen faster results. — course theoretically with better equipment everything should simply get faster respectively but who knows, i’m not sure if i’m convinced or if this report would convince me to investigate some of the other frameworks. thank you though for your opinions. it did get me to look into some things.
@Tom:
> think your tests are off… i seem to get WAY faster benchmarks for cakephp.
The test is a comparative one; as you note later, absolute figures will be
different on different hardware, but compared to each other, my bet is that
the results on different hardware will still be similar. One never knows
until one runs all the tests on the same target machine.
The real question is, did you run the benches for *all* the frameworks? If
not, you have missed part of the point of the article.
> maybe your computer is too slow, 1.75gb ram and 1.7ghz processor is a
> few years behind.
It’s an Amazon EC2 instance; try telling them that. ;-)
> thank you though for your opinions. it did get me to look into some things.
I’m glad you found the article useful.
For good or ill, the numeric results are not my “opinions” — although I’ll
grant that the methodology might be changed to suit anyone’s opinion on how to
test a framework.
Thank you Paul for the work you’ve done, and will likely now be “required” to continue :-) setting up the benchmark. Let me state my bias up front: In the interest of communal growth, learning, and support, I TRY to be aware of and to not project onto another person what my sense or belief of their “agenda†is outside of what they state themselves and how, in the best case scenario, full disclosure and chosen methodology, and the results of same, stack up against stated positions and opinions VERSUS the data driven results. I appreciate, and think it demonstrates character, and will underscore the point you make in your original work, and patiently in several follow-on replies, that you are open to opinions and suggestions around methodology as well as discussion of practical, demonstrable and repeatable experience, which, again my personal bias, is where engineering conversations and collegial activity best flourish. I want to also note that as a recent convert to Open Source in general, and to PHP/MySQL/Linux in particular (my background is in the big iron/data center driven giant corporate IT/Windows IT stack side of the house), you have allowed for a nice and active space to grow here on benchmarking. It has informed my learning curve significantly. As some of you may know, back when .NET and Java/Java J2EE were battling each other face to face in a very public fashion, something called the Pet Store blueprint application, a reference application, was released by Sun: http://java.sun.com/blueprints/code/ and http://java.sun.com/developer/releases/petstore/ . Microsoft responded with implementing that blueprint app in .Net, and termed it The Microsoft .NET Pet Shop: http://msdn2.microsoft.com/en-us/library/ms978492.aspx and http://www.hilbert.dk/thomas/pub/dev/j2eedotnetbench.pdf Quite a bit of very informative engineering data, as well as proscriptive best practices for benchmarking, came out of this gathering of forces around the Pet Store/Shop reference app. Agendas aside for a moment, there is powerful and useful information to be found here. I’m wondering if implementing a “controlled” small subset of the Pet Store/Shop reference apps, e.g. the Read/Write component of the db piece, and leaving aside for now the more transactional DB- focused parts, in the mentioned frameworks would be worth considering as a way to move forward the great work and the lively conversation you’ve started here. I would be interested in donating my “labor”, and not donating yours on your behalf!, to such an effort. Thank you for an illuminating morning here in MA.
Adam here again: I neglected to leave the link for the .Net Pet Shop v 3 http://msdn2.microsoft.com/en-us/library/ms954623.aspx . This is a great read from the methodology and “strict architecture requirement for benchmarking” perspectives. I hope this subject continues to garner interest in the PHP community. I will also leave this link which points to a “bake off” of Open Source stacks on Linux as well as on Windows. Excellent piece and as objective as one could hope for from an industry mag, very impressive and useful knowledge. http://www.eweek.com/article2/0,1895,1983364,00.asp As far as full disclosure, as I said in my prior post, I have a long history of MSFT focused work, but a few months ago I took the plunge and “I’m all in” with LAMP. It behooves me to remember that integrity, for me simply the alignment of one’s stated and personal principles with one’s actions, requires that one must in the final analysis put one’s money where their mouth is. And to pre-emptively ward off any confusion about where I am coming from, as an engineer, the stack I work on today, and the tools I use to get that work done, are not my religion, nor even my political persuasion – and we should all take care to remember that being inclusive of divergent opinions and positions is not only the hallmark of innovation, but of an Open Society, http://en.wikipedia.org/wiki/The_Open_Society_and_Its_Enemies , and I dare say, of the Open Source movement as well.
its o k but no stuff for a Symfony beginner……………
well sir,
I am very new to the web programming world and try hard for
configure my windowsxp for symfony project but did not able to
do it.. can you guide my email is available with this comment.
this blog is really very usefull blog in simply i can say a big river
of knowledge.
[...] As the author of a relatively popular benchmarking article, I feel compelled to respond to this bit of misguided analysis from the Symfony camp about benchmarks. [...]
[...] François Zaninotto, um dos principais responsáveis pelo desenvolvimento da framework Symfony, publicou no blog oficial do Symfony um extenso post a criticar os benchmarks e as comparações de frameworks que se têm vindo a fazer. Consegue mostrar que os benchmarks que se têm vindo a fazer não têm significado nenhum, realmente um teste do tipo “hello, world” não faz qualquer sentido numa framework. Achei interessante a afirmação de que a nÃvel profissional o RoR e o Django não são alternativas ao Symfony, e as escolhas são apenas entre Symfony, .Net e Java Struts. Acaba o post dizendo que o Yahoo! escolheu o Symfony para uma aplicação com 20 milhões de utilizadores (sim, 20000000!). [...]
[...] – Taking a look at ten different PHP frameworks, by Dennis Pallett – CodeIgniter vs. CakePHP, by Jonathan Snook – New Year’s Benchmarks – Glue vs. Full Stack and More framework fun, by Chris Hartjes – Comparing Frameworks, by Tim Bray [...]
I’d love to see this benchmark re-run on the current version of the Zend Framework, which I believe is at 1.1. I think the structure of it’s MVC structure changed significantly since 0.2 and 0.6. It’s a lot more powerful, but it seems to have inherited the bloat that generally comes with that.
In addition: were your servers running any sort of PHP cache such as APC? Again, another interesting aspect to factor into benchmarking : )
Great article!
i guess the only problem here is PHP itself and the OOP implementation. I run a few tests on cakephp. without framework i got 1800req/sec.
I started from index.php and placed die() after some parts of the code including required files.
I noticed the response time droped after the first require(”) of a big file. There was no other code in that file than function declarations. A bigger drop noticed after another require of a file containing just a class declaration.. After some such includes, the response time decreased under 500r/s.
After the engine started actually doing something, the response time was around 100r/s. In the end i got 40r/s:(
I think that PHP suffers from FileI/O operations and especially on big files. I tried APC and eAccelerator but the diference is not so encouraging.
I also tried to include one of the big files into noframework app. The same result: response droped to 700r/s. With APC i have around 1000r/s. I think i`ll give up optimization and try to scale up.
[...] getting a lot of traffic from DZone and other places. If you like this post, be sure to check out New Year’s Benchmarks for PHP framework comparisons, and the Solar Framework for PHP 5. Thanks for [...]
[...] found that Paul Jones had done a benchmarking talk recently in which in re-ran his well known benchmarking tests on the most recent versions of the [...]
Paul, nice overview. Don’t you thing it is time for another “Benchmarking round” ? I personally would like to see how e.g. Cake 1.2 and the latest releaeses of all other frameworks have changed regarding Performance during the last 8 months.
[...] http://paul-m-jones.com/blog/?p=238 [...]
Thanks for this great article! i was so curious about performance and now i know. Im lucky i am using solar for a while : )
Thanks
[...] and Application Benchmarking, a presentation based on my popular New Year’s Benchmarks research, including why (and how) to apply the same methods to your own [...]
Nice test! How about a 2008 update? Would be interesting to see whether newer versions mean faster script execution time or perhaps just mean loading more unused stuff into memory.
+1 for the 2008 update.. much has happened since these tests and I’ve seen nothing nearly as comprehensive. I’m currently teetering between the quality of code in Solar and the sizable community of Cake. In my rudimentary benchmarks, Solar embarrassed Cake, though I’d like to have some (recent) more reliable data to consider.
Not that I want to make work for you, but if you find the time, I’d be greatly appreciative.
Thanks!
Kev
Let’s just put this into perspective, though: ignoring the fact that the app does not yet do anything, the symfony example can handle 60 requests per second. That’s over *five million* per day.
Has anyone done any “benchmarks” lately? It would be interesting to know how a “hello world” type of test compares to a “real world” test (e.g. with database calls).
@kevin: Have you tried agavi? I have yet to decide whether to go for solar or agavi. I haven’t really used them on a project yet but based on what’s out there and the docs I have some minor nitpicks.
Would you run the test again? including the new versions =D
btw, I’m using apc instead of xcache, but for better performance I always open the page once or twice in order that the files get cached w/o fragmentation, it happens that when I run the ab test w/o loading the page before, apc gets a lot of fragmentation in the cache.
Aldemar
Coming back to this site later now being on EC2 this is even more valuable…thanks again…but I still want to see a cake 1.2 test =( and I’m surprised Zend is faster, it’s one of the most screwed up frameworks on this planet…but that’s primarily to due to how it’s kept and all the contributions, etc. Would also be interested in Code Igniter results.
Dude, Lucida Sans sucks at sizes < 18px.
[...] Wow, lot of traffic from Reddit and Y-Combinator on this one. Be sure to check out my post on Web Framework Benchmarking, and of course the Solar Framework for PHP [...]
[...] New Year’s Benchmarks [...]
[...] we get started, let me give her a big public thank you for her praise of my benchmarking methodology: thanks, Laura. [...]
I ‘d like you to include qcodo/qcube framework on the next benchmark.
qcodo official website: http://www.qcodo.com
qcube official website: http://www.qcu.be
thanx
Such nonsense in these tests. Symfony should be wrapped up and its “developers” sent home. Zend is a bulky steaming pile of poo now. If one must use PHP, use a lightweight elegant system like CodeIgniter, or just get Django from Python.
[...] project I researched more PHP frameworks and saw that Symfony was regarded as one of the slowest out there (although it does come with a fair amount of features). I decided to setup my own benchmark and [...]
[...] http://paul-m-jones.com/blog/?p=238 (40+ includes pour un hello world ? o_Ô) [...]
[...] http://paul-m-jones.com/blog/?p=238 [...]
[...] to “how to measure your architectural decisions”. This talk is based on lessons from my benchmarking experiments combined with an extended riff on something Laura Thomson said about those [...]
Would you run the test again? including the new versions =D
btw, I’m using apc instead of xcache, but for better performance I always open the page once or twice in order that the files get cached w/o fragmentation, it happens that when I run the ab test w/o loading the page before, apc gets a lot of fragmentation in the cache.
[...] http://paul-m-jones.com/blog/?p=238 [...]
[...] New Year’s Benchmarks [...]
[...] ???Hello Wolrd???????????????????Performance of Yii?Paul M. Jones » Blog Archive » New Year’s Benchmarks???????????? [...]
[...] Restart web servers between runs (APC) Speed is not always a variable. Things can only be fast(er) or slow(er) than others. Its good to predict resource usability before things crash. paul-m-jones.com/archives/238 [...]