PHP パフォーマンス empty()と比較演算子==と===のスピード差
スポンサーリンク
PHPで文字列が空であるか調べるときに、empty()を使ったり、比較演算子を使ったりします。
empty()を使って、こう書いたり、
== (または、 === ) を使って、こう書いたりします。
empty()を使うと、表記的には、人間に優しいのかなと思いますが、empty()を使うのはそれが理由でしょうか。
empty()と比較演算子(==,===)の比較を考えるとき、empty()のほうが関数呼び出しのオーバーヘッドがあり、比較演算子の場合、関数呼び出しのオーバーヘッドがないため、比較演算子が関数よりも高速に動作することが容易に想像できます。
比較演算子の==と===を考えると自動的な型変換のない===が==よりも高速に動作します。
というわけで、一応、PHPのpearのBenchmarkのTimerを利用して、ベンチーマークをしてみました。
ソースコード
100回比較ベンチマーク
100回比較した場合のかかった時間の比較。
1000回比較した場合のかかった時間の比較。
というわけで、予測通り、期待した結果が得られました。
empty()を使って、こう書いたり、
<?php if (empty($str)) { doit($str); } ?>
== (または、 === ) を使って、こう書いたりします。
<?php if (''==$str) { doit($str); } ?>
empty()を使うと、表記的には、人間に優しいのかなと思いますが、empty()を使うのはそれが理由でしょうか。
empty()と比較演算子(==,===)の比較を考えるとき、empty()のほうが関数呼び出しのオーバーヘッドがあり、比較演算子の場合、関数呼び出しのオーバーヘッドがないため、比較演算子が関数よりも高速に動作することが容易に想像できます。
比較演算子の==と===を考えると自動的な型変換のない===が==よりも高速に動作します。
というわけで、一応、PHPのpearのBenchmarkのTimerを利用して、ベンチーマークをしてみました。
ソースコード
<?php include ('Benchmark/Timer.php'); function use_empty ($count) { $x = 'hoge'; for ($i = 0; $i < $count; ++$i) { $x = empty($x) ; } } function use_equal ( $count ) { $x = 'hoge'; for ($i = 0; $i < $count; ++$i) { $x = ('' == $x) ; } } function use_equal3 ( $count ) { $x = 'hoge'; for ($i = 0; $i < $count; ++$i) { $x = ('' === $x) ; } } $count = 1000; echo $count, PHP_EOL; $oTimer =& new Benchmark_Timer(); $oTimer->start (); use_empty ($count); $oTimer->setMarker( 'empty 1' ); use_empty ($count); $oTimer->setMarker( 'empty 2' ); use_empty ($count); $oTimer->setMarker( 'empty 3' ); use_equal ($count); $oTimer->setMarker( 'equal 1' ); use_equal ($count); $oTimer->setMarker( 'equal 2' ); use_equal ($count); $oTimer->setMarker( 'equal 3' ); use_equal3 ($count); $oTimer->setMarker( 'equal3 1' ); use_equal3 ($count); $oTimer->setMarker( 'equal3 2' ); use_equal3 ($count); $oTimer->setMarker( 'equal3 3' ); $oTimer->stop (); $oTimer->display (); ?>
100回比較ベンチマーク
100 ------------------------------------------------------ marker time index ex time perct ------------------------------------------------------ Start 1201971619.99956700 - 0.00% ------------------------------------------------------ empty 1 1201971619.99984300 0.000276 27.63% ------------------------------------------------------ empty 2 1201971619.99993200 0.000089 8.91% ------------------------------------------------------ empty 3 1201971620.00002200 0.000090 9.01% ------------------------------------------------------ equal 1 1201971620.00012000 0.000098 9.81% ------------------------------------------------------ equal 2 1201971620.00020800 0.000088 8.81% ------------------------------------------------------ equal 3 1201971620.00029500 0.000087 8.71% ------------------------------------------------------ equal3 1 1201971620.00037900 0.000084 8.41% ------------------------------------------------------ equal3 2 1201971620.00045800 0.000079 7.91% ------------------------------------------------------ equal3 3 1201971620.00053700 0.000079 7.91% ------------------------------------------------------ Stop 1201971620.00056600 0.000029 2.90% ------------------------------------------------------ total - 0.000999 100.00% ------------------------------------------------------
100回比較した場合のかかった時間の比較。
関数,比較演算子 | 実行時間 |
empty() | 0.000090 |
== | 0.000088 |
=== | 0.000079 |
1000 ------------------------------------------------------ marker time index ex time perct ------------------------------------------------------ Start 1201971122.94382100 - 0.00% ------------------------------------------------------ empty 1 1201971122.94467500 0.000854 15.53% ------------------------------------------------------ empty 2 1201971122.94529600 0.000621 11.29% ------------------------------------------------------ empty 3 1201971122.94590700 0.000611 11.11% ------------------------------------------------------ equal 1 1201971122.94652600 0.000619 11.26% ------------------------------------------------------ equal 2 1201971122.94713000 0.000604 10.98% ------------------------------------------------------ equal 3 1201971122.94774000 0.000610 11.09% ------------------------------------------------------ equal3 1 1201971122.94825800 0.000518 9.42% ------------------------------------------------------ equal3 2 1201971122.94877700 0.000519 9.44% ------------------------------------------------------ equal3 3 1201971122.94929400 0.000517 9.40% ------------------------------------------------------ Stop 1201971122.94932000 0.000026 0.47% ------------------------------------------------------ total - 0.005499 100.00% ------------------------------------------------------
1000回比較した場合のかかった時間の比較。
関数,比較演算子 | 実行時間 |
empty() | 0.000611 |
== | 0.000604 |
=== | 0.000517 |
というわけで、予測通り、期待した結果が得られました。
- === が == や empty()より速い
- == が empty()より速い
参照しているページ (サイト内): [2008-01-31-1]
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12