最近は処理速度を測るのが少しブームです笑
今回は、forとforeachの処理速度を計測し、比較をします。
ネットで処理速度の比較を検索してみると、どうやらforeachのが優秀とのことです。
しかし、以前先輩にコードレビューしてもらったときには、
「 foreachで処理書いてるけど、forの方が処理早いから、キーを使用しない部分については、for文を使用して。」
と言われたこともあり、少し混乱しているので、自身で計測し、確かめてみたいと思います。
検証方法
言語はPHPを使用し、以下の記事を参考にし、処理速度を計測します。
https://qiita.com/ao_love/items/a2d8b8566d0426195002
処理を記述します。
for文の処理速度を取得
//配列の作成
$array = array();
for($i=1;$i<=100000;$i++){
$array[] = $i;
}
$time_start = microtime(true);
// 計測開始
for($i=1;$i<count($array);$i++){
echo $i;
echo '<br>';
}
//計測終了
$time = microtime(true) - $time_start;
echo "{$time} 秒";
foreachの処理速度を取得
//配列の作成
$array = array();
for($i=1;$i<=100000;$i++){
$array[] = $i;
}
$time_start = microtime(true);
// 計測開始
foreach($array as $value){
echo $value;
echo '<br>';
}
//計測終了
$time = microtime(true) - $time_start;
echo "{$time} 秒";
処理の流れは両方とも同じです。
まず、数字が1から順に10万までを値とした配列を生成します。(計測時間には含みません)
その後、forまたはforeachで配列の値を順番に取得し、echoで出力します。
全ての処理が終了したら、かかった時間を出力します。
また、1回の測定結果のみだと正しい結果が得られない可能性があるため、5回測定を行い、平均時間、合計時間を出します。
測定結果
for文の処理速度を取得
1回目: 0.076268196105957 秒
2回目: 0.088988065719604 秒
3回目: 0.08555006980896 秒
4回目: 0.082581996917725 秒
5回目: 0.085355043411255 秒
平均: 0.418743371963501秒
合計: 0.0837486743927002秒
foreachの処理速度を取得
0.068567037582397 秒
0.061532020568848 秒
0.063639879226685 秒
0.061524152755737 秒
0.064805030822754 秒
平均 0.320068120956421秒
合計 0.0640136241912842秒
平均 0.019735050201416秒の差 = 約0.02秒の差
合計 0.09867525100708秒の差 = 約0.1秒の差
がでました。
やはりネットで書いてある通り、foreachのが優秀なようです。
ということは、あの先輩、嘘つきやがったのな...
結論
ループ処理は、可読性にも優れており、処理速度も速いforeachを使用するべき!