从输入URL到页面完成加载,发生了什么?

276 阅读2分钟

这是打开网页的一个经典流程,也是一道常问的面试题,笔者在此简单总结一下,供大家理解和记忆。

  1. 首先要进行DNS解析,将URL解析为相应的IP地址。
  2. 然后要与该IP地址的服务器建立TCP连接。
  3. 随后向服务器发出HTTP请求。
  4. 服务器端处理完请求后,将目标数据放到HTTP响应报文中返回给客户端。
  5. 浏览器在取得响应报文后进行解析渲染页面。
  6. 渲染完毕后,页面呈现出来,并等待用户下一步操作。

在这整个过程中,其实蕴含着前端性能优化的所有考虑因素。要解决前端性能优化问题,其实就是在上述过程中寻找最佳方案以提高用户体验。具体地说,DNS解析相对耗时,如果能够减少DNS解析的时间,即加快了页面响应速度。为了解决这个问题,DNS缓存和DNS prefetch被提出,其实归根到底还是减少页面请求,即使用浏览器缓存机制和离线存储技术。建立TCP连接同样非常耗时,我们可以使用长连接,预连接,接入SPDY。对于发送HTTP请求,我们可以减少发送次数和发送体积,比如说使用图片优化、Gzip、构建工具性能调优等。除了这些网络方面的因素,第五步的浏览器渲染页面是性能优化的重中之重。这部分涉及资源加载优化服务端渲染浏览器缓存机制的利用DOM 树的构建、网页排版和渲染过程、减少回流与重绘、DOM 操作的合理规避等。性能优化方面的考量将在后续的博客中展开讨论。