まず、私はあなたがウェブサーバレベル(nginxの上でこれを行う必要があることを強調すべきですまたはapache)。これにはいくつかの理由があります。
パフォーマンス - あなたはPythonでこれを行う場合は、CPU集約型の圧縮を行うための要求を処理することができ、あなたのスレッドのいずれかを使用しています。これは、最適化されたWebサーバーでの処理よりも効率が悪い方法です。
ブロッキング - ほとんどのGZipミドルウェアは応答をブロックし、応答全体を圧縮できるように本文をバッファリングします。ミドルウェアで捕捉されるため、応答をクライアントにストリーミングしようとすると、これはの巨大なの問題です。これは実際にはWSGI仕様であるPEP333に違反しています。
これをすべて念頭に置いて、開発中に少なくともデバッグ目的でPythonで行うのが理にかなっています。
すでにPyramidを使用しているので、[貼り付け]がインストールされています。したがって、あなたは、単にそのようなアプリケーションのパイプラインにpaste.gzipper.GzipMiddleware
を追加することができます。
[filter:gzip]
use = egg:Paste#gzip
compress_level = 6
[pipeline:main]
pipeline =
gzip
app
明らかにあなたが6のデフォルトの圧縮レベルを変更したくない場合は、単にの代わりにパイプラインにegg:Paste#gzip
を追加することができますフィルタを設定し、カスタム名(gzip
)を与えます。
p.s.可能であればRAW DEFLATEを使用してください(Apacheのmod_deflateはGZIPとGZIPのみを送信します)。 GZIPは、RAW DEFLATEを囲む不要なラッパーです。それは常に大きく、余分なチェックサム計算が必要です。 –
DEFLATEに関する実装上の問題があります:http://stackoverflow.com/a/9856879 –