Cartonとは
@miyagawaさんが作った、Rubyで言う所のBundlerに当たるツールです。
プロジェクト単位で依存モジュールを固定化して利用することができます。
高速化された実装
CPANにはXSを用いてCで実装されたモジュールが存在します。
しかし、コンパイルする必要があるため、環境の制約によっては使えない場合もあります。
そのため、幾つかのCPANモジュールはPerlのみの実装と、XSを用いた実装の2つを用意して、XSが利用可能であればそちらを利用するような仕組みを用意しています。
このような背景から、インストールしておくとそれだけで高速化に効くモジュールが幾つか存在します。
HTTP::Parser::XS
このモジュールはh2oのHTTP1.0向けのParserであるpicohttpparserのPerlバインディングです。
Plack::HTTPParserがバックエンドとして利用しています。
Starletなど、Plack::HTTPParserでHTTPをParseするサーバーを利用する場合は高速化が期待できます。
Time::TZOffset
現在のタイムゾーンからそのオフセットを高速に求めるモジュールです。Plack::Middleware::AccessLog/Plack::Middleware::AxsLogが依存しているApache::LogFormat::Compilerがさらに依存しているPOSIX::strftime::Compilerが利用しています。
Plack::Middleware::AccessLog/Plack::Middleware::AxsLogを利用する場合でかつ、タイムゾーンをログのフォーマットに含める場合は高速化が期待できます。
Cookie::Baker::XS
名の通り、Cookieを生成したりParseしたりするモジュールのXS実装版です。
Cookie::Bakerを利用している、HTTP::Session2やPlack::Middleware::Session::Simpleなどを利用している場合、高速化が期待できます。
また、Plack 1.0040以降からPlack::Request/Plack::ResponseでもCookie::Bakerが利用されるようになったのでPlack 1.0040以降を使っている場合も高速化が期待できます。
WWW::Form::UrlEncoded::XS
Plack 1.0040以降からPlack::RequestでWWW::Form::UrlEncodedが利用されるようになったのでPlack 1.0040以降を使っている場合は高速化が期待できます。
JSON::XS
名の通り、JSONを生成したりParseしたりするモジュールのXS実装版です。
JSON.pmを利用している場合は高速化が期待できます。
Cpanel::JSON::XS
Cpanel::JSONで利用できるCpanel::JSON::XSというやつもいます。Cpanel::JSONは深遠な事情でJSON.pmからforkされたやつですが、たまにCpanel::JSONに依存しているやつがいるので、そんなやつがいたら入れておきましょう。高速化が期待できます。
といってもわからないきがするので、cpanfile.snapshotからfgrep Cpanel::JSON cpanfile.snapshot
というぐあいで探してあげるといいです。
YAML::XS
YAML.pmをご利用の方はどうぞ。と言いたいところですが、YAML.pmはべつにYAML::XSを利用しないので、YAML::XSを直接使ってるやつがいない限りこれは入れても意味ないです。あしからず。
まとめ
ただインストールしておくだけで高速化に貢献してくれるモジュールがいるという紹介でした。特にWebAppを書くときはHTTP::Parser::XSだけでも依存にいれておくとなにかとよいきがします!
Cartonを使う時代になって、これらのモジュールを利用したい場合は明示的にcpanfileに書く必要がでてきており、より意識する必要性が高くなってきたなーということで書いてみました。