はじめに
この記事はPHP Advent Calender 2018の最終日の記事です。
PHP
の標準関数array_merge
が昔遅かったんですがPHP7
で速くなっていたので速度測定結果を共有します。
下準備
複数のバージョンを切り替えてPHP
を実行する必要があるのでバージョン管理ツールを入れます。
今回はphpbrewを使いました。
curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew
chmod +x phpbrew
sudo mv phpbrew /usr/local/bin/phpbrew
phpbrew init
source ~/.bashrc
phpbrew known
phpbrew update
これでコマンドが認識されてインストールされてあるバージョンが表示されたら成功です
今回はPHP5.6
とPHP7.2
を比べてみようと思います
phpbrew install 5.6.38 +default
phpbrew install 7.2.12 +default
phpbrew use 5.6.38
phpbrew use 7.2.12
速度測定
計測用コード
今回は[0]
に[1,2,…,100000]
をマージする処理で計測します。
10回の実行速度の平均を記録とします。
<?php
// マージ対象の配列
$target = [0];
$list = range(1, 100000);
// array_mergeの計測
$total = 0;
for($i=0; $i<10; $i++){
$start = microtime(true);
array_merge($target, $list);
$end = microtime(true);
$time = $end - $start;
echo "{$time} 秒\n";
$total += $time;
}
$average = $total/10;
echo "平均: {$average}\n";
PHP5.6での計測結果
0.0046761035919189 秒
0.0072782039642334 秒
0.0071420669555664 秒
0.0089681148529053 秒
0.0043520927429199 秒
0.010435104370117 秒
0.0072150230407715 秒
0.0099129676818848 秒
0.0066111087799072 秒
0.0091531276702881 秒
平均: 0.0075743913650513
PHP7.2での計測結果
0.0034220218658447 秒
0.0037429332733154 秒
0.0030500888824463 秒
0.0031399726867676 秒
0.003079891204834 秒
0.0033450126647949 秒
0.0037591457366943 秒
0.0050110816955566 秒
0.0031650066375732 秒
0.0032458305358887 秒
平均: 0.0034960985183716
考察とまとめ
0.0075743913650513 / 0.0034960985183716 = 約2.16倍
array_mergeが速くなったというよりは配列操作全般が速くなった感じですね。
昔PHP5系
でarray_mergeの遅さに苦しめられて自前関数を組んだことがありましたが、PHP7系
ではその自作関数よりも速くなっていたので大変素晴らしいですね。
おわりに
今回とりあげたPHP5.6
は2018/12/31でセキュリティサポートが切れます(この記事の公開から6日後!)
速度的にも速いPHP7
系にアップデートしましょう。
それではメリークリスマス!🎅