输入url后浏览器发生了什么?

239 阅读1分钟

页面加载过程

DNS解析

  • 浏览器DNS缓存
  • 本地host文件缓存
  • DNS服务器
  • 根服务器

与服务端通信

  • TCP链接(三次握手四次断开)

image.png

数据处理

  • 响应状态码
  • Content-Type 类型

渲染

  • 解析HTML生成DOM树
  • 解析CSS生成CSSDOM
  • 加载或执行(async和defer)JavaScript脚本
  • 生成渲染树
  • 渲染(重绘一次)

async和defer的作用是什么?有什么区别?

  • 没有任何标记 加载脚本并且立即执行,会阻塞HTML解析。
  • defer标记 这个布尔属性被设定用来通知浏览器该脚本将在文档完成解析后,触发 DOMContentLoaded (en-US) 事件前执行。
  • async标记
  1. 对于普通脚本,如果存在 async 属性,那么普通脚本会被并行请求,并尽快解析和执行。
  2. 对于模块脚本,如果存在 async 属性,那么脚本及其所有依赖都会在延缓队列中执行,因此它们会被并行请求,并尽快解析和执行。
  3. 该属性能够消除解析阻塞的 Javascript。解析阻塞的 Javascript 会导致浏览器必须加载并且执行脚本,之后才能继续解析。

Contentload和load

  • 当初始的 HTML 文档被完全加载和解析完成之后,DOMContentLoaded 事件被触发,而无需等待样式表、图像和子框架的完全加载。
  • 当整个页面及所有依赖资源如样式表和图片都已完成加载时,将触发load事件。

渲染过程如下

image.png