phpで文字列を出力する場合、普通に<?php echo $hoge; ?>
とするのと、その省略形<?=$hoge?>
では速度の違いはあるのか?
ふとそんなことを思いました。
個人的には、ソース的にスッキリ書ける省略形の方を好んでよく使うのですが、処理がもし遅いのであれば辞めたほうがいいんじゃないか?と不安にもなってきたので、自分の目で確かめるべく、検証してきました!
検証環境と計測方法
まずはどんな環境・どんなコードを使って検証していくのかをご紹介しておきます。
検証環境
- PHPコードの実行は「Local by Flywheel」で構築した ローカル環境 にて行っています。
- PCはMacBook Proで検証しました。以下スペックです。
- OS:macOS High Sierra
- CPU:Intel Core i7
- メモリ:16 GB
- ブラウザは Google Chrom (バージョン: 66.0.3359.181) を使用。
- その他、起動アプリケーションの数などは全て同じ状態で行なっています。
計測方法
以下のコードを記述したphpファイルをブラウザで確認し、表示された計測時間をメモしています。
<div style="display:none">
<?php
define('DO_COUNT',10000); //実行回数
define('TEST_COUNT',100); //計測回数
define('DECIMAL_DIGITS',10); //小数点桁数
$all_time = 0.0; //全体の計測時間
for($i = 0; $i < TEST_COUNT; $i++) {
$start = microtime(true);
for($j = 0; $j < DO_COUNT; $j++) {
?>
<!-- <?php echo $hoge; ?> や <?=$hoge?> での出力 -->
<?php
}
$end = microtime(true);
$test_time = $end - $start;
$all_time += $test_time;
}
$average = number_format($all_time / TEST_COUNT, DECIMAL_DIGITS);
?>
</div>
<div><?=$average?>秒</div>
元となるコードは下記にメモしてあります。詳細はこちらを参考にしてください。
実際に100万回もテキストを表示するとえらいこっちゃになるので、テキストを出力するdivタグはdisplay:none
で非表示にしています。
計測結果
計測対象は3パターン。
""
(空文字)の出力- 「"テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト"」と少し長めの出力
- 「$hoge="テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト";」として、
$hoge
の出力
3パターンそれぞれに対し、echoありの出力と、echoなしの省略形での計測を行いました。
また、計測コードの実行は3回ずつ行いました。
echo
""(空文字)の出力
<?php echo ""; ?>
- 0.0023781896秒
- 0.0023997426秒
- 0.0025348234秒
少し長めの出力
<?php echo "テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト"; ?>
- 0.0125126743秒
- 0.0127470565秒
- 0.0126158667秒
変数の出力
<?php echo $hoge; ?>
- 0.0125520539秒
- 0.0126214647秒
- 0.0125784397秒
省略形
""(空文字)の出力
<?=""?>
- 0.0025408673秒
- 0.0024754047秒
- 0.0025173140秒
少し長めの出力
<?="テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト"?>
- 0.0122785902秒
- 0.0129351187秒
- 0.0123305035秒
変数の出力
<?=$hoge?>
- 0.0124237633秒
- 0.0124027154秒
- 0.0125763154秒
おまけ:「スペース」と「 ; 」つけてみた
<?= $hoge; ?>
- 0.0126027298秒
- 0.0123897409秒
- 0.0126255870秒
結果
う〜ん、変わらないですね。
ちょっと速いかな?いや、遅いかな?という結果もありますが、全て誤差の範囲内の話なので、「処理速度にほとんど差はない」というのが結論でいいかと思います。
省略形の方が速くあってほしかったというのが本音ですが、処理速度に違いがないことがハッキリし、好きな方でがしがし書いて大丈夫!ということが分かったので良しとします。
そもそも1万回の出力でこの速度なので、多少速度に違いがあったとしても気にしなくて良いレベルですね。