まだ重たいCMSをお使いですか?
毎秒1000リクエスト を捌く超高速CMS「adiary

2009/07/09(木)動的ページと Last-Modified の検討

adairyの基盤システムであるフレームワーク(Satsuki-system)にあちこち手を入れてるのですが*1、Last-modifiedをどう扱うかで悩んでしまいまいした。

あまり知られていないことですが、adiaryは正しいLast-modifiedヘッダを返します。ネットワーク負荷削減のためには大切なことなのですが、これを正しく返すため関連するすべてのファイルの更新日時を取得し、データベース情報にもテーブル単位で同じものを入れ管理しているためプログラム負荷(実行時間)が増えているという現実があります。

大手サイトはどうしてるのかなと思いまして少し調べてみました。

  • Last-modified を返さない
    • Yahoo、Yahooブログ
    • mixi
    • livedoorブログ
  • Last-modified を返す
    • はてなダイアリー
    • アメーバブログ(トップページのみ)

あまり返さないところが多いようです。画像ファイルとかならともかく、今時テキストファイルコンテンツはあまり気にしなくて良いみたいですね。

  • Last-modified を返すメリット
    • ネットワーク負荷が減る
    • うまくするとリクエストを受けた時点で、処理せずに出力内容を決定できる。トップページにおいて特に大きな効力がある。
  • Last-modified を返さないメリット
    • 動的ページを同一出力する条件をいちいち探索しないため、構造が単純になる。
    • 動的ページ内で柔軟な処理が可能になる。例えばカウンタ機能を実装する等。

ちなみにRFC的には

HTTP/1.1 サーバは、可能であればいつでも Last-Modified を送るべきである。

RFC2616

です。それで結構苦労して後から*2実装したのですが、Satsuki-systemを扱う上で難しくしている要因でもあるので消そうかなあ。

*1 : 仕様の汚い場所を思想を持って直してる。

*2 : と言ってもVer1.00よりずっと昔のβ時代

結局

消しました。実装がとてもすっきりしました。