Movatterモバイル変換


[0]ホーム

URL:


BLOGTIMES

cles::blog

平常心是道
« :: »
2010/06/06

mod_expires、mod_deflateによるサイトパフォーマンスの改善

  httpd  server  tuning  rfc 
このエントリーをはてなブックマークに追加

このサイトにPage SpeedYSlowをかけてみたら、パフォーマンスの改善方法としてページを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

# Insert filterSetOutputFilter DEFLATE# Netscape 4.x has some problems...BrowserMatch ^Mozilla/4 gzip-only-text/html# Netscape 4.06-4.08 have some more problemsBrowserMatch ^Mozilla/4\.0[678] no-gzip# MSIE masquerades as Netscape, but it is fine# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48# the above regex won't work. You can use the following# workaround to get the desired effect:BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html# Don't compress imagesSetEnvIfNoCase Request_URI \\.(?:gif|jpe?g|png)$ no-gzip dont-vary# Make sure proxies don't deliver the wrong contentHeader append Vary User-Agent env=!dont-vary

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

ExpiresActive OnExpiresByType image/jpeg A86400ExpiresByType image/gif A86400ExpiresByType image/png A86400ExpiresByType text/css A86400ExpiresByType text/javascript A86400<Files ~ "\.(jpe?g|gif|png|css|js)> Header set Cache-Control max-age=86400</Files>

この2つの対策でどれくらい帯域の消費量が変化するかを観察していきたいと思います。


    byhsur at 22:35[5年前][4年前][3年前][2年前][1年前][1年後][2年後][3年後][4年後][5年後] |
    こんな記事もあります 「no-gzip BrowserMatch ExpiresByType
    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3589
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL:Yahoo! JAPAN IDでログイン

    « :: »
    Copyright © 2004-2023 by CLES All Rights Reserved.
    サイト内検索
    検索ワードランキング
    へぇが多いエントリ
    閲覧数が多いエントリ
    1 .アーロンチェアのポスチャーフィットを修理(99668)
    2 .年次の人間ドックへ(99083)
    3 .福岡銀がデマの投稿者への刑事告訴を検討中(99072)
    4 .三菱鉛筆がラミーを買収(98682)
    5 .2023 年分の確定申告完了!(1つめ)(98651)
    最新のエントリ
    cles::blogについて
    誰が書いてる?
    最近行った場所
    サイトポリシー
    タグ一覧
    検索ワードランキング

    Referrers

      Powered by CLES
      Nucleus CMS v3.31SP3/w memcached
      21375050(W:5675 Y:1545 T:0869)
      cles::blogのはてなブックマーク数
      benchmark


      [8]ページ先頭

      ©2009-2025 Movatter.jp