关于前端:jsliang-求职系列-16-从输入-URL-到页面呈现

2次阅读

共计 2777 个字符,预计需要花费 7 分钟才能阅读完成。

一 目录

不折腾的前端,和咸鱼有什么区别

目录
一 目录
二 前言
三 整体过程
四 DNS 解析
五 TCP 连贯
六 发送 HTTP 申请
七 服务器响应
八 浏览器解析渲染页面
九 其余问题及优化
 9.1 渲染过程碰到 JS 文件怎么解决?
 9.2 为什么操作 DOM 慢

二 前言

返回目录

这是一道经典面试题:

  • 从输出 URL 到页面出现产生了什么?

如果你还不懂,那么能够来看看。

三 整体过程

返回目录

在用户输出 URL,按下回车之后,走过的步骤:

  1. DNS 解析
  2. TCP 连贯
  3. 发送 HTTP 申请
  4. 服务器响应
  5. 浏览器解析渲染页面

当然,这是整体过程,理论面试过程中会进一步具体问,前面会逐步完善,让小伙伴们对这个系列的问题不在纠结。

四 DNS 解析

返回目录

DNS 解析过程就是通过网络查找哪台机器有你须要的资源的过程。

浏览器输出 github.com 并不是真正意义上的去查找这个,而是查找这个域名解析到的 IP 地址。

互联网上每一台计算机的惟一标识是它的 IP 地址,然而 IP 地址并不不便记忆,所以互联网设计者为了不便,才会搞出 github.com 这样的域名。

  • DNS 解析过程
  1. 查问 www.baidu.com
  2. 拜访客户端 DNS 缓存:浏览器缓存 -> 零碎缓存(host) -> 路由器缓存
  3. 拜访 ISP DNS 服务器(ISP,互联网服务提供商,有联通电信挪动等。如果你是电信网络,则进入电信的 DNS 缓存服务器,以下简称本地),如果本地服务器有,则间接返回;如果没有,让本地 DNS 服务器去征询查找。
  4. 本地去征询 DNS 根服务器,DNS 根服务器发现是 .com 区域 治理的,通知本地去征询它。
  5. 本地去征询 .com 顶级域名服务器,.com 顶级域名服务器不太分明,通知本地去征询 baidu.com 主区域 的服务器。
  6. 本地去征询 baidu.com 主域名服务器,baidu.com 域服务器查找到对应的 IP 地址,返回给本地。
  7. 本地服务器告诉用户,baidu.com 对应的 IP 地址,同时缓存这个 IP 地址,下次就间接拜访了。

这个过程能够看看,具体的就不一一解说了,不懂的去看 jsliang 的文章:

  • 浏览器 – 浏览器缓存
  • 计算机网络 – DNS

当然,这两篇文章后续也会公布,能够先疏忽。

五 TCP 连贯

返回目录

  • 建设连贯阶段:3 次握手。建设客户端和服务器之间的连贯。
  • 传输数据阶段
  • 断开连接阶段:4 次挥手。断开客户端和服务器之间的连贯。

如果 3 次握手和 4 次挥手你不懂过程,具体能够看 jsliang 的文章:

  • 计算机网络 – TCP

这里也能够先疏忽,后续进一步跟进了解。

六 发送 HTTP 申请

返回目录

发送 HTTP 申请的过程就是构建 HTTP 申请报文,并通过 TCP 协定发送到服务器指定端口(HTTP 协定默认端口 80/8080HTTPS 协定默认端口 443)。

HTTP 申请报文由 3 局部组成:申请行 申请报文 申请注释

  • 申请行:罕用办法有:GET、POST、PUT、DELETE、OPTIONS、HEAD。
  • 申请报头:容许客户端向服务器传递申请的附加信息和客户端本身的信息。
  • 申请注释:通过 POST、PUT 等办法时,通常须要客户端向服务器传递数据,这些数据就贮存在申请注释中。

当然,HTTP 申请须要留神是否跨域,如何解决跨域问题:

  • 浏览器 – 跨域

七 服务器响应

返回目录

