PHPコードを最適化するTipsがはてブで話題になっている。前に似たようなものを見てそのときも思ったのだけれども、いくつかよく分からない項目が紛れている。前回ははてブのコメントにちょろっと書いたけど、2回目なのでちゃんとエントリにしておく。
17. $row['id'] は $row[id] より7倍速い。
これは最適化プラクティスというレベルの話ではない。 id
が定数でないなら、ここで E_NOTICE
が出る。そうなると、 id
を文字列 "id"
として再評価しないといけなくなるから、遅くなるのも当たり前だ。
<?php
error_reporting(E_ALL);
$row = array(
"id" => 12
);
echo $row[id];
Notice: Use of undefined constant id - assumed 'id' in /home/youzaka/temp/rowid.php on line 6
12
これが $row[id]
でなくて $row->id
なら分かるけど、なんでそもそも $row[id]
と書こうだなんて発想が出てきたのか、当時よく分からなかった。 error_reporting
の初期値が E_ALL ^ E_NOTICE
だから、引用符なしで書いても問題なく表示されてしまうのだった。
49. DB に入れる値なら GET より POST を使おう。(パフォーマンスが上がる)
データベースに値を入れるならPOSTメソッドを使うのが本来の姿で、パフォーマンスがあがるからGETじゃなくてPOSTを使うという考え方は危険だと思う。GETとかPOSTとかのメソッドの名前からそこら辺は察してほしい。
以下、ツッコミでなくマイ補足知識。
02. echo の方が print より速い。
調べてみると、echoやprintは関数ではなく式であるという点は共通だが、echoは戻り値を返さないのに対しprintは常にTRUEを返すそうで。戻り値の評価の分だけわずかにprintの方が遅くなるのでしょうね。ほとんど無視できるような気もするけど。
あと、「n倍速い」というのが強調されているけど、それが環境によらないものなのか、どれくらいの誤差があるのか、絶対値でどれくらい違うのかが気になった。