[Hiki-dev:00535] Re: データキャッシュ

Back to archive index

Masao Mutoh mutoh****@highw*****
2004年 4月 17日 (土) 18:19:20 JST


むとうです。

On Sat, 17 Apr 2004 15:08:31 +0900
Kazuhiko <kazuh****@fdiar*****> wrote:

> かずひこ@高速化好き です。:)

> At Sat, 17 Apr 2004 04:47:20 +0900,
> Masao Mutoh wrote:
> 
> > HikiのCVS版にキャッシュ機能を付けてみました。
> 
> とても面白い試みですね。さっそくパッチをざっと拝見しました。

どうもありがとうございます。

>     def clear(pageid = nil)
>       return unless $use_cache_data
>       Dir.glob(File.join($cache_path, "html/*")).each do |f|
> 	f.untaint
> 	if pageid
> 	  data = IO.readlines(f).join("\n")
> 	  File.delete(f) if data.include?(pageid.escape)
> 	else
> 	  File.delete(f)
> 	end
>       end
>     end
> 
> この if pageid のところですが、info.db の :references を使う方が低コスト
> で実装できないでしょうか?

私の勘違いだったら指摘していただきたいのですが、
:referencesって、あるページ自身に記述されている別ページのIDですよね?
ここでの削除は、「リンク先が無いときにアンカは"?"がつくんだけど、リンク先が
できたら通常のアンカになる」のに対応するためのものです。

後から追加された画面自身は自分がどこのページから参照されているかわからない
から、後から追加された画面のIDをデータ内に持つページ(+IDじゃなくても
同じ文字列を含んでいればそれも該当します)は全て削除してしまおう、
と考えました。

ひょっとして、info.dbのreferencesって、まだ登録されていない画面IDで
あってもIDとして登録しますか? であれば対応できるかも...。

> あと、'File.join($cache_path, "html/*")' は 'File.join($cache_path,
> "html", "*")' でないと Windows で困ったりします? (自信なし)

なるほど。UNIXしか考えてませんでした。これは直します。
 
> > 以下に簡単な計測結果(それぞれ3回計測した平均値)を
> > 紹介します。
> 
> Web アプリのベンチマ−クには、apache 付属の ab も便利ですよね。
> (特に、mod_ruby とか FastCGI のように直接 ./hiki.cgi とかしないケ−スの
> 評価とかに)

そうなんですか。お恥ずかしながら知りませんでした。勉強になります。
#単純にhiki.cgiの頭とお尻にTime.now入れて計測してました(^^;)

> ==== 以下、余談♪ ====
> 
> > ポイントは以下の3点です。
> > ・プラグインは表示するたびに動的に表示内容が変わる可能性が
> >  あるのでキャッシュできない。
> 
> むとうさんとは別のアプロ−チで私もキャッシュ化を実験しています。私のは、
> サ−チエンジン向けや namazu 検索用に静的な HTML を作る、という方向性です。
> tDiary の squeeze.rb みたいなものといえば分かる人には分かるでしょう。:)
> 用途を限っている分、HTML 生成時点でのプラグイン解釈をそのまま記録して問
> 題ないだろうというわけです。さらに、テンプレ−トも不要な部分は削りまくっ
> たものを別途作って、こんな感じです。

日記の方も拝見させていただいております。

ただ、私は
「ユーザが参照する画面を表示するのに純粋に時間がかかる」
ところを何とかしたい(というか某所での強い要望が....)ので、かずひこさんの
アプローチでは残念ながら十分ではないんですよね。

> そういう意味では、「表示するたびに動的に表示内容が変わる可能性があるプラ
> グイン」を一切使わない Hiki サイトでは、view アクセスを全て静的 HTML に
> 置き換えることで劇的な高速化もできるわけですが (RuBBS がこういう仕組みに
> なっています)、そういうオプションもあってもいいかもしれませんね。

確かに静的なHTMLであれば速いですよね。
でも、recentなどのプラグインを使えないというのはちと痛いですね。
それで割り切れれば良いのですが。

--
余談の余談ですが、次の段階として、
プラグインに「キャッシュしてもOK」フラグをつけれるようなことを考えています。
このフラグがついたプラグインは静的にHTML化されるというものです。
フラグがついていなければ動的なまま残るので互換性もバッチグーです。

---
余談の余談の余談ですが、これをやってみてわかったのが、400ページくらいあると
「素データのHTML化」部分以外も結構遅くなっちゃうんですよね。
mod_rubyやFastCGIが使える環境だといろいろ改善できるみたいですが...。
#SF.jpってこの辺使えるんでしょうか?

それでは。
-- 
.:% Masao Mutoh<mutoh****@highw*****>



Hiki-dev メーリングリストの案内
Back to archive index