浏览器是如何运作的? | 青训营笔记

124 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第1天,也是真正发技术文章的第1天,受限于个人的经验、技术能力等,难免会有表述不当,技术点理解不到位的地方,欢迎多多指正!

今天主要想总结的是浏览器运行的原理,作为前端开发者,我们经常要去和浏览器打交道。随着前端知识的学习,渐渐对浏览器这个黑盒包括它的运行原理有了一些了解。

现代浏览器结构图

image.png

  1. 用户界面(User Interface)
请求内容显示窗口之外的部分,包括地址栏,回退/前进按钮,书签等。
  1. 浏览器引擎
在用户界面和渲染引擎之间传递数据。
  1. 渲染引擎
渲染显示用户请求的内容。
  1. Networking
用于网络请求
  1. UI backend
用于绘制浏览器界面
  1. JS解释器
解析、执行js代码
  1. 数据存储持久层
帮助浏览器存储数据,比如cookies等

浏览器渲染引擎(浏览器内核)

浏览器渲染引擎也就是浏览器内核,职责就是渲染显示用户请求的内容。默认渲染显示 HTML、XML 文档和图片,也可以通过一些扩展显示其他类型的数据,比如 PDF 文档。

不同的浏览器有不同的内核,Safari 使用的是 WebKit,Chrome 使用的是 Blink 内核。

渲染引擎会先从网络层得到请求文档的内容,然后进行主要的工作流。如下图:

image.png

Parsing

构建DOM

当渲染进程收到 HTML data,主线程开始解析 text string(HTML),把它转为DOM(Document Object Model)

加载子资源

当构建 DOM 的时候,遇到 images、CSS、JS 等外部资源,主线程会从 cache 或者 network 请求加载它们。

JS可以阻塞解析

当 HTML parser 遇到 <script> 标签,它会暂停解析 HTML,加载、解析、执行JS代码

指定(hint to)浏览器你想怎样去加载资源

样式计算

主线程解析 CSS,决定每个DOM节点的 computed style

Layout

主线程会遍历 DOM 和 computed styles,创建 layout tree(含x y coordinatesbounding box sizes 等信息)

Paint

主线程遍历 layout tree 创建 paint records (a note of painting process)

Compositing

参考资料

具体细节可以去看一下这些文章

How browsers work (web.dev)

inside-browser-part3

同时也安利一下这个视频 浏览器是如何运作的?

以上就是浏览器运行原理的简单总结。