• 更新:
  • 投稿:
  • カテゴリィ:

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.diff.txt

元のプラグインファイルを「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>

[2] このページの一番上へ戻る