2012/02/19

Plack アプリで遅延ロードされるモジュールを見る

アプリケーションで利用するモジュールは、できる限り先読み(preload)しておきたい。先読みしておけば、アプリケーション全体のメモリ消費が抑えられるし、遅延ロード(Lazy Load)のコストがなくなります。

モジュールの先読みは、例えば以下のように行います。

starman --preload-app MyApp app.psgi

or

starman -MFoo -MFoo::Bar -MBaz::DBI app.psgi

あえて遅延ロードするという場合を除いて、先読みは行って損はないはず(小さいアプリだと、効果は小さいですお ^-^)。

Plack::Middleware::Debug::LazyLoadModules

明示的に use するモジュール群のピックアップはたやすい。なにせ明示されているから。しかし、暗黙に遅延ロードされてるモジュールやライブラリは調べてみると多く見つかります。utf8_heavy.pl とか unicore/Exact.pl とかその他もろもろがあったり、よく使ってるモジュールがしれっと大量遅延ロードしてたりするから油断ならないのです。

どうせやるなら根こそぎプリロードしてしまいたい。というわけで、そのための Debug Panel (Plack::Middleware::Debug のサブクラス) を書きました。

Plack::Middleware::Debug::LazyLoadModules

以下のように使います。

use Plack::Builder;

builder {
  enable 'Debug::LazyLoadModules',
    filter => qr/\.pm$/,
    class  => 1;
  $app;
};

ロードしているモジュールの総数と、リクエストの中で遅延ロードされたモジュールの数を表示し、パネルに遅延ロードされたモジュール群をリストアップします。filter は、マッチしたものだけ数えて表示するオプション。class は、.pm の場合、パス表示を名前空間な感じに変換表示するオプションです。

filter はあまり必要ないかもしれませんが、class は有効にした方が見やすいかもしれません。

CPAN にもあげてあるので使ってみてください。

SEE ALSO

サイト内検索