Node.jsのレスポンスでgzip圧縮を有効化…転送量削減の手順

Node.jsでもgzip圧縮配信を有効にしたい。

もしapacheとかのソフトを使ってる場合、
設定 .htaccess とかで有効にできるから簡単です。

でもNode.jsでは .htaccess は使えません。

そこで転送量を減らすための対策として、
Node.jsでgzip配信を有効化する手順を紹介します。

gzip圧縮とは何?転送量削減に有効

gzip圧縮は元々linuxで使われてる奴です。

▼ 詳しい解決はWiki君を参照

gzip圧縮とは、ファイル圧縮方法の一つで、テキストファイルをサーバー上で自動的に圧縮して配信することが可能になります。gzip圧縮を適用することで、Webページのサーバーとユーザーが使用しているPCで通信しているデータサイズを小さくすることができます。一般的にgzip圧縮によるファイルの圧縮率は約60~70%と言われています。

引用元 : https://digitalidentity.co.jp/blog/creative/gzipcompress.html

gzipというのは広く使われてる形式。

平均圧縮率が60~70%ほどなので、サーバー転送量を減らせるメリットがあります。これはAWSとかの従量課金を減らすのにとても有効です。

あとデータ量が減らせて表示速度も速くなる

1.初めにcompressionをインストール

gzip配信にはあるライブラリを使用します。

その名も compression というライブラリ

環境的には Node.js + Express.js で動きます。

▼ 早速インストールしてみる

最新バージョンは6.14.12の模様

2.全HTTPレスポンスでgzip圧縮を有効に

この設定は本当にとても簡単です。

▼ 例えばexpress側でgzip圧縮配信を有効にする例

たったこれだけ。

見てわかる通り、 app.use(compression());  を書いた時点ですべてが完了しています。GET/POST/PUTなど全HTTPリクエストのレスポンスでgzip配信が有効になります。

本当にこれ以外に書くことがない…超簡単

3.gzip圧縮配信が有効かどうか確認する

本当にgzip圧縮されてるか確認したい…

そういう時は開発者ツールを使います。

まずChrome開発者ツールをF12を押して開き、
その中からNetworkタブを開いてみてください。

そしたら対象のレスポンスをクリック

あとはResponse Headersの中身を見るだけです。

▼ Content-Encodingがgzipなら成功

Node.jsでgzip圧縮が有効になったか調べるには開発者ツールのResponse Headersの中身を見ればいい。画像の赤枠で囲った個所がgzipなら圧縮配信有効済

ちなみに確認時はCtrl+F5でリロードして確認します。

gzip圧縮配信する下限(threshold)も設定可能

このcompressionを使って気づいたことが1つ

データ量が少ない場合はgzipが有効にならない

具体的には1KB以下だと圧縮がされないようです。

もしその閾値(threshold)を変えたい場合、
以下のようなオプションを設定することもできまzす。

▼ thresholdオプションの設定

※ この例だと300bytes以下だと圧縮無効

もし threshold: 0  にすると逆に増えることもあるため、300~1000の間にしておくのが無難かなと思います。ちなみにデフォルトの値は1000です。

ここは各自の環境で調整してください。

転送量削減ならgzip圧縮配信がベスト

転送量を削減するならgzip圧縮は外せないです。

▼ 特にこういう環境ではなおさら

  • 転送量に重量課金されるクラウドサービス
  • 例えばAWSとかAzureとかgcpとか…

以上、Node.jsでのgzip圧縮配信でした。ではまた