この辺で書いていたHTTPコンテンツ圧縮を行うPlack::Middleware::Deflater
の Co-Maintainer
にして頂いたので早速アップデートしました。Plackで運用されているとおぼしきアプリケーションは圧縮掛かってないことが多いので、転送量削減、レスポンス速度向上のために検討してみるのはどうでしょう。
問題があれば教えてくださいませ
- CPAN http://search.cpan.org/dist/Plack-Middleware-Deflater/
- github https://github.com/miyagawa/Plack-Middleware-Deflater
Version 0.04 で追加した機能は、
- content_type 毎に圧縮を行うか切り替える機能
- Vary ヘッダにUser-Agentを追加する
- 環境変数 psgix.no-compress, psgix.compress-only-text/html の導入
の3点です。psgix.no-compress, psgix.compress-only-text/html はそれぞれ Apache mod_deflateの no-gzip と gzip-only-text/html と同じ機能です。
おそらく問題が少なく動くサンプルは以下
builder {
enable sub {
my $app = shift;
sub {
my $env = shift;
my $ua = $env->{HTTP_USER_AGENT} || '';
# Netscape has some problem
$env->{"psgix.compress-only-text/html"} = 1 if $ua =~ m!^Mozilla/4!;
# Netscape 4.06-4.08 have some more problems
$env->{"psgix.no-compress"} = 1 if $ua =~ m!^Mozilla/4\.0[678]!;
# MSIE (7|8) masquerades as Netscape, but it is fine
if ( $ua =~ m!\bMSIE (?:7|8)! ) {
$env->{"psgix.no-compress"} = 0;
$env->{"psgix.compress-only-text/html"} = 0;
}
$app->($env);
}
};
enable "Deflater",
content_type => ['text/html','text/css','text/javascript','application/javascript'],
vary_user_agent => 1;
sub { [200,['Content-Type','text/html'],["OK"]] }
};
毎度これをコピペするのはアレなんで、別途Middlewareがあるのがいいのかなと考え中。
あわせて読みたい