フロントエンド開発の現場で、こんな壁にぶつかったことはないか?
「Lighthouseのパフォーマンススコアを上げろって言われたから、とりあえず適当に `preconnect` や `prefetch` をヘッダーにベタベタ貼り付けた。でも、逆にサイトが重くなった気がする……」
おいおい、その気持ちは痛いほどよく分かる。ネット上の適当な記事を鵜呑みにして「これ張っとけば速くなるらしいよ」なんて魔法の呪文のようにリソースヒントを乱用すると、ブラウザのネットワーク層でリソースの奪い合い(リソースコンテンション)が起きて、かえってメインスレッドや回線を窒息させる。マジで最悪のアンチパターンだ。
今回は、Webブラウザが裏側でどうやってHTMLをパースし、ネットワークと格闘しながらDOM/CSSOMツリーを構築しているのか、その深層メカニズムを紐解きながら、`dns-prefetch`、`preconnect`、`prefetch` の正しい使い分けをプロの視点で徹底的に叩き込んでやろう。
—
1. ブラウザの裏側で何が起きているか? リソースヒントの生存戦略
まず、ブラウザがURLを叩いてから画面を描画するまでの過酷な旅路を思い出してほしい。
サーバーからHTMLの最初のチャンクが返ってきた瞬間、ブラウザのパーサー(HTML Parser)は猛烈な勢いで上から下へ文字を読み解き、DOMツリーの構築を始める。途中で `` や `