浏览器的实现原理

94 阅读2分钟

把 URL 变成字符流, 把字符流变成词(token)流,把词(token)流构造成 DOM 树,

把不含样式信息的 DOM 树应用 CSS 规则,变成包含样式信息的 DOM 树,并且根据样式信息,计算了每个元素的位置和大小。

根据这些样式信息和大小信息,为每个元素在内存中渲染它的图形,并且把它绘制到对应的位置。

浏览器的通讯

  • HTTP 2.0 最大的改进有两点,一是支持服务端推送,二是支持 TCP 连接复用。
  • HTTPS 是使用加密通道来传输 HTTP 的内容。但是 HTTPS 首先与服务端建立一条 TLS 加密通道。TLS 构建于 TCP 协议之上,它实际上是对传输的内容做一次加密,所以从传输内容上看,HTTPS 跟 HTTP 没有任何区别。

浏览器渲染过程

1. 如何解析请求回来的 HTML 代码,DOM 树又是如何构建的。

34231687752c11173b7776ba5f4a0e5a.webp

2. 浏览器是如何把 CSS 规则应用到节点上,并给这棵朴素的 DOM 树添加上 CSS 属性的。

  • 节点:DOM 树形结构中的节点相关 API。
  • 事件:触发和监听事件相关 API。
  • Range:操作文字范围相关 API。
  • 遍历:遍历 DOM 需要的 API。

3. css排版

渲染

在正常流的基础上,浏览器还支持两类元素:绝对定位元素和浮动元素。

绝对定位元素把自身从正常流抽出,直接由 top 和 left 等属性确定自身的位置,不参加排版计算,也不影响其它元素。绝对定位元素由 position 属性控制。

浮动元素则是使得自己在正常流的位置向左或者向右移动到边界,并且占据一块排版空间。浮动元素由 float 属性控制。

除了正常流,浏览器还支持其它排版方式,比如现在非常常用的 Flex 排版,这些排版方式由外部元素的 display 属性来控制(注意,display 同时还控制元素在正常流中属于 inline 等级还是 block 等级)。

position

--

合成

就是最大限度减少绘制次数原则。主流浏览器一般根据 position、transform 等属性来决定合成策略,来“猜测”这些元素未来可能发生变化。 规定了 will-change 属性,可以由业务代码来提示浏览器的合成策略

绘制