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*****>