[TOC]

渲染进程的内部运作

这是本系列文章的第3部分。之前我们介绍了多进程体系结构和导航流。在本文中,我们将研究渲染进程中发生了什么。
渲染进程涉及Web性能的许多方面。由于渲染进程内部发生了很多事情,因此本文仅是概述。如果您想更深入地研究, the Performance section of Web Fundamentals 提供了更多资源。

渲染进程如何处理Web内容

渲染器进程负责选项卡内部发生的所有事情。在渲染进程中,主线程处理大多数的用户代码。如果您使用了web worker或者service worker,则有时JavaScript的一部分由worker线程处理。合成器和光栅线线程也运行在渲染器进程内部,以便高效,流畅地渲染页面。
渲染进程的核心工作是将HTML,CSS和JavaScript转换为用户可以与之交互的网页。
image.png
图1:具有主线程,辅助线程,合成器线程和内部光栅线程的渲染器进程

解析

DOM的构造

当渲染进程收到导航提交的消息和开始接收HTML数据后,主线程开始解析文本串(HTML),使之成为DOM
DOM是浏览器对页面的内部表示,并且它提供了Web开发人员可以通过JavaScript与之交互的数据结构和API。
HTML标准定义了如何将HTML文档解析为DOM 。您可能已经注意到,将HTML填充到浏览器永远不会引发错误。例如,缺少

标记是有效的HTML。错误的代码比如 Hi! I’m Chrome!(b标记在i标记之前关闭)被视为 Hi! I’m Chrome!。这是因为HTML规范旨在优雅地处理这些错误。如果您对如何完成这些操作感到好奇,可以阅读HTML规范的”An introduction to error handling and strange cases in the parser“部分。

加载子资源

一个网站通常使用了很多外部资源,例如图像,CSS和JavaScript。这些文件需要从网络或缓存中加载。主线程可以在解析构建DOM时找到它们时并一个接一个的请求它们,但是为了加快速度,它同时也有运行一个预加载扫描器,通常它会在主线程阻塞的时候,扫描后面的代码,以便提前加载img和link之类的外部资源。
image.png
图2:主线程解析HTML并构建DOM树

阻塞型JS

HTML解析器找到