深入了解现代浏览器之三 - 渲染

无意间在 Google Developer 上看到的文章,这是这个系列博客的 第三部分,主要是研究渲染进程所做的事情。渲染进程涉及到 Web 性能的很多方面,这里只是概述,如果你想深入了解,可以去 Web 基础的性能部分看看。

渲染进程处理网页内容

渲染进程负责处理标页内的所有事情。其中,主线程负责处理大部分代码。少部分的代码可能会由工作线程处理(比如 Service Worker 或者 Web Worker)。同时,合成器线程和栅格线程也在渲染进程中运行,负责高效、流畅的呈现页面。

渲染进程具有主线程、工作线程、合成器线程和栅格线程

解析数据

构造 DOM 树

渲染进程接收到导航提交的消息后,就开始接收 HTML 数据,主线程就开始解析文本字符串(HTML),并将其转换成 DOM(Document Object Model)。

DOM 是页面在浏览器内部的结构,也是开发人员通过 JavaScript 与之交互的数据结构和 API。

解析 HTML 的规则由 HTML 标准定义。同时 HTML 标准要求兼容错误的写法,如果你对这个感兴趣,可以查看 An introduction to error handling and strange cases in the parser 的 HTML 部分。

子资源加载

一个网站经常会使用一些外部资源,比如 CSS、图片以及 JavaScript 等。这些文件都需要从网络获取或者是从缓存中加载。主线程在解析构建 DOM 时,会发现一个加载一个,但是这样太慢,于是为了加快速度,“预加载扫描器”会同时运行。当在文档中发现有像 或者 的内容时,预加载扫描器会将请求提交给浏览器进程中的网络线程。

主线程解析 HTML 并构建 DOM 树

JavaScript 可能阻塞解析

如果解析器碰到了

你可能感兴趣的:(javascript,css,chrome,html,chrome-devtools)