LoginSignup
4
0

More than 5 years have passed since last update.

PHPのバージョン違いによるarray_mergeの速度測定

Last updated at Posted at 2018-12-24

はじめに

この記事は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.6PHP7.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系にアップデートしましょう。
それではメリークリスマス!🎅

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0