キーワードチャンネル高速化のために、If-Modified-Sinceを使うことを考えてみました。これを使えば、検索結果が前回と変わっていなければ検索サイトはステータスコード304(Not Modified)とレスポンスヘッダだけを返し、検索結果本体は転送されないので転送時間が短縮されます。
そこで気になったのが、検索サイトはステータスコード304を返すのかどうか、ということです。検索サイトは動的に検索結果を生成していると思いますので、開発者がちょっとうっかりしていると304を返さない検索サイトが出来上がるでしょう。
では、一つずつ見ていきます。
調べ方は、各検索サイトが出力するRSS FeedのURLをHeimdallrに登録し、連続で「最新の情報に更新」を実行します。このとき送信されるHTTPリクエストヘッダと受信したレスポンスヘッダを見て判断します。
初回のリクエストに対するレスポンスヘッダは以下の通り
HTTP/1.1 200 OK Date: Sat, 05 Feb 2005 09:38:01 GMT Server: Apache/1.3.28 (Unix) mod_gzip/1.3.26.1a mod_perl/1.29 Vary: * Last-Modified: Sat, 05 Feb 2005 09:14:52 GMT Content-Type: text/xml; charset=UTF-8 Proxy-Connection: close Connection: close
Last-Modifiedフィールドの値を次のリクエストのIf-Modified-Sinceフィールドに渡してみると、レスポンスヘッダはこうなります。
HTTP/1.1 304 Not Modified Date: Sat, 05 Feb 2005 09:38:08 GMT Server: Apache/1.3.28 (Unix) mod_gzip/1.3.26.1a mod_perl/1.29 Proxy-Connection: close Connection: close Vary: *
完璧ですね。ステータスコードは304になっています。
初回のリクエストに対するレスポンスヘッダは以下の通り
HTTP/1.1 200 OK Date: Sat, 05 Feb 2005 09:43:30 GMT Server: Apache/1.3.33 (Unix) mod_perl/1.29 Content-Type: text/xml; charset=utf-8 X-Cache: MISS from bulkfeeds.net Proxy-Connection: close Connection: close
残念ながらLast-Modifiedフィールドがありません。 そのためIf-Modified-Sinceフィールドの設定ができず、毎回データを取得しまっているようです。
初回のリクエストに対するレスポンスヘッダは以下の通り
HTTP/1.1 200 OK Date: Sat, 05 Feb 2005 09:51:10 GMT Server: Apache/1.3.31 (Unix) mod_perl/1.29 Set-Cookie: sledge_sid=47341abc81555667821d40239b66ad36; path=/ Content-Length: 7290 Content-Type: text/xml; charset=UTF-8 X-Cache: MISS from rss.sf.livedoor.com Proxy-Connection: close Connection: close
残念ながらLast-Modifiedフィールドがありません。
キーワードチャンネルではもぶろげっとβは使用しておりませんが、試しにこれも調べてみます。
初回のリクエストに対するレスポンスヘッダは以下の通り
HTTP/1.1 200 OK Proxy-Connection: close Connection: close Date: Sat, 05 Feb 2005 09:46:28 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 1.1.4322 Set-Cookie: ASP.NET_SessionId=35fux3iiqlsf5uq2bcmbghns; path=/ Cache-Control: private Content-Type: application/xml; charset=utf-8 Content-Length: 15135
これも残念ながらLast-Modifiedフィールドがありません。
全然話と関係ありませんがもぶろげっとってIIS + ASP.NETで作られているんですね。
というわけで、If-Modified-Sinceが使えるのは(というかLast-Modifiedが分かるのは)Feedbackだけです。これだけ高速化してもあまり意味がないので、キーワードチャンネルのIf-Modified-Since対応は後回しにしたいと思います。
投稿者 MASATO : 2005年02月07日 01:26 | トラックバックこんばんわ
全然関係ないんですが、ツイ見てしまったのでしゃしゃりでてます
そのLast-Modifiedは多分index更新を行った日付です。
検索結果をキャッシュするまでもないです。
同じindexに同じ検索語であれば同じ結果が返ることが保証できれば日付チェックだけで十分です。
ちょっとうっかり言われちゃいましたが
スクリプト側では304返そうとしてもApache側で処理がうまくいかなかったりそれなりに問題あります・・・
Feedbackが何をもって304と判断しているのかも気になります、検索で304出すには検索結果をサーバー内にキャッシュしているのでしょうか・・・謎です
Posted by: 瞳子 : 2005年02月08日 18:17