KeyCached プラグインを改造
KeyCached プラグインで再構築の高速化! : 亜細亜ノ蛾 で紹介した、KeyCached プラグインを愛用しています。
キャッシュを利用して再構築を高速化するプラグイン KeyCached – Open MagicVox.net
ちょっとコードを見てみると、このプラグインは、Perl モジュールの「Cache::File」を利用しています。
Cache::File – Filesystem based implementation of the Cache interface – search.cpan.org
──が、どうも、同じ用途で同じような名前の「Cache::FileCache」のほうが何倍も速い、という噂をよく聞きます。
Cache::FileCache — implements the Cache interface. – search.cpan.org
パッチを書いてみた
どちらもモジュールも、使い方はほとんど同じなので、ちゃちゃっとパッチを書いてみました。
元のプラグインファイルを「KeyCached.orig」にリネームし、パッチを当てると、Cache::FileCache 版の「KeyCached.pl」ができる、はず。
パッチの当て方は、下記を参照ください。
Windows環境で「ファイルにパッチ(patch)を当てる」 : 亜細亜ノ蛾
さて、Cache::FileCache 版の実力は?
(結論: 超超超~速くなった、けど……)
Cache::FileCache 版の速度
これまた、ぴろりさん作の速度計測プラグインを利用し、記事の最後にある「やっつけテストコード」で、再構築の速度を測ってみました。今回は、記事本文と追記の再構築時間だけを測りました。
ページの再構築に要する時間を計測するプラグイン – Open MagicVox.net
下記の表が、MT4.01 での計測結果です。単位は「ミリ秒」になります。
Cache::File (キャッシュなし) | Cache::File (キャッシュあり) | Cache::FileCache (キャッシュなし) | Cache::FileCache (キャッシュあり) |
---|---|---|---|
30.675 | 83.165 | 28.990 | 1.667 |
63.356 | 50.716 | 3.600 | 1.421 |
67.109 | 21.942 | 3.496 | 1.401 |
31.770 | 21.895 | 4.137 | 1.484 |
30.883 | 22.859 | 4.971 | 1.404 |
31.317 | 26.751 | 16.274 | 1.369 |
98.185 | 23.340 | 3.225 | 1.715 |
33.346 | 53.403 | 3.137 | 1.569 |
32.221 | 65.188 | 3.159 | 1.636 |
32.755 | 24.081 | 3.446 | 1.546 |
ということで、キャッシュ無し(つまりキャッシュを作成する時間込み)でもキャッシュありでも、ちょっ速になりました!
キャッシュ無しだとどうなる?
ただ、ふっと思いついたのが、キャッシュ無しの状態と、速度はどれくらいの違いがあるのか?
確認すると──恐ろしいことに、ほとんどの記事が「0.2 ミリ秒」で再構築が終わってました……。
__END__
(終~了~)
──じゃなくて、なにか KeyCached を使うメリットは無いのか! と探してみると、ちゃんとありました。
Markdown の友
よくよく考えてみると、最近は「改行無し」の HTML 直書きで記事を書いていますが、昔は Markdown 記法を使ってみました。
上記の「0.2 ミリ秒」は「改行無し」の結果です。試しに Markdown 記法の記事部分を「KeyCached 無し」で再構築すると、「30 ミリ秒」くらいかかります。
Cache::FileCache 版の KeyCached を使うと、キャッシュ無しの状態で「39 ミリ秒」、キャッシュありで「1.5 ミリ秒」くらいかかりました。
──正直、微妙な差のような気がしますが、
「全記事を Markdown 記法などで書き、頻繁に再構築する人」
にはお勧めですね。
それにしても、Markdown 記法(など)は再構築に時間がかかるというのが、よくわかりました。
まぁ、環境によっても差が出ると思うので、あんまり鵜呑みにしないほうがいいですよ。みなさんもテストブログなどを作って、試してみてください。
やはり Cache::FileCache は速かった
ということで、何となく KeyCached プラグインてきには残念な結果に終わってしまいました。検索結果のキャッシュなど、使いどころを選べば、便利に高速再構築ができると思うので、もうちょっと使い道を考えてみます。
それはそれとして、Cache::FileCache と Cache::File でこんなに差がつくとは思いませんでした。既存の Perl スクリプトで、Cache::File を使っている人は、乗り換えを考える価値はあると思いますよ。
(こまかい違いとかはわかってないけど)
2007-10-19T13:32:06+09:00 追記
ちょっと時間が経って、この記事の内容(というか書き方)が不安になってきました──。
実際のところ、ひとつの記事を再構築する時間は、自分の環境だと大体「80-300 ミリ秒」くらいかかります(平均すると 200 ミリ秒前後)。そのうち、KeyCached プラグインが関わってくる記事本体の再構築時間が、上記の「数ミリ秒から数十秒」ですからね……。
もっと他に、再構築に時間がかかっている部分があるわけです。
あと、おそらくキャッシュするメリットは、データベースへの接続時間を減らすところにあるのでは、と思いましたね。全ての記事を再構築すると、頻繁にエラーが出てましたが、KeyCached プラグインを導入してから、ほとんどエラーが出なくなりました。
再構築に時間がかかる、またはエラーが頻繁に起こる人は、KeyCached プラグインを導入してみてはいかがでしょうか?
やっつけテストコード
<html>
<head>
<title>test</title>
</head>
<body>
<MTEntries lastn="10">
<!-- 計測開始! -->
<MTStopWatch start="1">
<!-- 記事が見えなくする、だけ -->
<div style="display: none">
<!-- キャッシュのキーを設定 -->
<MTKeyCachedKey><MTEntryModifiedDate>:<MTEntryID></MTKeyCachedKey>
<MTKeyCachedValue><MTEntryBody></MTKeyCachedValue>
<MTKeyCachedValue><MTEntryMore></MTKeyCachedValue>
</div>
<!-- 計測結果を表示 -->
<MTStopWatch stop="1" magnify="1000" sprintf="%.3f">
</MTEntries>
</body>
</html>