このサイトにPage SpeedやYSlowをかけてみたら、パフォーマンスの改善方法としてページをgzip転送したほうが良いよとか、画像がキャッシュされるようにLast-ModifiedやETagを出力した方がいいよというアドバイスが出るのでちょっと改善してみました。
† mod_deflateでページをgzip圧縮する
htmlやxml、javascript、cssなどのテキストデータは圧縮するとかなり容量を小さくすることができるので、mod_deflateを使ってgzip圧縮して転送してやります。これに対して、jpgやgif、pngなどの画像やバイナリのデータは圧縮してもほとんど小さくならないので、これらはそのまま転送するようにします。昔、mod_gzipを設定したときにはもっと面倒なイメージがあったのですが、意外と簡単でした。ドキュメントを一通り読んで、サンプルをコピペしたところ特に問題なく動きました。
これをやるデメリットは圧縮に伴うCPU負荷の上昇ですが、このサーバはかなりオーバースペックなので、平時でCPU使用率が1~3%しかないので、今回は特に問題になることはなさそうです。
httpd.conf
† mod_expiresでブラウザのキャッシュを制御する
次はmod_expiresを使ってExpiresヘッダを出力させてみます。このヘッダがなぜ負荷の抑制になるのかというと、Expiresに指定された日時までローカルにキャッシュされた画像を使い続けてくれてくれるので、サイズが大きい画像を何度もサーバからダウンロードしなくなるためです。今回はキャッシュの時間を86400秒(=1日)に設定していますが、調子をみて少しずつ長くしていきたいと思います。このあたりはDNSと一緒と考えればいいのかなとも思いますが、DNSと違ってコンテンツは更新のタイミングを掴みづらいのでそのあたりは難しそうです。
ちなみにこの期間はRFC2616のSection 14.21によると、「レスポンスが "期限切れではない" という事を表すためには、オリジンサーバはレスポンスが送られる時点からおよそ 1 年後の時刻の日付を持つ Expires を送る。 HTTP/1.1 サーバは、Expires の日付に 1 年後以上未来の日付を送るべきではない(SHOULD NOT)」と定義されています。ということで、この値は無限に大きくできる訳ではなく、通常は長くても1年程度にとどめた方いいようです。
参考までに、RFCで使われている助動詞は普通の会話よりも厳密に意味が定義されているので注意が必要です。詳細はRFC 2119 - Key words for use in RFCs to Indicate Requirement Levelsや日本語の解説についてはRFCの文中で出会う「MUST NOT」と「SHOULD NOT」の違いは?などに一度は目を通して置くと良いと思います。
httpd.conf
この2つの対策でどれくらい帯域の消費量が変化するかを観察していきたいと思います。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3589
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。