Diary
twitterもはじめました
[306]2007/7/29(Sun)
[tag: 旧日記システム
]
ぼちぼち日記PHPをいじってるんだけど,どうももう一度設計から考え直したほうが良いような気がしてきた…
っていうか,全然進まないなぁ…日記PHP…
まぁ,やる気が無いのもあるけど(ぉ
…いや,設計当時はそういう関数があるのが知らなくて,地道にパーサ組んでたんだけど… (といっても,非常に単純なものだが…)
それで,自前で関数を作った場合と,組込み関数を使った場合,どれくらい性能差があるかベンチマークやってみたところ,こんなことに。
ソースコードの解析やらなくて済むワケだし。
ちなみに,
次期日記PHPは3倍速い
今までファイルを読んで,そのファイルのパーシング (Parsing: 文法解析。この場合,区切り文字に囲まれたテキストを抜き出すこと) は自前の関数でやっていたんだけど, これだけのパーシングにわざわざ自前の関数を用意する必要なんて無くて, PHPの組込み関数であるexplode()
を使えば良かったんだなぁ…って今更思った。…いや,設計当時はそういう関数があるのが知らなくて,地道にパーサ組んでたんだけど… (といっても,非常に単純なものだが…)
それで,自前で関数を作った場合と,組込み関数を使った場合,どれくらい性能差があるかベンチマークやってみたところ,こんなことに。
#古いの
$ time php diary.php >/dev/null
real 0m0.105s
user 0m0.100s
sys 0m0.008s
#新しいの
$ time php new_diary.php >/dev/null
real 0m0.038s
user 0m0.032s
sys 0m0.004s
やっぱり,PHPのようなスクリプト言語で車輪の再開発をしちゃいけないんだなーって思った。
まぁ,これだけ性能差が出るのも当然といえば当然で,
インタプリタ,スクリプト言語は実行時にソースコードを読んで,解析して,
順順に実行していくので,
プリコンパイルされている組込み関数と性能を比べれば,そりゃ雲泥の差があるワケです。$ time php diary.php >/dev/null
real 0m0.105s
user 0m0.100s
sys 0m0.008s
#新しいの
$ time php new_diary.php >/dev/null
real 0m0.038s
user 0m0.032s
sys 0m0.004s
ソースコードの解析やらなくて済むワケだし。
ちなみに,
explode()
の使いかたはこんな感じ。
$string = "test1<>hoge<>foo";
$token = explode("<>", $string);
for($i = 0; $i < 3; $i++)
echo "token[$i] = $token[$i]\n";
と,書くと
$token = explode("<>", $string);
for($i = 0; $i < 3; $i++)
echo "token[$i] = $token[$i]\n";
token[0] = test1
token[1] = hoge
token[2] = foo
という具合にできる。便利。
token[1] = hoge
token[2] = foo