特定のリソースをrel=prefetchを使ってプリフェッチしている最中に、何らかの形で新たにリクエストされるような状況になった場合、各ブラウザーはどういう挙動になるのかということを試していた。Firefox 38ではプリフェッチがそのまま続行され、新たなリクエストは発生しないという賢い挙動のようだ。

Demo: Fetching when Prefetching

デモではrel=prefetchを使ってhead要素内で画像を先読みさせ、ドキュメントの読み込み完了の1秒後に動的に突っ込んだimg要素によりリクエストしてやろうとしている。開発者ツールなどでネットワーク状況を確認することで、どういう挙動になるか確認できる。

Firefox 38ではプリフェッチがそのまま続行され、新たにリクエストを発生せずに画像が挿入される。対してChrome 43とInternet Explorer 11ではプリフェッチがそのまま続行された上で、img要素を追加した時にもリクエストが走るようになり、プリフェッチは完全に無駄になる。


主に同じページで使われるリソースを想定したrel=subresourceという別のヒントが考えられていることや、より正確に制御することが可能になるResource Hints仕様(これではrel=preloadになる)が作られていることを踏まえると、rel=prefetch他は現状の実装のままで、仕様に従った実装が新たに追加されそうだ。少なくともrel=prefetchがFirefox 38の挙動に揃うことはなさそうだ。