SSIとPHPの負荷比較ベンチマーク。
2018/7/26
確認したいこと
webサイトの各ページにヘッダなどの共通部分を差し込む処理をしたい。 phpでやれば簡単だがapacheには古来よりssiという仕組みがあるらしい。 scriptのphpで書くよりnativeなapacheの仕組みを使ったほうが軽いだろう。 どの程度負荷が軽くなるのかデータがほしい。
比較的最近(2015年)のデータがこちら。
HTML、SSI、PHP はそれぞれサーバをどれくらい重くするかでは2018年現在、vpsだとどうなのか?
環境は共有レンタルサーバー。
phpが毎秒30リクエスト
ssiが毎秒200リクエストと1桁軽い。
計測環境
- CentOS7, apache2.4, メモリ1GB, SSD, Server API: Apache 2.0 Handler (FastCGIではない)
- 伝送路遅延を排除してサーバー負荷を計測したいので、localhostからabでリクエストを出す。
計測条件と結果
-
html
単独のhtml(15kb)。ab -n 1000 -c 100 https://test.mydomain.com/test-html.html Requests per second: 683.31 [#/sec] (mean)
-
html + ssi
本体のhtml(13kb)からヘッダ,フッタhtml(各1kb)をinclude。ab -n 1000 -c 100 https://test.mydomain.com/test-ssi.html Requests per second: 617.85 [#/sec] (mean)
-
php
単独のphp (15kb)。ab -n 1000 -c 100 https://test.mydomain.com/test-php.php Requests per second: 668.96 [#/sec] (mean)
-
php + include
本体のphp (13kb)からヘッダ,フッタhtml(各1kb)をfile_get_contents()。ab -n 1000 -c 100 https://test.mydomain.com/test-include.php Requests per second: 675.11 [#/sec] (mean)
html | 683.31 [#/sec] |
---|---|
html + ssi | 617.85 [#/sec] |
php | 668.96 [#/sec] |
php + include | 675.11 [#/sec] |
結果はほぼ同等。phpはssiに遜色ない。 なお 1. html にもinclude検査の時間がかかっているから、 ssi無効化すればその分速くなる。 念のためinclude検査のオーバーヘッドがどの程度か比較する。
Apacheの設定でssiを無効化して同様の計測。
html | 716.58 [#/sec] |
---|---|
html + ssi | 705.37 [#/sec] ※include部分は欠落。 |
php | 677.89 [#/sec] |
php + include | 669.12 [#/sec] |
逆に遅くなっている。何回か試したがこの傾向は間違いない。 そういう実装なのだろう。Apacheの中身は知る由もない。 ソースのパージング時間などは全体からみれば誤差以下ということだ。
結論
phpで十分に速いのでssiを併用する必要はない。
設定と計測用ファイル。
-
設定
httpd.conf<VirtualHost *:443> ServerName test.mydomain.com DocumentRoot /var/www/html <Directory "/var/www/html"> AllowOverride All </Directory> SSLEngine on 以下略 </VirtualHost>
.htaccessOptions +Includes AddHandler server-parsed html
-
html
test-html.html -
html + ssi
test-ssi.html
test-ssi-header.html
test-ssi-footer.html
-
php
test-php.php -
php + include
test-include.php