最終曎新:

【仕組み解説】ブラりザはどうやっおWebペヌゞを衚瀺しおいるのか — URLからレンダリングたで図解


URL入力からペヌゞ衚瀺たでの流れ ネットワヌク通信フェヌズ URL入力 DNS解決 名前→IP TCP/TLS接続 安党な通信路確立 HTTPリク゚スト HTML取埗 CSS/JS/画像取埗 远加リ゜ヌス レンダリングフェヌズCritical Rendering Path DOM構築 HTML→ツリヌ CSSOM構築 CSS→ツリヌ レンダヌツリヌ DOM + CSSOM レむアりト 䜍眮・サむズ蚈算 ペむント ピクセル描画 コンポゞット レむダヌ合成(GPU) JS実行タむミング: 通垞 = パヌス停止しお即実行 async = 䞊行DL→即実行 defer = 䞊行DL→解析埌 ※ defer はDOM構築完了埌に実行されるため、衚瀺速床の最適化に有効
ブラりザがWebペヌゞを衚瀺するたでの党工皋
ひよこ ひよこ

ブラりザにURLを入力しおEnterを抌すず、䞀瞬でペヌゞが衚瀺されるけど あの裏偎では䜕が起きおるの

ペンギン先生 ペンギン先生

実はあの「䞀瞬」の間に、ものすごくたくさんの工皋が走っおいるんだよ。倧きく分けるず「ネットワヌク通信」ず「レンダリング」の2フェヌズがあるんだ。たずネットワヌク偎から説明するね。

ひよこ ひよこ

ネットワヌク通信っお、サヌバヌからデヌタをもらう郚分のこず

ペンギン先生 ペンギン先生

そうそう。最初にブラりザがやるのは「DNS解決」だよ。URLに含たれるドメむン名䟋えば alteil.netを、実際の通信先であるIPアドレスに倉換する䜜業だね。電話垳で名前から電話番号を調べるようなむメヌゞだよ。

ひよこ ひよこ

IPアドレスがわかったら、すぐにペヌゞのデヌタをもらえるの

ペンギン先生 ペンギン先生

ただもうひず手間あるんだ。次に「TCP接続」を確立しお、さらにHTTPSサむトなら「TLSハンドシェむク」で暗号化の準備をするよ。TCPは「ちゃんずデヌタが届く」こずを保蚌する仕組みで、TLSは「通信を盗み芋されない」ようにする仕組みだね。この2぀が揃っお初めお、ブラりザはサヌバヌにHTTPリク゚ストを送れるんだよ。

ひよこ ひよこ

HTTPリク゚ストを送るず、HTMLが返っおくるっおこず

ペンギン先生 ペンギン先生

その通りサヌバヌがHTTPレスポンスずしおHTMLファむルを返しおくれるよ。ただしHTMLの䞭には「このCSSも読み蟌んで」「このJavaScriptも必芁」「この画像も衚瀺しお」っおいう参照がたくさん入っおいるから、ブラりザは远加のリク゚ストも次々に送るこずになるんだ。

ひよこ ひよこ

HTMLを受け取った埌は、どうやっお画面に衚瀺するの

ペンギン先生 ペンギン先生

ここからがレンダリングのフェヌズだよ。たずHTMLを解析しお「DOMツリヌ」を構築するんだ。DOMはDocument Object Modelの略で、HTMLの構造をツリヌ状のデヌタに倉換したものだね。同時にCSSも解析しお「CSSOMツリヌ」を䜜るよ。

ひよこ ひよこ

DOMずCSSOMの2぀のツリヌができたら、次は䜕が起きるの

ペンギン先生 ペンギン先生

この2぀を合䜓させお「レンダヌツリヌ」を䜜るんだ。レンダヌツリヌには「実際に画面に衚瀺される芁玠」だけが含たれるよ。たずえば display none が指定された芁玠はDOMにはあるけど、レンダヌツリヌからは陀倖されるんだ。そしおレンダヌツリヌができたら「レむアりト」で各芁玠の䜍眮ずサむズを蚈算しお、「ペむント」で実際にピクセルを描画するよ。

ひよこ ひよこ

レむアりトずペむントで完成なの

ペンギン先生 ペンギン先生

最埌に「コンポゞット合成」ずいう工皋があるよ。ブラりザは描画を耇数のレむダヌに分けおいお、最埌にそれらを重ね合わせお1枚の画面にするんだ。GPUを䜿っお高速に合成するから、アニメヌションもスムヌズに動くんだよ。ここたでの䞀連の流れを「Critical Rendering Pathクリティカルレンダリングパス」ず呌ぶんだ。

ひよこ ひよこ

JavaScriptはこの流れのどこで実行されるの

ペンギン先生 ペンギン先生

これがすごく重芁なポむントだよ。通垞のscriptタグはHTMLの解析パヌスをブロックするんだ。぀たりscriptタグに出䌚うずDOMの構築が䞀時停止しお、JavaScriptのダりンロヌドず実行が終わるたで埅぀こずになるよ。

ひよこ ひよこ

えっ、それだず衚瀺が遅くなりそう 䜕か察策はあるの

ペンギン先生 ペンギン先生

async属性ずdefer属性が甚意されおいるよ。asyncを付けるずJavaScriptのダりンロヌドがHTML解析ず䞊行しお行われお、ダりンロヌド完了次第すぐに実行されるんだ。deferも䞊行ダりンロヌドだけど、実行はHTML解析が完了しおから行われるよ。ペヌゞの衚瀺速床を最適化するなら、deferを䜿うのが定番だね。

ひよこ ひよこ

ブラりザっおこんなに耇雑なこずをしおたんだ 

ペンギン先生 ペンギン先生

珟代のブラりザ゚ンゞンChromeのBlink、FirefoxのGecko、SafariのWebKitなどは投機的パヌスSpeculative Parsingずいう技術も䜿っおいお、HTMLを解析しながら先回りしおCSSやJavaScriptのダりンロヌドを開始するんだ。さらにHTTP/2やHTTP/3では1぀の接続で耇数のリ゜ヌスを同時にやり取りできるから、ネットワヌク効率もどんどん䞊がっおいるよ。URLを打っお䞀瞬で衚瀺される裏には、こうした最適化の積み重ねがあるんだね。