tokuhirom@株主の日記 このページをアンテナに追加 RSSフィード

 | 

2010-05-07

Plack::Request#uri をキャッシュしつつ、ちゃんと expire もできる実装について考える 01:52 Plack::Request#uri をキャッシュしつつ、ちゃんと expire もできる実装について考える - tokuhirom@株主の日記 を含むブックマーク

Plack::Request の現在の実装では、uribase を一切キャッシュしておらず、これらのメソッドを多様すると、URI オブジェクトの生成コストが支配的となってしまうことがある(実際に、私のプロジェクトでこの問題が発生した)。

そこで、Variable::Magic を利用し、データの変更時にキャッシュを clear するようにしつつ、キャッシュをおこなうようにしてみた。

さて、いかがだろうか。なお、ベンチ結果はいかのとおり。

          Rate  orig  fast
orig   15582/s    --  -99%
fast 1048176/s 6627%    --
tifier

ubuntu 10.04 LTS で、dvd みる 23:22 ubuntu 10.04 LTS で、dvd みる - tokuhirom@株主の日記 を含むブックマーク

sudo aptitude install vlc

してから、以下の URL にアクセスして、libdvdcss2 をいれる。

http://unofficial.debian-maintainers.org/

Plack::Request の uri/base が遅い件 21:59 Plack::Request の uri/base が遅い件 - tokuhirom@株主の日記 を含むブックマーク

まとめる時間がないんで、メモだけだが。

Plack::Request#uriPlack::Request#base をよびまくると、支配的になるぐらい遅い。

これは、Plack::Request#uriPlack::Reuqest#base も、一切キャッシュをしていないため。$req->env がかきかえられる可能性を考慮するとただしいのだが、ほとんどの場合はかきかえないとおもうし、自己責任でキャッシュできるような道筋が必要だとかんじた。

あるいは、なにかフックしてもいいのかもしらんけど。

URI->canonical は、必要ないケースも多いとおもうんで、それをオフにしたいというのもある。あれ遅い。

そもそも URIobject でもつ必要があるのかどうかという点もあって、id:kazuhookuあたりは、文字列でもてばいいじゃーん的なアレなんですが。

 |