特定のリソースを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の挙動に揃うことはなさそうだ。