You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
分层:页面中有很多复杂的效果,如一些复杂的 3D 变换、页面滚动,或者使用 z-index 做 z 轴排序等,为了更加方便地实现这些效果,渲染引擎还需要为特定的节点生成专用的图层,并生成一棵对应的图层树;关于层叠上下文的知识,具体可以参考这里彻底搞懂CSS层叠上下文、层叠等级、层叠顺序、z-index;
用户输入阶段
URL
:用户输入URL
,浏览器会根据用户输入的信息判断是搜索还是网址,如果是搜索内容,就将搜索内容 + 默认搜索引擎合成新的URL
;如果用户输入的内容符合URL
规则,浏览器就会根据URL
协议,在这段内容上加上协议合成合法的URL
;loading
状态,但是页面还是呈现前一个页面,这是因为新页面的响应数据还没有获得;发起URL请求阶段
IPC
)将URL
请求发送给网络进程;URL
,先去本地缓存中查找是否有缓存资源,如果有则拦截请求,直接将缓存资源返回给浏览器进程;否则,进入网络请求阶段;DNS
解析:网络进程请求首先会从DNS
数据缓存服务中查找是否缓存过当前域名信息,有则直接返回;否则,会进行DNS
解析返回域名对应的IP
和端口号,如果没有指定端口号,http
默认 80 端口,https
默认 443。如果是https
请求,还需要建立TLS
连接;TCP
队列:Chrome
有个机制,同一个域名同时最多只能建立 6 个TCP
连接,如果在同一个域名下同时有 10 个请求发生,那么其中 4 个请求会进入排队等待状态,直至进行中的请求完成。如果当前请求数量少于6个,会直接建立TCP
连接;TCP
连接:TCP
三次握手与服务器建立连接,然后进行数据的传输,最后;HTTP
请求:浏览器首先会向服务器发送请求行,它包含了请求方法、请求URI
和HTTP
协议的版本;另外还会发送请求头,告诉服务器一些浏览器的相关信息,比如浏览器内核,请求域名、Cookie
等;如果需要传递参数,则还需要发送请求体;Locaiton
字段中加上重定向的地址信息,接下来浏览器获取这个地址,将会重新导航。)服务器也会向浏览器发送响应头,包含了一些信息,比如服务器生成返回数据的时间、返回的数据类型(JSON
、HTML
、流媒体等类型),以及服务器要在客户端保存的Cookie
等;继续发送响应体的数据;TCP
连接:数据传输完成,正常情况下TCP
将四次挥手断开连接。但是如果浏览器或者服务器在HTTP头部加上Connection: keep-alive
,TCP
就会一直保持连接。保持TCP
连接可以省下下次需要建立连接的时间,提示资源加载速度;准备渲染进程阶段
Content-type
来判断响应数据的类型,如果是字节流类型,就将该请求交给下载管理器,该导航流程结束,不再进行;如果是text/html
类型,就通知浏览器进程获取到的是HTML
,应该准备渲染进程了;提交文档阶段
URL
、前进后退的历史状态,并更新web
页面,此时的web
页面是空白页;页面渲染阶段
文档一旦提交,渲染进程将开始页面解析和子资源加载;渲染阶段比较复杂,所以将分为多个子阶段,按照渲染的时间顺序可以分为:构建
DOM
树、样式计算、布局阶段、分层、绘制、分块、光栅化和合成;构建
DOM
树:HTML
经过解析器后输出一个以document
为顶层节点的树状结构的DOM
;样式计算:这里有 3 个步骤:
<link>
标签引入的外部样式、<style>
标签里定义的样式、以及元素的style
属性上的样式)的CSS
转化成浏览器能够理解的结构styleSheets
;font-weight: bold;
会转成font-weight: 700;
、color: blue;
会转成color: rgb(0, 0, 255);
等;CSS
的继承和层叠规则计算出DOM
树中每个节点的具体样式;布局阶段:
DOM
树中依然存在许多不可见的元素(比如head
),这些元素对于布局是丝毫没用的,所以又会生成一棵只包含可见元素的布局树;然后再根据布局树的每个节点计算出其具体位置和尺寸大小;分层:页面中有很多复杂的效果,如一些复杂的 3D 变换、页面滚动,或者使用
z-index
做 z 轴排序等,为了更加方便地实现这些效果,渲染引擎还需要为特定的节点生成专用的图层,并生成一棵对应的图层树;关于层叠上下文的知识,具体可以参考这里彻底搞懂CSS层叠上下文、层叠等级、层叠顺序、z-index;绘制:为每个图层生成绘制列表,并将其提交到合成线程;
光栅化:通常一个页面很大,而视口很局限,所以合成线程会按照视口附近的图块来优先生成位图,并在光栅化线程池中将图块转换成位图;
合成:一旦所有图块都被光栅化,合成线程就会生成一个绘制图块的命令
DrawQuad
,然后将该命令提交给浏览器进程;之后浏览器将开始生成显示页面。The text was updated successfully, but these errors were encountered: