perldocのレンダリング結果をキャッシュして高速に表示するモジュールを作りました
perldocコマンドはPerlを書く人にとっては手放せないツールですが、 割と大きいPodファイル(DBI, perltoc, perlfunc, ...)を表示したり、Pod::Text::Color::Delightを使ってカラーリング表示しようとすると、表示するまで少し待たされるのが気になっていました。
そこで、 perldocで出力したフォーマット結果をキャッシュしておき、次回以降素早く表示するPod::Perldoc::CacheというCPANモジュールを作ってリリースしました。
https://metacpan.org/pod/Pod::Perldoc::Cache
インストール
$ cpanm Pod::Perldoc::Cache
使い方
perldocには-M
オプションでPodファイルのフォーマッターを指定することができるので、そこに本モジュールを指定します。
一度目は通常通りの時間がかかりますが、二度目以降はキャッシュを読むようになります。
$ perldoc -MPod::Perldoc::Cache DBI # doesn't use cache $ perldoc -MPod::Perldoc::Cache DBI # use cache!
また、Pod::Text::Color::Delight
などの他のフォーマッターを同時に使いたい場合は-w parser
オプションを使います。
$ perldoc -MPod::Perldoc::Cache -w parser=Pod::Text::Color::Delight DBI
一々こんな長ったらしいコマンド書いていられないので、alias もしくは PERLDOC環境変数でオプションを設定するといいと思います。
$ alias perldoc='perldoc -MPod::Perldoc::Cache -w parser=Pod::Text::Color::Delight' $ export PERLDOC='-MPod::Perldoc::Cache -w parser=Pod::Text::Color::Delight'
キャッシュ先
キャッシュの保存先はデフォルトで~/.pod_perldoc_cache
というディレクトリになっています。
そんな所に保存したくない!って方はPOD_PERLDOC_CACHE_DIR
環境変数に保存先をセットしておけばそこを使ってくれます。
またキャッシュした際のPodの内容はハッシュ値を計算してあるので、元のPodが更新された場合に古いキャッシュは参照しないようになっています。
パフォーマンス
では実際にどれくらいPodの表示速度が速くなるか、実験してみました。 横軸がPodの行数、縦軸が表示までの秒数(小さいほうがベター)です。
赤が標準のperldocコマンドで実行した結果、青が本モジュールを使用した結果ですが、 赤がPodの行数に比例して遅くなってる一方、青は行数に関係なく常に高速に表示できていることがわかります。
終わりに
perldocのレンダリング結果をキャッシュするなんて相当ニッチな機能ですが、 体感的にも表示が少し速くなるので、とりあえず設定しておくといいと思います!
機能追加やバグ報告はgithubまでお願いします!