2004-12-21

CPANに登録ですか

FeedBack にも導入してみようかな。ちなむと、CPAN に up 希望です。Class::DBI のパフォーマンスを上げる Class::DBI::Plugin::Iterator

 CPANに上げるのはいいんですが、誰かやりかた教えてください。

 ――と思ったらこんなドキュメントを発見。うーん、上げちゃっていいのか心配になります(苦笑)。

 あと、PAUSEにアカウントを作らなくちゃいけないような気がするのと、英語でドキュメントを書かなくちゃいけない*1っぽいのが難点かな。

 ちなみにClass::DBI::Pagerの改善がどうのというよりも、Class::DBI::Iteratorを使えば全件取得しないと勘違いして使っていたので*2、それの対策をしなくちゃなと思ってたのです。

 本当はClass::DBI::Liteとか作るつもりだったのでした*3

パフォーマンス

これ、全体のベースクラスでプラグインしてしまうと、数行のデータ読み込み時とかで遅くなっちゃうかもなので、このプラグインを当てたページ処理の時専用のクラス作って、ページ処理の時とかだけオブジェクトを再blessしてやったりしたらどうだろうか。

むしろオブジェクトの再定義分遅くなっちゃったりしちゃうのかな。Class::DBIのパフォーマンスアップ

 ええと、数行の読み込みの時は圧倒的に早くなります。イテレータを生成するときはSQLを発行しませんから。

 むしろ全件一気に表示するときのほうがパフォーマンス的には良くないです*4。が、そういうときはイテレータを使わないと思うので、問題ない気がしてます。

 そうでもない?

細かくバージョンアップ

 新版上げました。

 改良点は

  • dataメソッドがまともに値を返すようになった。
  • delete_allメソッドの改善
  • 日本語ドキュメントの追加
  • 他、こまごまと

あたりです。確か。

TODO

 ドキュメントを英語にするのと、先読み(prefetch)を追加したらCPANに登録するのも良いかと思うのですが。思うだけで終わりそう……。

 ほか気付いてる点でまずそう(だけど動くからいいよね的)なのは、

  • SQLを発行してるトコはevalで囲んでおいたほうが親切かもね
  • sliceを使ったときの挙動をClass::DBI::Iteratorと同じにする(けど、あっちが変だと思う)
  • インデントはタブにしておいたほうがいい?

あたり。

*1:ちなみに日本語のドキュメントは適当に書きました。

*2:だってIteratorのドキュメントにそれっぽく書かれてるから。Pagerのほうにはちゃんと注意書きがされてたんですけどね……。

*3:高級な機能は必要ないので……。あー、1か月くらい前か。結局放置してたんだけど。

*4:そゆときのためにallメソッドを作っておいたのでそちらをどーぞ。