squid-prefetch は名前のごとく、squid にプリフェッチ(先読み)機能を追加するものである。総本山は見つけられなかったが、「Debian — Details of package squid-prefetch in sid」 からダウンロードできる。(perlスクリプトなので、どの環境でも動くでしょう)

squid-prefetch 本体の機能は単純で以下を繰り返しているだけだ。

  1. access.log を読み込み、text/* だった場合、squid に対してキャッシュからそのHTMLを取得する。
  2. 取得した HTML から、リンク(<a href=…>)を抽出し、html だった場合、squid に対してリクエストを送信する

細い回線なので導入を検討していたのだが、結局導入しなかったのは、そもそもsquidでプリフェッチすることの意義を感じなくなったたからだ。

上記の1で、squid-prefetch 自身がhtmlを取得するために、squid に対して 「Cache-Control=only-if-cached」でリクエストを送信する点が問題で、最近のブログなど、htmlページにno-cacheなど、クライアントサイドキャッシュを防ぐようにしているサイトが多く、そのサイトに対してsquidにリクエストを送信しても、504 (キャッシュなし)となってしまい、プリフェッチが効かない。そのため、squid-prefetch を導入したとしてもメリットが感じられなくなってしまったという事だ。

もし、プリフェッチを行なうのであれば、squid-prefetch のような別プロセスではなく、squid 本体で行なってもらうか、ブラウザで行なうしかないと今は思っている。特にブラウザで行なうと、全てをプリフェッチするのではなく統計的な手法(例えば、あるブログでは記事中のリンクをクリックする確率が高いや、画像投稿サイトでは、画像の拡大のリンクをクリックする確率が高い)など別プロセスでは行ないづらい方法ができるのではないかと思う。

コメントを残す

メールアドレスが公開されることはありません。