0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Spring Boot で gzip を有効化してフロント配信を軽くする

はじめに

Spring Boot をバックエンド兼フロントエンド配信サーバーとしてモノリシックな構成で使っているとき、レスポンスを gzip 圧縮しておくとネットワーク通信量をかなり削減できます。

なにが嬉しいのか

  • HTML / JS / CSS などテキストベースのファイルは圧縮効率が高く、体感でも読み込みが速くなることが多い
  • 設定は application.yml に数行書くだけ
  • ブラウザ側では特別な実装は不要(Content-Encoding: gzip が付いて返ってきたレスポンスは、ブラウザが自動で伸長してくれる)

設定方法

application.yml の例

server:
  compression:
    enabled: true
    mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json
    min-response-size: 2KB

各設定項目の説明

項目 説明
server.compression.enabled gzip 圧縮を有効化するフラグ
server.compression.mime-types 圧縮対象にする Content-Type。JS / CSS / JSON / HTML など、テキスト系を指定することが多い
server.compression.min-response-size 何バイト以上のレスポンスを圧縮するか。デフォルトは 2KB(小さすぎるものは圧縮してもあまり得をしないため)

どのレスポンスが圧縮されるのか

ブラウザからサーバーへのリクエストには、標準で以下のようなヘッダーが付いています。

Accept-Encoding: gzip, deflate, br

Spring Boot 側で compression.enabled=true にしておくと、次の流れで圧縮が行われます。

  1. クライアントの Accept-Encoding を見て gzip が使えそうか判断
  2. 対象の mime-types かつ min-response-size 以上のレスポンスだけ gzip 圧縮
  3. 圧縮したレスポンスに Content-Encoding: gzip を付けて返す

ブラウザ側では何もしなくてよい

フロントエンド側で解凍処理を書く必要はありません。

  • ブラウザは Content-Encoding: gzip を見て自動で伸長する
  • JavaScript から見ると普通のレスポンスと同じように扱える
  • fetchresponse.text() / response.json() などもそのまま使える
  • <script src="/app.js"> などで読み込む場合も意識することはない

動作確認方法(ブラウザ DevTools)

Chrome を例に動作確認の手順を記載します。

  1. 対象のページを開く
  2. DevTools を開く(Cmd + Option + I / F12 など)
  3. Network タブ を開いてページをリロード
  4. JS / CSS / HTML のリクエストを 1 つ選択
  5. Headers タブの Response Headers を確認
    • Content-Encoding: gzip が付いていれば OK

Chrome の Network タブでは Size 列が 10.3 KB / 45.1 KB のように 転送サイズ / 展開後サイズ で表示されるので、「どのくらい圧縮されているか」をざっくり確認できます。

画像や動画はどうする?

PNG / JPEG / MP4 など、すでに圧縮されているバイナリについては以下の理由から mime-types に含めない方が無難

  • さらに gzip してもほとんどサイズが変わらない
  • CPU だけ余計に使う

まとめ

数行書くだけでコスパよく初回ロードの体感速度が変わるケースが多いので、Spring Boot でフロントを配信している場合はぜひ試してみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?