PHP 5.1.3の地味なパフォーマンスチューニング

Computer 5月 8, 2006
(Last Updated On: 2006年5月8日)

PHP 5.1.3では地味なパフォーマンスチューニングが施されています。しかし、個人的には非常に気に入っているので紹介します。ChangeLogには以下のように記載されています。

Eliminated run-time constant fetching for TRUE, FALSE and NULL. (Dmitry)

http://www.php.net/ChangeLog-5.php#5.1.3

TRUE、FALSE、NULLはPHPがデフォルトで定義する定数です。PHP 5.1.3からこれらの定数は定数のシンボルテーブルから値を取得せずに処理されるようになりました。

この意味を理解するにはPHPが定数をどのように扱っているか知る必要があります。PHPの定数は一度値が定義されると値が変更できない”変数”の様に定義されています。つまり、TRUE、FALSE、NULLと言ったシステムが提供する定数も内部的には

$constant = array(‘TURE’ => true, ‘FALSE’ => false, ‘NULL’ => null);

の様な配列から’TRUE’, ‘FALSE’, ‘NULL’の値を取得する仕組みになっていました。PHP 5.1.3からは本当の定数の様に処理されるようになりました。

以下が1000万回TRUEを代入した場合の違いです。(PentiumD 820 – 2.8GHz dual core, 3GB memory)10%強の速度改善が見られます。最初に書いたように地味ですが本当の定数として処理される事は良い事です。

[yohgaki@dev public_html]$ cat true.php
<?php
for ($i=0; $i < 10000000; $i++) {
$v = true;
}
?>
[yohgaki@dev public_html]$ time /usr/local/php-5.1.2/bin/php true.php

real 0m2.315s
user 0m2.308s
sys 0m0.007s
[yohgaki@dev public_html]$ time /usr/local/php-5.1.4/bin/php true.php

real 0m2.042s
user 0m2.013s
sys 0m0.029s
[yohgaki@dev public_html]$

【参考】PHP4.4.2の場合

[yohgaki@dev public_html]$ time /usr/local/php-4.4.2/bin/php true.php

real 0m6.470s
user 0m6.258s
sys 0m0.013s

投稿者: yohgaki