一:将url解析为ip
- 浏览器缓存:浏览器会按照一定的频率缓存DNS记录。
- 操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去hosts文件中找。
- 路由缓存:路由器也有DNS缓存。
- ISP的DNS服务器:ISP是互联网服务提供商(铁通电信联通)的简称,ISP有专门的DNS服务器应对DNS查询请求。
- 根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行递归查询(DNS服务器先问根域名服务器.com域名服务器的IP地址,然后再问.com域名服务器,依次类推)。
二:建立连接
- 首先浏览器利用tcp协议通过三次握手与服务器建立连接
- 浏览器根据解析到的IP地址和端口号发起http的get请求
- 服务器接收到http请求之后,开始搜索,并使用http返回响应报文
- 浏览器接收到返回的html页面之后,开始进行页面的渲染
三:浏览器解析html
-
转换: 浏览器从磁盘或网络读取 HTML 的原始字节,并根据文件的指定编码(例如 UTF-8)将它们转换成各个字符。
-
令牌化: 浏览器将字符串转换成 W3C HTML5 标准规定的各种令牌,例如,“”、“”,以及其他尖括号内的字符串。每个令牌都具有特殊含义和一组规则。
-
词法分析: 发出的令牌转换成定义其属性和规则的“对象”。
-
DOM 构建: 最后,由于 HTML 标记定义不同标记之间的关系(一些标记包含在其他标记内),创建的对象链接在一个树数据结构内,此结构也会捕获原始标记中定义的父项-子项关系:HTML 对象是 body 对象的父项,body 是 paragraph 对象的父项,依此类推。
四:解析css
CSS 字节转换成字符,接着转换成令牌和节点,最后链接到一个称为“CSS 对象模型”(CSSOM) 的树结构内:
五:渲染
- 将cssom和dom合并为渲染树
- 布局:从render 树的底层节点开始,递归的计算每一个节点的几何信息,分为全局布局和增量布局
- 绘制:遍历渲染树,每个节点根据顺序(背景颜色、背景图片、边框、children、outline)
- 绘制过程是将 render tree 的信息转化为窗口上的每一个像素点,这个过程叫做栅格化。但这样仅仅绘制的是当前窗口的图像,当窗口移动的时候,才会将尚未绘制的部分进行删格化。
- 但现今浏览器更多采用的是 复合层(compositing)方式,而改方式其实就是将一个页面分为不同的 layer,顺便删格化这些 layer,而展示方式变为将不同的 layer 合并为一个新的画面,这样呈现给 web 动画创造了良好的基础。
-
非原创