<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>简单生活@NET &#187; CakePHP</title>
	<atom:link href="http://lee.kometo.com/archives/tag/cakephp/feed" rel="self" type="application/rss+xml" />
	<link>http://lee.kometo.com</link>
	<description>正确的判断来自经验，但经验往往来自错误的判断</description>
	<lastBuildDate>Mon, 06 Feb 2012 02:26:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>PHP框架基准测试比较</title>
		<link>http://lee.kometo.com/archives/123</link>
		<comments>http://lee.kometo.com/archives/123#comments</comments>
		<pubDate>Sat, 18 Oct 2008 17:40:44 +0000</pubDate>
		<dc:creator>Emeric lee</dc:creator>
				<category><![CDATA[WEB应用开发]]></category>
		<category><![CDATA[深入PHP]]></category>
		<category><![CDATA[benchmarks]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[性能]]></category>
		<category><![CDATA[框架]]></category>
		<category><![CDATA[测试]]></category>

		<guid isPermaLink="false">http://lee.kometo.com/?p=123</guid>
		<description><![CDATA[为了讨论我在另一篇文章（重新审视PHP框架 CodeIgniter VS Zend）中作出的关于PHP框架性能的比较，我决定公开我所取得的详细结果。我一开始没有公开这个测试结果是因为测试不是在完全隔离的条件下进行的（独立的客户端和服务器），但是每个测试结果应该是准确的，这也是我测试的目的。]]></description>
			<content:encoded><![CDATA[<blockquote><p><em>这篇文章是一个翻译，英文原文在 </em><a href="http://www.avnetlabs.com/php/php-framework-comparison-benchmarks" target="_blank">PHP framework comparison benchmarks</a><em>，我的英文水平很一般，可能会有翻译不确切的地方(把握不大地方使用斜体进行了标志，并附带了英文原文)，请指正，并参看原文。 Emeric.Lee 2008.10.18</em></p></blockquote>
<p>为了讨论我在另一篇文章（<a rel="bookmark" href="../index.php/archives/117">重新审视PHP框架 CodeIgniter VS Zend</a>）中作出的关于PHP框架性能的比较，我决定公开我所取得的详细结果。我一开始没有公开这个测试结果是因为测试不是在完全隔离的条件下进行的（独立的客户端和服务器），但是每个测试结果应该是准确的，这也是我测试的目的。</p>
<p>另外，我仅仅使用了‘请求数/秒&#8217; 作为性能的衡量标准，我不认为在实际应用中还有其它的因素可以更好的衡量WEB应用程序的相应速度。</p>
<h3>工具</h3>
<p>测试计算机有1.8G的AMD Sempron CPU，521M 内存，运行Ubuntu Gutsy (7.10) Desktop 操作系统。</p>
<p>我使用 <a href="http://www.hpl.hp.com/research/linux/httperf/">httperf</a> 运行测试，另外也使用apachebench 进行了一些重复测试，测试结果是吻合的。</p>
<p>我使用CakePHP, CodeIgniter, Zend Framework 和Ruby on Rails.分别建立了一个相同的首页，而且我还是用静态HTML和过程化的PHP代码（又称为<span class="trans">套管程序）</span>复制实现了相同的功能，以此作为测试基准。</p>
<p>我决定在测试中包含数据访问，测试中应用程序从数据库中提取了4条记录并生成结果页面。</p>
<ul>
<li><a href="http://avnetlabs.com/frameworks/">查看示例页面</a></li>
</ul>
<p>有兴趣的人可以下载测试文件，包括Mysql数据库的SQL文件。测试代码假设数据库有Root用户并且没有密码（如果你准备自己运行测试，也许需要修改相关部分代码）。</p>
<ul>
<li><a href="http://avnetlabs.com/frameworks/frameworks.tar.gz">下载Tar文件</a></li>
<li><a href="http://avnetlabs.com/frameworks/frameworks.zip">下载Zip文件</a></li>
</ul>
<h3>测试结果</h3>
<p><span id="more-123"></span></p>
<p>所有的测试结果值都是‘请求数/秒（ requests per second）&#8217; ，越高越好。</p>
<ul>
<li><strong>没有PHP代码缓存系统<br />
</strong>所有框架使用了ORM（对CodeIgniter 只能勉强实现），Zend Framework使用Zend_DB_Table，CodeIgniter使用ActiveRecord。</p>
<table border="1" cellspacing="0" cellpadding="4" width="80%" align="center">
<tbody>
<tr style="background-color: #0099ff;">
<td></td>
<td class="highlight-cell">
<p align="right">Run 1</p>
</td>
<td class="highlight-cell">
<p align="right">Run 2</p>
</td>
<td class="highlight-cell">
<p align="right">Run 3</p>
</td>
<td class="highlight-cell">
<p align="right">Run 4</p>
</td>
<td class="highlight-cell">
<p align="right">Average</p>
</td>
</tr>
<tr>
<td class="highlight-cell">Baseline HTML</td>
<td>
<p align="right">1327.5</p>
</td>
<td>
<p align="right">1326.5</p>
</td>
<td>
<p align="right">1328.6</p>
</td>
<td>
<p align="right">1329.1</p>
</td>
<td>
<p align="right"><strong>1327.9</strong></p>
</td>
</tr>
<tr>
<td class="highlight-cell">Baseline PHP</td>
<td>
<p align="right">331.6</p>
</td>
<td>
<p align="right">332.1</p>
</td>
<td>
<p align="right">331.4</p>
</td>
<td>
<p align="right">332.0</p>
</td>
<td>
<p align="right"><strong>331.8</strong></p>
</td>
</tr>
<tr>
<td class="highlight-cell">CakePHP</td>
<td>
<p align="right">3.6</p>
</td>
<td>
<p align="right">3.7</p>
</td>
<td>
<p align="right">3.8</p>
</td>
<td>
<p align="right">3.5</p>
</td>
<td>
<p align="right"><strong>3.7</strong></p>
</td>
</tr>
<tr>
<td class="highlight-cell">CodeIgniter</td>
<td>
<p align="right">21.5</p>
</td>
<td>
<p align="right">21.2</p>
</td>
<td>
<p align="right">21.7</p>
</td>
<td>
<p align="right">21.7</p>
</td>
<td>
<p align="right"><strong>21.5</strong></p>
</td>
</tr>
<tr>
<td class="highlight-cell">Zend Framework</td>
<td>
<p align="right">9.3</p>
</td>
<td>
<p align="right">9.1</p>
</td>
<td>
<p align="right">9.2</p>
</td>
<td>
<p align="right">9.3</p>
</td>
<td>
<p align="right"><strong>9.2</strong></p>
</td>
</tr>
</tbody>
</table>
</li>
<li><strong>使用 eAccelerator PHP 代码缓存系统<br />
</strong>所有框架使用了ORM（对CodeIgniter 只能勉强实现），Zend Framework使用Zend_DB_Table，CodeIgniter使用ActiveRecord。<br />
测试重复进行了4次，仅列出平均值</p>
<table border="1" cellspacing="0" cellpadding="4" width="300" align="center">
<tbody>
<tr>
<td></td>
<td style="background-color: #0099ff;">平均值</td>
</tr>
<tr>
<td style="background-color: #0099ff;">CakePHP</td>
<td style="text-align: right;"><strong>7.8</strong></td>
</tr>
<tr>
<td style="background-color: #0099ff;">CodeIgniter</td>
<td style="text-align: right;"><strong>98.2</strong></td>
</tr>
<tr>
<td style="background-color: #0099ff;">Zend Framework</td>
<td style="text-align: right;"><strong>33.4</strong></td>
</tr>
</tbody>
</table>
</li>
<li><strong>使用 APC PHP 代码缓存系统<br />
</strong>所有框架使用了ORM（对CodeIgniter 只能勉强实现），Zend Framework使用Zend_DB_Table，CodeIgniter使用ActiveRecord。<br />
测试重复进行了4次，仅列出平均值</p>
<table border="1" cellspacing="0" cellpadding="4" width="300" align="center">
<tbody>
<tr>
<td></td>
<td style="background-color: #0099ff;">平均值</td>
</tr>
<tr>
<td style="background-color: #0099ff;">CakePHP</td>
<td style="text-align: right;"><strong>7.3</strong></td>
</tr>
<tr>
<td style="background-color: #0099ff;">CodeIgniter</td>
<td style="text-align: right;"><strong>97.6</strong></td>
</tr>
<tr>
<td style="background-color: #0099ff;">Zend Framework</td>
<td style="text-align: right;"><strong>32.7</strong></td>
</tr>
</tbody>
</table>
</li>
<li><strong>使用 APC PHP 代码缓存系统，禁用ORM<br />
</strong>Zend Framework 使用 Zend_DB ,CodeIgniter禁用了ActiveRecord。我找不到在 CakePHP中禁用ORM的方法，所以我移除了它。<br />
测试重复进行了4次，仅列出平均值</p>
<table border="1" cellspacing="0" cellpadding="4" width="300" align="center">
<tbody>
<tr>
<td></td>
<td style="background-color: #0099ff;">平均值</td>
</tr>
<tr>
<td style="background-color: #0099ff;">CodeIgniter</td>
<td style="text-align: right;"><strong>106.2</strong></td>
</tr>
<tr>
<td style="background-color: #0099ff;">Zend Framework</td>
<td style="text-align: right;"><strong>42.8</strong></td>
</tr>
</tbody>
</table>
</li>
<li><strong>使用 APC PHP 代码缓存系统，没有数据库调用<br />
</strong>这是为了测试数据调用对总体性能的影响，我通过Controller直接向View发送了一个空的结果集，这样跳过了Model层。<br />
测试重复进行了4次，仅列出平均值</p>
<table border="1" cellspacing="0" cellpadding="4" width="300" align="center">
<tbody>
<tr>
<td></td>
<td style="background-color: #0099ff;">平均值</td>
</tr>
<tr>
<td style="background-color: #0099ff;">CodeIgniter</td>
<td style="text-align: right;"><strong>118.0</strong></td>
</tr>
<tr>
<td style="background-color: #0099ff;">Zend Framework</td>
<td style="text-align: right;"><strong>52.0</strong></td>
</tr>
</tbody>
</table>
</li>
<li><strong>Ruby on Rails 比较<br />
</strong>我增加这个测试是为了看看PHP框架和Ruby on Rails的差距，我也利用这个机会尝试了Passenger (mod_rails) 和 Ruby Enterprise。</p>
<table border="1" cellspacing="0" cellpadding="4" width="300" align="center">
<tbody>
<tr>
<td></td>
<td style="background-color: #0099ff;">平均值</td>
</tr>
<tr>
<td style="background-color: #0099ff;">ROR with 1 Mongrel</td>
<td style="text-align: right;"><strong>85.7</strong></td>
</tr>
<tr>
<td style="background-color: #0099ff;">ROR with Passenger</td>
<td style="text-align: right;"><strong>88.2</strong></td>
</tr>
<tr>
<td style="background-color: #0099ff;">ROR with Passenger and<br />
Ruby Enterprise</td>
<td style="text-align: right;"><strong>96.4</strong></td>
</tr>
</tbody>
</table>
</li>
</ul>
<h3>结论 Conclusion</h3>
<p>在所有的测试中Codeingiter 大约是Zend Framework两倍的速度，CakePHP 要比另外两个PHP框架慢的多。我承认，考虑到我对CodeIgniter熟悉，我也许在初始化CodeIgniter的过程中进行了优化，而对两位两个框架没能进行做的类似的优化。我已经发布了测试代码，并且欢迎专家们的评论。</p>
<h3>更新 Update</h3>
<p>我们已经决定选择 Zend Framework，显然彻底的性能并不是选择框架是需要考虑的唯一因素。我们现在得到的测试结果已经足够我们使用，在我们现有的应用中数据库往往是瓶颈而不是PHP代码。</p>
<p>我们也在生产级的双核服务器（2G 内存，运行Centos 5）上做了一些测试。这一次，所有的测试在一个相同网络内的独立的客户端计算机上进行。我们使用与上述测试完全相同的文件，除了CakePHP，我们使用了最新的版本 RC2。结果如下。</p>
<ul>
<li><strong>没有PHP代码缓存系统<br />
</strong>所有框架使用了ORM（对CodeIgniter 只能勉强实现），Zend Framework使用Zend_DB_Table，CodeIgniter使用ActiveRecord。<br />
测试重复进行了4次，仅列出平均值</p>
<table border="1" cellspacing="0" cellpadding="4" width="300" align="center">
<tbody>
<tr>
<td></td>
<td style="background-color: #0099ff;">平均值</td>
</tr>
<tr>
<td style="background-color: #0099ff;">Baseline HTML</td>
<td style="text-align: right;"><strong>3391.4</strong></td>
</tr>
<tr>
<td style="background-color: #0099ff;">Baseline PHP</td>
<td style="text-align: right;"><strong>1934.7</strong></td>
</tr>
<tr>
<td style="background-color: #0099ff;">CakePHP</td>
<td style="text-align: right;"><strong>15.6</strong></td>
</tr>
<tr>
<td style="background-color: #0099ff;">CodeIgniter</td>
<td style="text-align: right;"><strong>82.9</strong></td>
</tr>
<tr>
<td style="background-color: #0099ff;">Zend Framework</td>
<td style="text-align: right;"><strong>34.6</strong></td>
</tr>
</tbody>
</table>
</li>
<li><strong>使用 eAccelerator PHP 代码缓存系统<br />
</strong>所有框架使用了ORM（对CodeIgniter 只能勉强实现），Zend Framework使用Zend_DB_Table，CodeIgniter使用ActiveRecord。<br />
测试重复进行了4次，仅列出平均值</p>
<table border="1" cellspacing="0" cellpadding="4" width="300" align="center">
<tbody>
<tr>
<td></td>
<td style="background-color: #0099ff;">平均值</td>
</tr>
<tr>
<td style="background-color: #0099ff;">CakePHP</td>
<td style="text-align: right;"><strong>36.1</strong></td>
</tr>
<tr>
<td style="background-color: #0099ff;">CodeIgniter</td>
<td style="text-align: right;"><strong>379.5</strong></td>
</tr>
<tr>
<td style="background-color: #0099ff;">Zend Framework</td>
<td style="text-align: right;"><strong>128.9</strong></td>
</tr>
</tbody>
</table>
</li>
<li><strong>使用 </strong><strong>Zend Platform<br />
</strong>所有框架使用了ORM（对CodeIgniter 只能勉强实现），Zend Framework使用Zend_DB_Table，CodeIgniter使用ActiveRecord。<br />
测试重复进行了4次，仅列出平均值</p>
<table border="1" cellspacing="0" cellpadding="4" width="300" align="center">
<tbody>
<tr>
<td></td>
<td style="background-color: #0099ff;">平均值</td>
</tr>
<tr>
<td style="background-color: #0099ff;">CakePHP</td>
<td style="text-align: right;"><strong>24.8</strong></td>
</tr>
<tr>
<td style="background-color: #0099ff;">CodeIgniter</td>
<td style="text-align: right;"><strong>254.9</strong></td>
</tr>
<tr>
<td style="background-color: #0099ff;">Zend Framework</td>
<td style="text-align: right;"><strong>83.8</strong></td>
</tr>
</tbody>
</table>
</li>
</ul>
<blockquote><p>这是2篇相关联的文章</p>
<ul>
<li><a rel="bookmark" href="../index.php/archives/117">重新审视PHP框架 CodeIgniter VS Zend</a></li>
<li><a rel="bookmark" href="../index.php/archives/123">PHP框架基准测试比较</a></li>
</ul>
<p>这2篇文章的英文原文后面均有大量评论，建议阅读！</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://lee.kometo.com/archives/123/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

