自己紹介
PlayGroundのバックエンドコースに所属している2年の松本澪弥です。将来はエンジニアになりたいと思っているので学生のうちにできるだけPGの活動を通して成長したいと思っております。趣味はサッカーなので、最近はW杯とプログラミングで忙しい毎日を送っております笑
本文
今回はwebブラウザが、webページを表示する仕組みをできるだけ詳しくみていきたいと思います。まずwebブラウザが、webページを表示するというと、
・ブラウザがサーバーに対してHTTPリクエストを行う
・サーバーがクライアントであるブラウザに対してレンポンスをする。ここにHTMLが含まれている。
・それを元に、Webページを表示する。
というのが一般的に説明される仕組みだと思います。でもよく考えると ③それを元に、Webページを表示するとはなんぞやとなりませんか??僕はなりました笑。なので今回はこの部分について詳しく調査してみたいと思います。
流れ(要旨)
①DOMを作成
②CSSOMを作成
③レンダーツリーを作成(DOMとCSSOMを合体!)
④レンダーツリーを元にレイアウト
⑤Painting!!!!!!!!!!
①DOMを作成
DOMというとよくDOM操作などで聞く単語ですが、なんとなくしか理解してないという人も多いと思います。そこで、詳しくみていくことにします。まず、DOMとはで検索してみると、
DOM とは Document Object Model の略で HTML や XML 文書を取り扱うための API です。 DOM は標準化団体である W3C で以前は標準化が行われていましたが、現在では WHATWG によって標準化が行われています。
と書かれていますが初心者の僕からしたらなんのこっちゃわかりません。そこで、ちゃんと理解してみると次のような感じでした。
htmlを PC のメモリ上にどのような形式で格納するのかを定義したもの。
というのも、ブラウザだろうが、Excelだろうがアプリケーションは処理がハードウェアのメモリに書き込まれて、それをCPUが計算するということになっています。で、ブラウザというアプリケーションはhtmlを受け取るとそれを、 DOMとという形式に直し、割り当てられているメモリに書き込みます。そして、DOMは以下のようになります。
![](http://blog.shinonome.io/content/images/2022/12/1_fkDHl1bz7qat_LKTpAWY0g.png)
![](https://miro.medium.com/max/950/1*fkDHl1bz7qat_LKTpAWY0g.png)
DOMの仕様:https://dom.spec.whatwg.org/
②CSSOMを作成
これはさっき言った、DOM のCSS版です。CSS Object Model というらしいです。これはあまり聞いたことなかったのですが、仕組みはDOMと同じようです。
![](http://blog.shinonome.io/content/images/2022/12/l9uwf.png)
![](https://cdn.sstatic.net/Sites/stackoverflow/Img/apple-touch-icon@2.png?v=73d79a89bded)
DOMの仕様:https://www.w3.org/TR/cssom-1/
ちなみに、JavaScriptでDOM操作したり、CSSに変更を加えたりするのにはこの二つのObject Model を操作するらしいです。
③レンダリングツリーを作成(DOMとCSSOMを合体!)
で、こいつらを合体させます。ちなみにdisplay: noneというCSSを書いたこともあると思いますが、display: noneと書かれたCSSOMの要素をレンダリングツリーを作成するときに、DOMと合体させるとレンダリングツリーにはその要素はこのタイミングで除外されます。
![](http://blog.shinonome.io/content/images/2022/12/1_-ffAB0BPwrt-AQHIea4kWQ.png)
![](https://miro.medium.com/max/1200/0*71ZQQ0SU8FR0lI0S.jpg)
④レンダーツリーを元にレイアウト
<metaname="viewport"content="width=device-width"/>のwidth=device-widthの部分を元に、表示される正確な位置やサイズなどを計算します。
⑤Painting!!!!!!!!!!
最後に、これを元に表示します。
まとめ
Web ページを表示するというだけで、こんなにも処理が行われているんだということを実感しました。知ってる人からしたら、そんな簡単なこと今更と思うかもしれませんが、初心者からすると大変なんです。温かい目で見守ってください笑これからも、PGで勉強してさらに幅広い知識を身につけられるようにしたいです。こうやって記事を書くのは初めてなので、拙い文章であったと思いますが読んでくださりありがとうございました!
参考文献
![](https://res.cloudinary.com/zenn/image/upload/s--HPUGixEX--/co_rgb:222%2Cg_south_west%2Cl_text:notosansjp-medium.otf_37_bold:aki%2Cx_203%2Cy_98/c_fit%2Cco_rgb:222%2Cg_north_west%2Cl_text:notosansjp-medium.otf_80_bold:%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%AC%E3%83%B3%E3%83%80%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9yZXMuY2xvdWRpbmFyeS5jb20vemVubi9pbWFnZS9mZXRjaC9zLS1yUzRQWVN0bC0tL2NfbGltaXQlMkNmX2F1dG8lMkNmbF9wcm9ncmVzc2l2ZSUyQ3FfYXV0byUyQ3dfNzAvaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzI2ZGUzYTFmZjMuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_72/v1627274783/default/og-base_z4sxah.png)