【php】define()は遅いのか
問題
define()って遅いんですか?
調査結果
大量のdefine()で定数を定義をした場合と、大量の変数を定義をした場合を比較した。
・test1.php
<?php define('D_0', '0'); define('D_1', '1'); define('D_2', '2'); define('D_3', '3'); define('D_4', '4'); define('D_5', '5'); define('D_6', '6'); ...(以下10000まで)
・test1.php
<?php $D_0 = '0'; $D_1 = '1'; $D_2 = '2'; $D_3 = '3'; $D_4 = '4'; $D_5 = '5'; $D_6 = '6'; ...(以下10000まで)
実行結果
# time php test1.php real 0m0.088s user 0m0.059s 定数定義 10000回 sys 0m0.015s # time php test2.php real 0m0.158s user 0m0.136s 変数定義 10000回 sys 0m0.009s
さらに10万回の場合のテスト
# time php test1.php real 0m0.580s user 0m0.481s 定数定義 100000回 sys 0m0.084s # time php test2.php real 0m11.909s user 0m11.846s 変数定義 100000回 sys 0m0.046s
定義自体はdefineが速い。
変数の定義は回数が多くなると異常に遅くなる。
変数の定義にはメモリの確保や付随する処理が多くあるのだろうか。他に違う点といえば、定数にはスカラデータ(boolean, integer, double, string)が指定できるが、変数はさらに配列やresource型なども格納できて、変数の方が高機能。
参照するときは変数の方が若干速いのだが。
メモリ使用量も気になって、スクリプトの最後に memory_get_usage() を追記して確認したが、10万回のとき、変数定義は24MBの方が、定数定義define()は31MBで、変数定義の方がメモリの使用量は少なかった。
1つのスコープの中に100万個も変数を定義するという、通常あまりなさそうなことをしてみた。結果はなかなか面白かった。
コメント