从输入URL到网页显示的完整过程

64 阅读1分钟

步骤

  • 网络请求
  • 解析
  • 渲染

1. 网络请求

  • DNS查询(得到IP),建立TCP连接(三次握手)
  • 浏览器发起HTTP请求
  • 收到请求响应,得到HTML源代码
  • 继续请求静态资源
    • 解析HTML过程中,遇到静态资源还会继续发起网络请求
    • JS CSS 图片 视频等
    • 注意:静态资源可能有强缓存,此时不必请求

2.解析:字符串-> 结构化数据

  • HTML 构建 DOM树
  • CSS 构建 CSSOM 树(style tree)
  • 两者结合,形成render tree

image.png

解析过程

  • CSS可能来自<style><link>
  • JS可能内嵌、或者外链,还有defer async逻辑
  • img 可能内嵌(base64),可能外链 image.png

优化解析

  • CSS放在<head>中,不要异步加载CSS
  • JS放在<body>最下面(或合理使用defer async)
  • <img> 提前定义 width height

3. 渲染:render tree 绘制到页面

  • 计算各个DOM的尺寸、定位,最后绘制到页面
  • 遇到JS可能会执行(参考defer async)
  • 异步CSS、图片加载,可能会触发重新渲染

总结:

  • 网络请求:DNS解析,HTTP请求
  • 解析:DOM树,CSSOM树,render tree
  • 渲染:计算、绘制,同时执行JS

划重点

  • 现代浏览器的渲染机制非常复杂,不要纠细节
  • 要深入理解“字符串->结构化数据” 这一步
  • 记住流程图