当前位置: 首页 > news >正文

网页从点击到显示:前端开发视角下的旅程

文章目录

    • 网页从点击到显示:前端开发视角下的旅程
      • 1. DNS 解析 (Domain Name System Resolution)
      • 2. 建立 TCP 连接 (Transmission Control Protocol Connection)
      • 3. 发送 HTTP 请求 (Hypertext Transfer Protocol Request)
      • 4. 服务器处理请求并返回 HTTP 响应
      • 5. 浏览器解析渲染页面 (Browser Parsing and Rendering)
      • 6. 关闭 TCP 连接
      • 总结
      • 常见 HTTP 状态码

网页从点击到显示:前端开发视角下的旅程

当用户点击一个链接时,一系列复杂而精妙的步骤在幕后展开,最终将网页呈现在眼前。从前端开发的角度来看,这个过程涵盖了网络请求、浏览器解析、渲染等多个环节。

1. DNS 解析 (Domain Name System Resolution)

这是旅程的第一步。当你在浏览器中输入一个网址或点击一个链接时,浏览器首先要知道这个域名对应的服务器 IP 地址是什么。

  • 有关概念:
    • DNS 缓存: 浏览器会检查本地 DNS 缓存、操作系统 DNS 缓存、路由器 DNS 缓存、ISP(互联网服务提供商)的 DNS 缓存,以提高解析速度。
    • DNS 解析流程: 如果缓存中没有,请求会依次发给本地 DNS 服务器、根 DNS 服务器、顶级域名 (TLD) DNS 服务器,最终找到权威 DNS 服务器,获取目标 IP 地址。
    • DNS Prefetching: 浏览器的一种优化技术,预先解析未来可能访问的域名,减少实际点击时的延迟。
      在这里插入图片描述

2. 建立 TCP 连接 (Transmission Control Protocol Connection)

获取到 IP 地址后,浏览器会与服务器建立 TCP 连接。这是一个可靠的、面向连接的传输协议。

  • 有关概念:
    • 三次握手 (Three-way Handshake): 浏览器(客户端)发送 SYN 包请求连接,服务器返回 SYN-ACK 包确认并请求连接,客户端再发送 ACK 包确认,连接建立。
    • 目的: 确保客户端和服务器都能发送和接收数据,并协商好传输序列号。
      在这里插入图片描述

3. 发送 HTTP 请求 (Hypertext Transfer Protocol Request)

TCP 连接建立后,浏览器就可以向服务器发送 HTTP 请求了。

  • 相关概念:
    • HTTP 请求报文: 包含请求行(请求方法、URL、HTTP 版本)、请求头(如 User-AgentAcceptCookieCache-Control 等)、请求体(GET 请求通常没有,POST 请求才有)、响应等。
    • 请求方法 (HTTP Methods): GET、POST、PUT、DELETE、HEAD、OPTIONS 等,各自的语义和使用场景。
    • HTTP/1.1、HTTP/2、HTTP/3: 不同版本的特性,如 HTTP/1.1 的长连接、管道化;HTTP/2 的多路复用、服务器推送、头部压缩;HTTP/3 基于 UDP 的 QUIC 协议。
      在这里插入图片描述

4. 服务器处理请求并返回 HTTP 响应

服务器接收到 HTTP 请求后,会根据请求内容进行处理,例如查询数据库、执行业务逻辑,然后生成 HTTP 响应。

  • 相关概念:
    • HTTP 响应报文: 包含状态行(HTTP 版本、状态码、状态信息)、响应头(如 Content-TypeCache-ControlSet-Cookie 等)、响应体(通常是 HTML、CSS、JavaScript、图片等资源)。
    • HTTP 状态码: 常见的 200 OK、301 Moved Permanently、302 Found、304 Not Modified、400 Bad Request、401 Unauthorized、403 Forbidden、404 Not Found、500 Internal Server Error 等。

5. 浏览器解析渲染页面 (Browser Parsing and Rendering)

前端开发的核心环节,浏览器会下载并解析接收到的资源,最终将网页呈现在屏幕上。

  • 相关概念:

    • 构建 DOM 树 (Document Object Model): 浏览器解析 HTML 文件,将 HTML 标签转化为 DOM 节点,生成 DOM 树。
    • 构建 CSSOM 树 (Cascading Style Sheet Object Model): 浏览器解析 CSS 文件,生成 CSSOM 树。
    • 构建渲染树 (Render Tree / Layout Tree): DOM 树和 CSSOM 树合并,生成渲染树。渲染树只包含需要显示的节点及其样式信息。display: none 的元素不会进入渲染树。
    • 布局 (Layout / Reflow): 浏览器计算渲染树中每个节点的位置和大小。这个过程是耗时的,任何引起元素几何属性变化的 CSS 修改都会触发回流。
    • 绘制 (Painting): 浏览器将渲染树中的每个节点绘制到屏幕上,包括颜色、边框、阴影等。
    • 合成 (Compositing): 浏览器将所有绘制好的图层合并,最终呈现在屏幕上。
  • JavaScript 的影响:

    • 阻塞渲染: 默认情况下,<script> 标签会阻塞 HTML 解析和渲染。这是因为 JavaScript 可能会修改 DOM 或 CSSOM,浏览器需要等待 JavaScript 执行完毕才能继续渲染。
    • asyncdefer 用于优化 JavaScript 加载和执行。加载这样的脚本不会阻塞页面渲染,用户可以立即查看页面。但它们也有区别:
