やあ。今日も今日とて、プロダクトのパフォーマンスチューニングに頭を悩ませているところかい?
「Lighthouseのスコアがどうしても上がらない」「なぜかファーストビューの表示がコンマ何秒か遅れる」――そんな壁にぶつかったとき、大抵のエンジニアが最初に疑うのは画像の重さやAPIの応答速度だ。だが、ちょっと待ってほしい。君のそのWebサイト、ブラウザのレンダリングパイプラインの喉元に、自らドデカイ足かせをはめていないか?
今回は、フロントエンドエンジニアなら避けて通れない「レンダリングブロックリソース(CSSとJavaScript)」の正体を、ブラウザの内部挙動のドロドロした部分も含めて丸裸にしてやろう。
仕様書のきれいごとだけじゃなく、現場の戦場でどう立ち回るべきか、徹底的に解説していくから心してついてきてくれ。
—
1. なぜブラウザは止まるのか?――DOM構築とレンダリングブロックの裏側
まず、ブラウザがHTMLを受け取ってから画面にピクセルを描画するまでの「裏側のストーリー」を正確に把握しておこう。ここを曖昧にしていると、パフォーマンス改善は永遠に勘と根性の世界から抜け出せない。
CSSOMの完成なしに、レンダリングは絶対に始まらない
ネットワーク経由でHTMLのバイトストリームが流れてくると、ブラウザのパーサーはそれを「トークン」に分解し、ツリー構造を持つ DOM(Document Object Model) を構築し始める。ここまでは教科書通りだ。
問題は、その途中で `` や `