CakePHP1.3 RC3とCakePHP1.2.6のベンチマーク比較

環境

  • OS Windows Vista 32bit Home Edition
  • PHP5.2.6
  • mysql Ver 14.14 Distrib 5.1.42, for Win32 (ia32)

セットアップ

  1. githubのダウンロードページからそれぞれのアーカイブを取得して展開、以下のように配置
    • WEBROOT/cakebench/12 <= 1.2.6
    • WEBROOT/cakebench/13 <= 1.3 RC3
  2. config/core.phpの書き換え
    • Configure::write('debug', 0); // 運用モード
    • Security.saltとSecurity.cipherSeedを適切に変更
    • Security.levelはmediumに統一
Route
<?php
	Router::connect('/', array('controller' => 'bench', 'action' => 'index'));
	Router::connect('/:action', array('controller' => 'bench'));
?>
Controller

bench_controller.php

<?php
class BenchController extends AppController{
	var $name = "Bench";
	var $uses = array();
	
	function index(){
		
	}

	function model(){
		$this->loadModel('Event');
		$this->helpers = array('Form');
	}
}
View

layouts/default.ctp

<?php echo $content_for_layout ?>

bench/index.ctp

Hello World!!

bench/model.ctp

<?php
echo $form->create('Event');
echo $form->input('name');
echo $form->end('submit');
?>

計測方法

apache benchを用います。
オプションは ab -c 100 -n 1000 です。
10回計測した中で、Request per second(#/sec)が最も大きいものを比較対象とします。

単純なHello Worldアプリケーション(indexアクション)

1.2.6
C:\apache\bin>ab -c 100 -n 1000 http://localhost/cakebench/12/
(略)
Requests per second:    13.99 [#/sec] (mean)
Time per request:       7147.920 [ms] (mean)
Time per request:       71.479 [ms] (mean, across all concurrent requests)
(略)
1.3 RC3
C:\apache\bin>ab -c 100 -n 1000 http://localhost/cakebench/13/
(略)
Requests per second:    13.97 [#/sec] (mean)
Time per request:       7160.400 [ms] (mean)
Time per request:       71.604 [ms] (mean, across all concurrent requests)
(略)

有意な差はほとんどありませんでした。

モデルを読み込む(modelアクション)

単一モデルを読み込み、Formヘルパでごく単純なフォームを出力します。

1.2.6
C:\apache\bin>ab -c 100 -n 1000 http://localhost/cakebench/12/model
(略)
Requests per second:    8.35 [#/sec] (mean)
Time per request:       11977.680 [ms] (mean)
Time per request:       119.777 [ms] (mean, across all concurrent requests)
(略)
1.3 RC3
C:\apache\bin>ab -c 100 -n 1000 http://localhost/cakebench/13/model
(略)
Requests per second:    8.50 [#/sec] (mean)
Time per request:       11767.080 [ms] (mean)
Time per request:       117.671 [ms] (mean, across all concurrent requests)
(略)

約1.8%の差が生じています。

まとめ

今回は非常に単純なアプリケーションでベンチを取りました。
ごく単純なHello Worldアプリケーションでは、差が見受けられませんでしたが、同様のテストで速くなったよ、という報告もあります。
これには環境による部分も大きくあると思います。しかし、少なくとも1.3にしたから遅くなったということはまずないでしょう。


更に言及すると、1.3の速度改善点はこのような単純なアプリケーションではなく、複雑な(現実的な)Routeを使う場合や、bootstrapあたりの速度改善など、今回では計測できない部分に多く及びます。
これらの速度改善の恩恵を実感するには複雑な計測が必要なので、今回はパスします。ごめんなさい。


以上の結果から、速度面での不安はないと言って良く、むしろ良好になるであろうという推定が成り立ちます。


#誰かVMじゃないunix/Linuxマシンで計測してくれないかなぁ