このBlogは,大まかに言えば吐き出すべきHTMLを$DIVISIONという変数に入れて,雛形となるテンプレートファイルを取り込み一気にページを生成するようにしている。それでこれを担う関数が以下に示すやつである(前半は関係ないので省いている)。このスクリプトは簡単に言えば,テンプレートファイルの中で該当する変数をしかるべきHTMLに置き換えていくような作業をしている。
$html = file($template); // テンプレートファイルを1行1要素の配列に入れる
$html = str_replace("%_TITLE_%", $DIVISION['title'], $html);
$html = str_replace('%_CALENDAR_%', $DIVISION['calendar'], $html);
$html = str_replace('%_CATEGORIES_%', $DIVISION['categories'], $html);
$html = str_replace('%_ARCHIVES_%', $DIVISION['archives'], $html);
$html = str_replace('%_ENTRIES_%', $DIVISION['entries'], $html);
$html = str_replace('%_SEARCH_%', $DIVISION['search'], $html);
$html = str_replace('%_HEADER_%', $DIVISION['header'], $html);
$html = str_replace('%_BODY_%', $DIVISION['body'], $html);
$html = str_replace('%_OTHERS_%', $DIVISION['others'], $html);
echo implode('',$html); // これでHTMLを出力
で,ひとつの変数につき逐一テンプレートファイルをサーチしているわけで,どうも効率が悪いなと思っていた。で,今日(昨日)お昼にメロンパンをかじりながらこの関数を見ていて,ふと効率良さげな方法が浮かんだ。それがこれ。
$divisions = array(
'%_TITLE_%'=>$DIVISION['title'],
'%_CALENDAR_%'=>$DIVISION['calendar'],
'%_CATEGORIES_%'=>$DIVISION['categories'],
'%_ARCHIVES_%'=>$DIVISION['archives'],
'%_ENTRIES_%'=>$DIVISION['entries'],
'%_SEARCH_%'=>$DIVISION['search'],
'%_HEADER_%'=>$DIVISION['header'],
'%_BODY_%'=>$DIVISION['body'],
'%_OTHERS_%'=>$DIVISION['others']
);
$html = str_replace(array_keys($divisions), array_values($divisions), $html);
echo implode('',$html);
以前のやつではstr_replace()という関数が変数$DIVISIONの数だけ出てきているのに対し,ここでは1回で済んでいる。 で,さっそくその効果を検証してみる。
以前のやつだとページ下に表示されるHTML生成時間が大体0.002〜0.003秒であるのに対し,新しいやつは何と0.0005秒前後だ。10倍近くスピードアップしている。これはさっそく新しいのに置き換えねば。
こういうときってうれしいもんですね:)
ちなみに最新のutils.phpは以下です。これまでのやつを普通に上書きされてOKです。
-
最近のコメント