Your browser (Internet Explorer 6) is out of date. It has known security flaws and may not display all features of this and other websites. Learn how to update your browser.
X
Post

My_Translateのキャッシュの時間差測定をしてみた。

ZF-Exネタです。


ZF-Exではトランスレータをインスタンス化するとき、
その都度メッセージファイルを全て読み取って
Zend_Translateの初期化処理を行っています。
初期化処理は次の手順で行われます。

1. Zend_Translateをインスタンス化
2. メッセージファイルを全て読み込む
3. 使用する言語をチェックし、その言語を使用するようにセットする

ふと、この部分の初期化処理にはどれくらい時間がかかっているのか、
キャッシュ化する事でどれくらいの短縮が可能であるのか、
気になって調べてみる事にしました。


まずはキャッシュを使わずに読み込むとき、
どれくらい時間がかかっているかの確認。
なおこの測定は自分のWindowsのxampp環境にて
5回測定し、その平均を出しています。

// キャッシュを使わない場合
$start_time = microtime(true);

for($i = 0; $i < 1000; $i++){
    $translate = new My_Translate();
    $ts = $translate->getTranslate();
}
$end_time = microtime(true);

echo $end_time - $start_time;

このようにして初期化状態を確認したところ、
「6.35436487」秒となりました。

毎回6マイクロ秒処理にかかっている計算になるため、
無視するにはちょっと大きい数字です。
しかもまだメッセージ数やファイル数は少ない状態でこれであり、
メッセージが増えればさらに時間がかかるようになるかと思います。


続いて、キャッシュ生成時の時間を測定してみます。
キャッシュはファイルに書き込まれ、
キャッシュ生成にも処理に時間がかかるため念のための確認です。

// キャッシュを生成する場合
$start_time = microtime(true);
$cache_id = 'translate';

for($i = 0; $i < 1000; $i++){
    $translate = new My_Translate();
    $ts = $translate->getTranslate();
    $this->_cache->save($ts,$cache_id);
}
$end_time = microtime(true);

echo $end_time - $start_time;


このように測定したところ「12.976188」秒となりました。
キャッシュを生成しない場合と比べておよそ2倍の差があるようです。


それからキャッシュからの読み込みを測定してみます。
ここでは上の測定によりキャッシュは生成済みであるものとしています。

// キャッシュから読み込む場合
$start_time = microtime(true);
$cache_id = 'translate';

for($i = 0; $i < 1000; $i++){
    $ts = $this->_cache->load($cache_id);
}
$end_time = microtime(true);

echo $end_time - $start_time;


こちらの測定結果は「0.487430573」秒でした。
1回あたり0.5マイクロ秒程度まで抑えており、かなりの時間短縮になりました。


と、いう事で……次のバージョンでキャッシュ機能組み込んでみます。
今回はMy_Translateで作られるインスタンスをキャッシュ化していますが、
My_Translate内でキャッシュ読み込みを完結させるようにしてみます。

TrackBack URL :

Leave a comment  

name

email

website

Submit comment