顺序DOMContentLoaded
async加载优先顺序。脚本在文档中的顺序不重要 —— 先加载完成的先执行不相关。可能在文档加载完成前加载并执行完毕。如果脚本很小或者来自于缓存,同时文档足够长,就会发生这种情况。
defer文档顺序(它们在文档中的顺序)在文档加载和解析完成之后(如果需要,则会等待),即在 DOMContentLoaded 之前执行。
  • 性能优化:
    • 减少 HTTP 请求: 合并 CSS/JS 文件、使用精灵图、CDN 等。
    • 利用缓存: HTTP 缓存(强缓存、协商缓存)、浏览器缓存。
    • 优化资源加载: 图片懒加载、字体优化、Preload/Prefetch 等。
    • 优化渲染: 减少回流和重绘、使用 transformopacity 动画(GPU 加速)。
    • 性能监控: Lighthouse、Web Vitals 等工具。

6. 关闭 TCP 连接

当所有资源加载完毕,或者用户关闭页面时,TCP 连接会被断开。

  • 相关概念:
    • 四次挥手 (Four-way Handshake): 客户端和服务器各自发送 FIN 包,并接收对方的 ACK 包,最终关闭连接。
      在这里插入图片描述

总结

从点击链接到网页显示,这是一个涉及到网络协议、浏览器工作原理、前端性能优化等多个方面复杂而协同的过程。理解这些步骤对于前端开发者来说至关重要,它不仅能帮助我们更好地调试和解决问题,更能指导我们进行有效的性能优化,从而提供更流畅的用户体验。

常见 HTTP 状态码

状态码分类含义主要用途/表现注意事项
200 OK成功请求已成功,服务器已返回请求的数据。最常见的成功响应,通常伴随响应体数据。即使响应体为空也可能返回;API 和页面请求均适用。
301 Moved Permanently重定向永久重定向,资源已被永久移动到新 URL。SEO 友好,搜索引擎会传递权重;浏览器会缓存新地址。一旦设置难以撤销;谨慎使用,确认新地址是永久的;调试时需清除缓存。
302 Found重定向临时重定向,资源暂时在新的 URL 处。用于临时跳转,如网站维护、登录跳转等。对 SEO 不友好,不传递权重;浏览器不缓存新地址;注意重定向后请求方法的变化。
304 Not Modified重定向未修改,客户端可使用缓存的副本。性能优化,减少网络传输;配合 Last-ModifiedETag 使用。浏览器自动处理,无需前端特别操作;确保服务器正确发送缓存相关响应头。
400 Bad Request客户端错误客户端请求语法错误,服务器无法理解。请求参数不正确、请求体格式错误、缺少必要字段等。前端问题,需检查请求数据和格式;后端应提供详细错误信息。
401 Unauthorized客户端错误未经授权,需要身份验证。用户未登录、Token 过期或无效。与 403 区分(401是未认证,403是无权限);前端需引导用户重新登录或刷新 Token。
403 Forbidden客户端错误禁止访问,服务器拒绝执行请求。用户已认证但无权访问该资源,或服务器明确拒绝该请求。与 401 区分(已认证但无权限);后端需要完善的权限管理逻辑。
404 Not Found客户端错误未找到,请求的资源在服务器上不存在。URL 拼写错误、资源已删除、后端未定义相应路由。最常见错误;前端应提供友好的 404 页面;后端需检查路由配置和资源是否存在。
500 Internal Server Error服务器错误内部服务器错误,服务器无法完成请求。后端代码逻辑错误、数据库连接失败、第三方服务无响应等。后端问题;后端需详细记录日志以便排查;前端应显示友好提示,不暴露内部错误信息。

参考:https://zh.javascript.info/script-async-defer
博客内容如有错误欢迎指正~
在这里插入图片描述

http://www.dtcms.com/a/309574.html

相关文章:

  • 在SQL SERVER 中如何用脚本实现每日自动调用存储过程
  • 大模型开发框架LangChain之构建知识库
  • 高速公路桥梁安全监测系统解决方案
  • 技术栈:基于Java语言的搭子_搭子社交_圈子_圈子社交_搭子小程序_搭子APP平台
  • 安全专家发现利用多层跳转技术窃取Microsoft 365登录凭证的新型钓鱼攻击
  • 【C#学习Day14笔记】泛型、集合(数组列表Arraylist、列表list)与字典
  • Python 中的可迭代、迭代器与生成器——从协议到实现再到最佳实践
  • 最新docker国内镜像源地址大全
  • AttributeError: ChatGLMTokenizer has no attribute vocab_size
  • 强反光干扰下识别率↑89%!陌讯多模态融合算法在烟草SKU识别的实战解析
  • MySQL分析步
  • U-Net vs. 传统CNN:为什么医学图像分割需要跳过连接?
  • C语言的复合类型、内存管理、综合案例
  • 【AI 加持下的 Python 编程实战 2_12】第九章:繁琐任务的自动化(上)——自动清理电子邮件文本
  • PendingIntent相关流程解析
  • MySQL——事务详解
  • React Refs:直接操作DOM的终极指南
  • RAGFlow Agent 知识检索节点源码解析:从粗排到精排的完整流程
  • Java学习第九十六部分——Eureka
  • Elasticsearch IK 中文分词器指南:从安装、配置到自定义词典
  • IPAM如何帮助企业解决IP冲突、识别未经授权设备并管理子网混乱
  • MAC 升级 Ruby 到 3.2.0 或更高版本
  • ARM Cortex-M 处理器的应用
  • Smart Launcher:安卓设备上的智能启动器
  • ElasticSearch Linux 下安装及 Head 插件 | 详情
  • 设计Mock CUDA库的流程与实现
  • 【秋招笔试】07.27文远知行-第一题
  • Git 实现原理剖析
  • Boost.Asio学习(5):c++的协程
  • Python Flask框架Web应用开发完全教程