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 にもあげてあるので使ってみてください。