SMART LLC

速度改善 (3) Apacheで通信データを圧縮

公開日:2014/10/10

速度改善その3。
ホームページ爆速化計画最終章。
速度改善 (1) 画像ファイルの圧縮速度改善 (2) HTMLファイルの圧縮で圧縮したコンテンツを通信時にさらに圧縮しよう作戦。
十分に圧縮してアップロードしたコンテンツをそのままダウンロードさせるのはまだあまい。
.htaccessに設定を追加してApacheで通信データを圧縮することでができたのでメモしとく。

mod_deflateとmod_filter

Apacheで通信データを圧縮するのに使えるモジュールはmod_deflatemod_filterの2つがある。
調べてみた感触だとmod_deflateを使ってる人が多そう。
どっちも試してみたかったけどドメインキングにはmod_filterがインストールされてなかった(:3_ヽ)_
レンタルサーバにモジュールをインストールすることはできない。
mod_filterは諦めてmod_deflateを使うことに。

AddOutputFilterByTypeとSetOutputFilter

mod_deflateを使う場合、さらにAddOutputFilterByTypeとSetOutputFilterの2つのディレクティブが使える。
それぞれの記述方法をメモする。

AddOutputFilterByTypeディレクティブを使う場合。

<IfModule mod_deflate.c>
	AddOutputFilterByType DEFLATE text/html text/plain text/xml
</IfModule>

SetOutputFilterディレクティブを使う場合。

<IfModule mod_deflate.c>
	SetOutputFilter DEFLATE
	SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
</IfModule>

どちらもとりあえず公式ページからコピっただけ。要修正。
AddOutputFilterByTypeは指定したタイプのコンテンツだけを圧縮する設定。
対してSetOutputFilterはタイプ指定なしで全てのコンテンツを圧縮するので、圧縮しないコンテンツはSetEnvIfNoCaseで除外する。
AddOutputFilterByTypeの方がシンプルで好きだけど本ディレクティブは非推奨です。とか書いてある。
というわけでSetOutputFilterを採用。
この場合、SetEnvIfNoCaseで何を除外するのか悩ましい。
画像とかzipとか既に圧縮されていているコンテンツを除外してやることでサーバの負荷を軽減する。
exeとかpdfとか人によっていろいろ指定してる。
このホームページに関してはzipもexeもpdfもないので画像だけ除外してる。というかコピってそのまま(:3_ヽ)_

確認

whatsmyip.orgのHTTP Compression Testなるページで圧縮結果を確認できた。

4.5KBが1.8KB( ゚д゚)
59.5%削減( ゚д゚)
データ圧縮効果ヤバい。
下のはブラウザが圧縮通信に対応してるかどうか。もちろん対応。

画像ファイルの圧縮、HTMLファイルの圧縮、通信データの圧縮とやってみたけど思った通りこの規模のホームページだと実感がない。
気持ち速度アップした気が…するようなしないような(´・ω・`)ショボーン
どこかにごっついホームページないかな…
PHPのob_gzhandler関数てのでも通信データの圧縮ができそう。
暇があったら試してみよう(:3_ヽ)_

SHARE