PHP Note 》
forループとwhileループどちらが速い?
created: 2003-01-18 | modified: 2003-01-18
ループでは for と while をよく使いますが、どちらがどのくらい速いのか確かめてみたいと思います。聞いたところによると whileループ の方がわずかに速いらしいのですが、あえて確かめるのがこのコーナーの趣旨ですので。
テストコード
こんなコードで試してみました。
<?php
$time1; // 測定開始時間
$time2; // 測定終了時間
$timeF; // forループの実行時間
$timeW; // whileループの実行時間
$ritu; // forとwhileの実行時間の差(%)
$count = 1000; // 繰り返す回数
// 現在の時間をマイクロ秒単位で返す関数
function getmicrotime(){
list($msec, $sec) = explode(" ", microtime());
return ((float)$sec + (float)$msec);
}
// forループの実行時間測定
$time1 = getmicrotime();
for($n = 0; $n < 10000; $n++){
// 何もしない
}
$time2 = getmicrotime();
$timeF = $time2 - $time1;
// whileループの実行時間測定
$time1 = getmicrotime();
$n = 0;
while($n < 10000){
$n++; // カウントするだけ
}
$time2 = getmicrotime();
$timeW = $time2 - $time1;
// forループを100としたときのwhileループの割合
$ritu = ($timeW / $timeF) * 100;
// 見栄え良くテーブルに出力
print <<<HTML
<html>
<head>
<meta http-equiv=\"content-type\" content=\"text/html;charset=Shift_JIS\">
<title>forループとwhileループ、実行速度比較</title>
</head>
<body>
<table border=\"2\">
<caption>$count 回ループの実行速度比較</caption>
<tr>
<td>forループ</td>
<td> $timeF </td>
</tr>
<tr>
<td>whileループ</td>
<td> $timeW </td>
</tr>
<tr>
<td>while/for</td>
<td> $ritu (%)</td>
</tr>
</table>
</body>
</html>
HTML;
?>
結果
- テストコードを実行 (クリックで別ウィンドが開きます)
何度かこのスクリプトを走らせたところ、値のばらつきがかなりありましたが 5% ~ 15% ほど while ループの方が高速でした。
また、繰り返す回数($count)を増やしてみたところその差は少なくなる傾向にありました。実際 $count が 100000 の時、その差は 2% ~ 0% とほとんどありませんでした。これは推測になりますが、コンピュータのキャッシュ機能によって両者の差が埋めらてるのではないかと思うのですが、正解をご存知の方がいらっしゃいましたら教えて下さい。
whileループで書くほうが若干高速なわけですが、この位の差であればあえてwhileループを使って高速化を図るよりも、コードの読みやすさや保守のしやすさなどを優先し使い分けるのがベターだと思います。
PHP Note 》


