プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

Web APIのデータ圧縮

Web APIの性能を最適化する方法としてPagination、キャッシング、圧縮がある。今回は圧縮についてを取り上げる。

既に取り上げたPaginationとキャッシュについてはこちらを参照いただきたい。

architecting.hateblo.jp

architecting.hateblo.jp


メリット

  • 通信量削減
  • インターネットを介した通信、特にクライアントが通信速度が低いところにいる場合、応答速度が向上する

デメリット

  • サーバのCPU負荷上昇
    • 静的コンテンツならば事前に圧縮しておくこともできる
  • アンチウィルスソフト、Proxy、企業のFWやIPSで破棄される可能性がある

流れ

  1. クライアントが対応している圧縮方式の一覧をAccept-Encodingヘッダに記載してリクエストを送る
  2. サーバは圧縮方式を一つ選択してデータを圧縮する
  3. サーバはレスポンスのContent-Encodingヘッダに圧縮方式を記載して圧縮データを返信する
  4. クライアントはデータを展開して読み込む

なおサーバはAccept-Encodingヘッダを無視して暗号化しないこともできる。


圧縮方式

  • gzip
  • deflate
  • brotli(br)
  • compress
  • bzip2
  • lzma
  • xz

gzipがもっとも一般的。

deflateが第2位だったが最近、deflateより圧縮率に優れるbrotliが伸びている。


対象データ

圧縮が効果的なのは、html, xml, css, js と言ったテキストベースのファイルだ。

逆に効果がないのがすでに圧縮済みのファイルだ。JPEG, PNG, GIF などの画像、動画、音声、PDFなどは効果がない。

なお画像の中でもSVG画像はXMLベースなので圧縮は効果的だ。