おっさんエンジニアは若いエンジニアから学ぶ
By Ernst Vikne
「エンジニアは年をとったら若いエンジニアから学ぶんだ」って弾さんが言っていた気がする。
PHP
昨日後輩がPHPが爆速で動くであろう(?)TIPSを教えてくれた!
「なぜ速いか!」
というどうでもいいことを互いの憶測で理解し合ったのでなんだかそれが気持よかった。
どういうことを話したか紹介。
「==」じゃなくて「===」のがはえー!
PHPの==は左の項と右の項を比較するわけだけどその時に片方の項(右の項?)の型を変換して左の項と変換を行っているためやや遅い。
イメージ的にはこんな感じだと思う。
<?php if(TRUE == '1') { echo 'hoge'; }
対して===で型判定を入れると、
完全に感覚的な表現です。
というかPHP自体のソース見れば済む話。
いつか読みます。
ダブルクオーテーションよりシングルクオーテーションのがはえー!
これは知っていたが理屈はなんとなくわかる。
ダブルクオーテーションだと変数展開だと変数が入っているかどうかを判定する必要があるんだけどシングルクオーテーションだと中身を見なくて良い。
これはシンプル。
実際に検証してみた
検証環境
- PHP5.2.5
- 多分自分以外ログインしていない社内サーバー
- APCは無効
- 10,000,000ループ
以下はソース
<?php // start time list($s_usec, $s_sec) = explode(" ", microtime()); $start = (float)$s_sec + (float)$s_usec; // rand loop for($i=0; $i<=10000000; $i++) { $r = rand(); // ↓の比較演算子を切り替えて検証 if($r === 5) { // ↓の文字列の囲みを切り替えて検証 $str = 'hoge'; } } // end time list($e_usec, $e_sec) = explode(" ", microtime()); $end = (float)$e_sec + (float)$e_usec; // result echo $end - $start; ?>
検証結果
結果は型判定比較とシングルクォートのほうがざっくり0.5秒ほど速いようです。
うーん面白かった。
回数 | 型判定(===)&シングルクォート(') | 値判定(==)&ダブルクォート(") |
---|---|---|
1 | 10.17530608 | 10.70869303 |
2 | 10.15921688 | 10.55849695 |
3 | 10.15847182 | 10.58029604 |
4 | 10.18673301 | 10.69251394 |
5 | 10.16044402 | 10.66443801 |
avg | 10.16803436 | 10.64088759 |