DjangoサーバーでGzip転送を有効にしてみる

やりたいこと

Djangoサーバーで配信するHTML等の要素をGzipで圧縮して利用帯域幅を削減したい。

やってみる

実はDjangoには標準でGzip圧縮できる機能があるので今回はそれを有効にしてみる。

MIDDLEWARE = [
    'django.middleware.gzip.GZipMiddleware',#配信データをGzip圧縮する
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

setting.pyのMIDDLEWAREdjango.middleware.gzip.GZipMiddlewareを追加するだけ。
これでDjangoサーバーから配信される要素にGzip圧縮がかかります。

ただしここでいくつか注意点。

  • staticフォルダに配置されている要素には圧縮がかからない
  • 配信される要素のサイズが200byte以下の場合は圧縮がかからない
  • MIDDLEWAREの一番先頭の要素にdjango.middleware.gzip.GZipMiddlewareを追加する

前の二つはは圧縮にかかるコストより、配信の際のメリットが小さくなるため(通常画像は圧縮済みなのでさらなる圧縮が見込めない)
後者は通常、配信される要素は一番最後に圧縮されるべきだからです。

これで多少は通信速度が上がるかなぁ