キャッシュを利用して再構築を高速化するMovableTypeプラグイン:KeyCached

Posted by
ぴろり
Posted at
2007/09/18 16:41
Trackbacks
関連記事 (0)
Comments
コメント (9)
Post Comment
コメントできます
Category
プラグイン

 が肥大化・複雑化すると,その再構築に要する時間やサーバ負荷が増すことになります。しかし実際の中には,再構築によってその内容が変化しない部分が少なくありません。そのような部分については毎回々々構築を行う必要はなく,前回に構築された結果を流用することによって,全体の再構築に要する時間や負荷を軽減できると期待できます。

この記事をはてなブックマークに追加する この記事のはてなブックマーク数 | この記事をlivedoorクリップに追加する この記事のlivedoorクリップ数 | この記事をYahooブックマークに追加する この記事のYahoo!ブックマーク数 | この記事をdel.icio.usに追加する

 中の任意のブロックを再構築するか否かの判断が,一つ以上の値に依存しているとします。単純な例を挙げると,前回の再構築から記事の最終更新日が変化していないのであれば,<$ntryTitle$><$ntryBody$><$ntryMore$> などのタグのみを含むブロックは再構築の必要がありません。そのようなブロックには前回の再構築のタイミングでキャッシュされていた内容を流用することで,これらタグの構築処理を省略することができます。
 ところで <$MTInclude module="..."$> は,をモジュール化しているだけなので,モジュールに含まれるタグの再構築を省略することはできません。一方,KeyCached ではタグを一度構築した結果をキャッシュとして保存し,次回以降の再構築の際にタグを解析・構築する替わりに,保存されたキャッシュを利用するため,その部分の再構築処理の一切を省略できる点が異なります。

KeyCached の効果

 結果ページ全体を KeyCached を用いて高速化した場合の効果を測定してみました。機能は,の度に内部で構築処理が行われているため,キャッシュの恩恵が大きく現われます。結果は文字列にのみ依存しているものとします。実際には記事が追加/編集/削除されることを考慮する必要がありますが,とりあえずキャッシュの有効期間を短くすることで対応することにします。

#min [ms]mean [ms]max [ms]total [s]
KeyCached 無し
12,4542,8443,65728.45
22,6112,8563,34228.57
KeyCached 有り
18241,1972,11711.98
28851,3141,71113.15

のレンタルサーバで稼動しているMTに対して,計測には Bench を使用しました。ab -n 10 -c 1 <URL>

 の最新版とマニュアルは KeyCached の Trac リポジトリを参照してください。


この記事を読んだ人はこんな記事も読んでいます ?

その他の関連する記事


関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事のトラックバック URL

寄せられたコメント (最新 5 件を表示しています)

Posted by
footbrain
at
2008/04/01 23:33
ID
1P8ym57A

>もしかして生成された文字列ではなく,その中間にあるkeywords変数そのものをキャッシュしたい,ということですか?

その通りです。
同じようなコードでキーワード抽出を行い、metaタグのなかで使ったりタグクラウドに加工したりしているのですが、その都度同じ処理を繰り返すのは間抜けなので、加工前のデータをcacheできればと考えたんです。

ありがとうございました。

Posted by
ぴろり ◆OLEEi.VOX.
at
2008/04/01 22:50
ID
GQOiiGdM

例のコードは目的がmetaタグを出力することであって,keywords変数は単なる中間生成物(?)ですから,metaタグの生成をキャッシュするだけならコード全体をMTKeyCachedValueで囲ってやれば,キーワード抽出の部分は軽量化できます。
もしかして生成された文字列ではなく,その中間にあるkeywords変数そのものをキャッシュしたい,ということですか?
だとすれば,このプラグインでは無理ですねぇ… おそらくmemcachedなどのやっていることに近くなるのではと思います。

Posted by
footbrain
at
2008/04/01 12:08
ID
/ZzoaIHM

ごめんなさい。<が飛んじゃいました。

たとえば、「アーカイブページごとにSEOを考えた最適なキーワードを自動設定する方法」の
「最適なキーワードを自動的に設定する」に書かれているコードですが、
最後の行の"meta"以前の処理をcacheする事はできませんよね。
$MTSetVar name="keywords" value="$__key__" function="push"$
の"keywords"がcacheできればと思うのです。

つまり「ローカルスコープ変数を作る MovableType プラグイン:LocalBlock」の
MTLocalBlockとは逆で、MTSetVarの処理結果をcacheできたらと思うのですが、

こんなことできるようになりませんか?

Posted by
ぴろり ◆OLEEi.VOX.
at
2008/03/07 01:52
ID
jrfo0qpk

MovableType.jpのプラグインディレクトリに収録されました(´∀`)
http://www.movabletype.jp/plugins/keycached.html

Posted by
showBOO
at
2007/10/01 01:18
ID
rwkWFamc

素早い対応ありがとうございます!

早速DLして導入してみたいと思います。

コメントを投稿する

 (必須/公開)
 (必須/非公開)
 

コメントスパム防止のため投稿前に ランダムな数字 ? を入力してから投稿してください。 お手数ですがご協力のほど宜しくお願いいたします。(必須)