服务器解决申请结束后,会返回 HTTP 报文。

HTTP 响应报文也是由 3 局部组成:状态码 响应报头 响应报文

  • 状态码 1xx 批示信息 - 示意申请已接管;2xx 申请胜利 - 示意申请胜利接管并解析;3xx 重定向 - 示意要实现申请须要更进一步操作;4xx 客户端谬误 - 申请有语法错误或者申请无奈实现;5xx:服务端谬误 - 服务端未能实现非法的申请。 常见状态码:200(胜利)、304(申请内容有缓存,不须要更新)、404(网页或者文件找不到)、500(服务器 - 后端处理错误)。
  • 响应报头:常见的响应报头字段 ServerConnection 等。
  • 响应报文:服务器返回给浏览器的文本信息,通常 HTML、CSS、JS、图片等文件就放在这一部分。

综上,URL 解析过程的步骤 3 和步骤 4 是 HTTP 申请和服务器响应,所以这一块会问到 HTTP 状态码、HTTPS 等知识点,后续咱们会进一步跟进学习,这里先做概念性了解。

八 浏览器解析渲染页面

返回目录

如上图,浏览器的渲染过程为:

  1. 解析 HTML,生成 DOM
  2. 解析 CSS,生成 CSS 规定树(CSS Rule Tree)
  3. DOM TreeCSS Rule Tree 相结合,生成 渲染树Render Tree
  4. 从根节点开始,计算每一个元素的大小、地位,给出每个节点所应该呈现的屏幕准确坐标,从而失去基于渲染树的 布局渲染树Layout of the render tree)。
  5. 遍历渲染树,将每个节点用 UI 渲染引擎来绘制,从而将整棵树绘制到页面上,这个步骤叫 绘制渲染树Painting the render tree

这个渲染过程须要重点记忆,出场概率十分大

在解析渲染过程中,可能会产生 回流 重绘

  • 重绘 (repaint):当元素款式的扭转不影响布局时,浏览器将应用重绘对元素进行更新,此时因为只须要 UI 层面的从新像素绘制,因而 损耗较少
  • 回流(reflow):又叫重排(layout)。当元素的尺寸、构造或者触发某些属性时,浏览器会从新渲染页面,称为回流。此时,浏览器须要从新通过计算,计算后还须要从新页面布局,因而是较重的操作。

那么:

  1. 什么操作会重绘和回流?
  2. 如何优化?

具体可看:

  • 浏览器 – 回流和重绘

后续跟进文章学习也是能够的,这里先贴链接。

九 其余问题及优化

返回目录

在下面步骤中,其实能够挖掘很多优化点:

  • DNS 缓存
  • 浏览器缓存
  • 缩小回流和重绘
  • ……

如果你过程都理解了,那么优化根本不是问题。

当然,为了加深印象,能够看 jsliang 整顿的文章:

  • 浏览器 – 性能优化

9.1 渲染过程碰到 JS 文件怎么解决?

返回目录

JavaScript 的加载、解析和执行会阻塞 DOM 的构建。

也就是说:在构建 DOM 的时候,HTML 解析器如果碰到 JavaScript,那么就会进行构建 DOM,将控制权交给 JavaScript 引擎,等 JavaScript 运行结束,浏览器再从中断的中央复原 DOM 构建。

也就是说:首屏渲染越快,就越不应该在首屏的时候加载 JS 文件,这也就是倡议将 script 标签放到 body 标签底部,或者给 script 标签增加 defer/async 属性的起因。

9.2 为什么操作 DOM 慢

返回目录

  1. 波及 JS 引擎和渲染引擎两个线程间的通信,损耗性能。
  2. 操作 DOM 可能会反复回流,加剧性能损耗。

jsliang 的文档库由 梁峻荣 采纳 常识共享 署名 - 非商业性应用 - 雷同形式共享 4.0 国内 许可协定 进行许可。<br/> 基于 https://github.com/LiangJunrong/document-library 上的作品创作。<br/> 本许可协定受权之外的应用权限能够从 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 处取得。

正文完
 0