txqz memo

Re: PHP コード最適化 Best Practices 63+

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倍速い」というのが強調されているけど、それが環境によらないものなのか、どれくらいの誤差があるのか、絶対値でどれくらい違うのかが気になった。