Masao Mutoh
mutoh****@highw*****
2004年 4月 17日 (土) 04:47:20 JST
むとうです。 長文です。 HikiのCVS版にキャッシュ機能を付けてみました。 Hiki本体に結構手を入れる形になってしまいましたが、 それなりに効果がありそうですので、是非、本体に 取り込んでいただく方向でご検討いただけると ありがたいです。 なお、すでに私が関係しているサイトには全部入れており、 無事動作しているようです。 それなりに効果が期待できると思いますのですが、 どなたか追試していただけると助かります。 以下に簡単な計測結果(それぞれ3回計測した平均値)を 紹介します。 環境 ruby 1.9.0 (2004-03-27) [i686-linux] Linux / Athlon 1.0GHz ■ defaultスタイル namaraii.com/hiki/にある、「過去のご意見など7」 パッチあてる前: 1.28 sec 適用後(初期呼び出し): 1.32 sec 適用後(2度目以降): 0.95 sec ■ RD+スタイル Ruby-GNOME2 Project Website(416pages) Gtk::Window 6.22sec => 1.89 sec ※)実際には全体のデータ量・そのページの記述量に依存するので この結果で一概にRD+スタイルの方が遅いということにはなりません。 念のため(^^;)。 ----- 導入方法ですが、添付のパッチをあてた上で、hikiconf.rbに 以下を記述します。 $use_cache_data = true ----- 以降はちと細かい実装の話をします。 まず、従来のHikiの表示までの流れは以下のようになります。 1. PageIDをキーに生データを読み込み 2. スタイル(default/rd+)がそれぞれ生データをHTMLに加工。 プラグインがある場合はそれも実施して埋め込む。 このときのHTMLは一部部分(内容)となる。 3. 2.で作ったHTMLをAmritaに流し込み、全体のHTMLを生成する。 4. 3.で作ったHTMLを返す。 これを以下のように変更しました。 ポイントは以下の3点です。 ・プラグインは表示するたびに動的に表示内容が変わる可能性が あるのでキャッシュできない。 ・キャッシュデータはAmritaが生成した全体のHTMLとなる。 プラグイン部分は-{{-plugin-}}-という文字列で囲んでおき、 表示するたびにプラグインの実行結果に変換する。 ・他の画面が自分の画面を参照している場合、リンクの表示方法 が変わったりするので、自分自身でキャッシュデータを作る際に はキャッシュディレクトリの全てのファイルを検索し、自分自身 のPageIDを持つファイルは全て削除する。 キャッシュファイルがある場合は以下のようになります。 1. PageIDをキーにキャッシュを読み込み 2. キャッシュデータに埋め込まれたプラグインを実行し 実行結果を再度埋め込む 3. 2.で作ったHTMLを返す。 つまり、スタイルによる変換とAmritaによる変換が無くなって いる分が高速化できた部分となります。 #tocは特別扱いでキャッシュ対象になっているのでその分も速く #なっていると思います。 キャッシュファイルがない場合は以下のようになります。 1. PageIDをキーにキャッシュを読み込み 2. キャッシュデータがないのでPageIDをキーに生データを読み込み 3. スタイル(default/rd+)がそれぞれ生データをHTMLに加工。 プラグインがある場合は-{{-plugin-}}-と変換する。 4. 3.で作ったHTMLをAmritaに流し込み、全体のHTMLを生成する。 5. 4.で作ったHTMLをキャッシュデータとして保存する。 6. 他のキャッシュファイルを全て検索し、自分自身のPageIDを持つ キャッシュファイルは全て削除する。 6. キャッシュデータに埋め込まれたプラグインを実行し 実行結果を再度埋め込む 7. 2.で作ったHTMLを返す。 若干、処理が増えているのを見てもわかるとおり従来より遅くなります。 といってもそれほど遅くなるわけではないですし、登録に比べると 参照の方が多いでしょうからあまり問題にはならないと判断しました。 それでは。 -- .:% Masao Mutoh<mutoh****@highw*****> -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: hiki_cached.patch 型: application/octet-stream サイズ: 17315 バイト 説明: 無しDownload