Quantcast
Channel: PHP7.4タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 113

PHPのパフォーマンス調査 PHP5とPHP7の処理速度

$
0
0

背景

PHP5からPHP7へアップデートするだけで処理速度が大幅にアップするという話を聞いたので検証してみることにした。

※ ごめんなさい。
 最もらしい建前を立ててみたけど、嘘です。
 実際はQiitaへの投稿に慣れるための記事なので、
 1つの例として参考にしてもらえる程度だと嬉しいな。

この記事の対象者

  • Dockerfileのシンプルなサンプルをみたい人
  • Dockerのamazonlinux2コンテナ内でPHPをインストールしたい人

この記事で記載していない内容

  • LaravelやCakePHP等、フレームワークのセットアップ方法
  • NginxやApache等、ウェブサーバー用ミドルウェアのセットアップ方法

上記の内容が知りたい方は他の記事を参考にされた方が良いと思いますので、そっとページを閉じていただけると幸いです。

検証環境

Machine: Mac mini (2018)
OS: macOS Catalina バージョン 10.15.7
仮想環境: Docker AmazonLinux2イメージ
PHP5: PHP 5.6.40
PHP7: PHP 7.3.24

Dockerfileの内容

PHP5もPHP7もログインしてからPHPをインストールするので、同じDockerfileを使用しています

Dockerfile
# AmazonLiunx2のイメージを使うよFROM amazonlinux:2# ここではユーザー'bearrabi'で管理者用コマンドを使えるようにしてるだけだよ。# PHPインストールのコマンドはここには書いてないよRUN yum -y update &&\
  yum clean all &&\
  yum install-ysudo&&\
  yum install-y vim &&\
  yum install-y systemd &&\
  yum install-y yum-utils &&\
  useradd bearrabi &&\
echo"bearrabi ALL=NOPASSWD: ALL">> /etc/sudoers

# コンテナログイン時のカレントディレクトリを指定WORKDIR /usr/local/sbin

Docker イメージのビルドからログインまで

terminal
# ディレクトリを紐づけるために、ローカルにディレクトリを作成# 途中のディレクトリが存在しないとエラーになるから注意ね
% mkdir /Users/bearrabi/php_56/work

# 自分の指定した名前で、Dockerfileの内容をイメージ化
% docker build .-t php_dif_img

# イメージからコンテナを生成してログイン可能状態にする
% docker run -d--name php_dif_con --privileged-v /Users/bearrabi/php_56/work:/usr/local/sbin:rw php_56_img /sbin/init

# 生成したコンテナにログイン
% docker exec-it-u bearrabi php_dif_con /bin/bash

[【ユーザー】@【コンテナID】 sbin]$ となっていればログインに成功してます。
自分の環境では以下になりました。

terminal
[bearrabi@82461436bd6c sbin]$ 

PHP5.6をインストール

terminal
### epel(Extra Packages for Enterprise Linux)リポジトリをインストール# レポジトリは「貯蔵庫」の意味で、epelはOSに存在していないものを保管します# remiレポジトリをインストールするのに必要です$ sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

### remiレポジトリをインストール# remiレポジトリにはPHPが保管されています$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

### 各リポジトリのアップデート$ sudo yum -y update --disablerepo=amzn2-core --enablerepo=epel,remi,remi-php56

### PHP5.6をインストール$ sudo yum -yinstall--enablerepo=remi,remi-php56 php56 

PHPのVersion確認

terminal
$ php56 -v
PHP 5.6.40 (cli)(built: Sep 29 2020 11:42:56) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

PHP 5.6.40がインストールされました。

処理速度検証(PHP 5.6.40)

ソースコード

test.php
<?php// 速度計測の開始時刻をミリ秒で取得$start_time=microtime(true);// この変数をループ回数の上限とする$max_loop_index=100000000;// ループで上限値まで繰り返し$counter=0;for($i=0;$i<$max_loop_index;$i++){$counter+=1;}// 速度計測の終了時刻をミリ秒で取得$end_time=microtime(true);// 処理開始から終了まで何ミリ秒必要だったかを取得$time_defference=$end_time-$start_time;// 計測時間を出力print"time: ".$time_defference."秒\n";// ループ処理が最後まで完了しているか確認print"counter: $counter回ループ処理を行いました\n";?>

スクリプトの実行と計測結果

terminal
$ php56 test.php 
time: 8.2781031131744秒
counter: 100000000 回ループ処理を行いました

何度やっても大体8.2秒でした。

PHP5.6をPHP7.3へアップデート

terminal
# インストール済みのPHPを削除$ sudo yum -y remove php*# インストール済みのepelレポジトリを削除$ sudo yum -y remove epel*# 新しいepelレポジトリをインストール$ sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-12.noarch.rpm

# 新しいremiレポジトリをインストール$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

# レポジトリのアップデート$ sudo yum -y update --disablerepo=amzn2-core --enablerepo=epel,remi,remi-php73

# php7.3をインストール$ sudo yum -yinstall--disablerepo=amzn2-core --enablerepo=remi,remi-php73 php

PHPのバージョン確認

terminal
$ php -v
PHP 7.3.24 (cli)(built: Oct 27 2020 11:01:59)( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.24, Copyright (c) 1998-2018 Zend Technologies

PHP 7.3.24がインストールされました

処理速度検証(PHP 7.3.24)

terminal
$ php test.php 
time: 0.89267206192017秒
counter: 100000000 回ループ処理を行いました

あれ?
全く差がないどころか、PHP7.3の方が少し遅いじゃないか!!

考察

恐らく、単純にインタプリタの処理が早くなった訳ではないのでしょう。
他の記事では、ライブラリを利用した計算時の処理速度とメモリの使用状況をモニタリングしていました。

※参照
PHPのパフォーマンス比較(5.3〜7.0)

この記事では明らかにPHPのバージョンアップによって処理速度が早くなっています。
なので、一概に嘘ではないかと。

最後に

今回はPHPのバージョンによる速度の処理速度の検証を行いました。
結果的には、単純な処理をさせても処理速度に差は発生しないという結果です。
パフォーマンス改善を提案する時の簡単なエビデンスとしたかったのですが、残念😅

とはいえ、Dockerの簡単な使い方や、amazon-extra-installを利用しないPHPのインストール方法など、最小限に記載することはできたかと思います。
どなたかのお役に立てれば幸いですね。

以上です。
最後まで読んでいただき、ありがとうございます☺️


Viewing all articles
Browse latest Browse all 113

Trending Articles