Published on

浏览器相关知识

输入URL后发生了什么

拿到域名后DNS解析得到IP地址,建立TCP连接,发送http请求,服务器收到请求后,返回响应内容

浏览器接收到字节响应内容,主线程会转换为html字符串,解析为DOM树

在解析DOM树的同时,如果遇到CSS、js,会另外开启一个预解析线程,这个线程会调用网络线程发起请求,得到数据后 针对CSS会生成CSSOM树,在遇到JS时,主线程会停止渲染,转而去等待JS请求完成并且执行完后,才继续剩下的渲染

主线程会根据DOM树和CSSOM树,通过计算样式,生成一个带有样式的DOM树。

这个带有样式的DOM树包含着可见和不可见的所有元素,我们渲染的话只需要可见的,所以需要再生成一个只包含需要渲染的布局树。布局树就确定了元素的具体位置。

之后还会生成一个层级树,这个树的作用是:分层后后续样式如果变动,只需要在相应层级改动即可(willChange属性可以主动让其分层)

之后对每一层会生成对应的绘制指令集(重绘),这一步完成后主线程会暂时告一段落

这些指令集会被提交给合成线程,

合成线程第一步做的是将每一个图层进行分块,目的是为了交给其他多个线程同时完成绘制

分块完成后,会把这些块交给GPU计算每个块的像素点。拿到这些信息后,合成线程去指引GPU完成最终的渲染(这一步会考虑到图形的旋转、缩放、变形,这也是transform效率高的原因)。