未分類

for文とforeach文どっちがいいの?処理速度を比較してみる

投稿日:

 

最近は処理速度を測るのが少しブームです笑

今回は、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を使用するべき!

 

 

-未分類

Copyright© エンジニアの階段 , 2019 All Rights Reserved Powered by STINGER.