# 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 のサブクラス) を書きました。 {{cpan: 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 * [[wiki/perl/app_cow CoW 要点まとめ]]