IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 2021.7.22 HTTP网络通信及优化指南 -> 正文阅读

[网络协议]2021.7.22 HTTP网络通信及优化指南

从输入URL到看到页面“CRP关键节点的性能优化【HTTP网络层面】

浏览器一共进行七个步骤:

  1. URL解析
  2. 缓存检查
  3. DNS解析
  4. TCP的三次握手
  5. HTTP传输
  6. TCP的四次挥手
  7. 渲染页面

URL解析

  • 传输协议:HTTP / HTTPS(SSL) / FTP(文件上传)…
  • 域名:顶级、一级、二级…
  • 端口号:0~65535 区分同一台服务器上的不同服务 [默认端口号:HTTP: 80 HTTPS: 443 FTP: 21] 默认端口号是浏览器处理的
  • 问号参数:可以把一些信息传递给服务器“get系列”;也可以实现两个页面之间的信息通信;SPA单页面中,实现组件和组件之间的通信;…
  • HASH哈希值:锚点定位;HASH路由;…

编码问题:URL中特殊内容的编码

  • encodeURI decodeURI 编译能力弱,只是把URL地址中的中文或者空格等编译 “用于整个URL的编译”
  • encodeURIComponent decodeURIComponent 编译能力强,还可以多编译一些特殊符号“用于传递参数的某个值编译”
  • escape unescape 只适合客户端之间的通信和编码
axios.get(`http://www.xxx.com/api/list?name=${encodeURIComponent('雪之下雪乃')}&from=${encodeURIComponent('http://www.weixin.com/')}&lx=1`);

缓存检查

缓存检查针对静态资源文件,例如:html/css/js/图片…
缓存位置:内存、硬盘
F5普通刷新:TAB页卡没关闭,先检测内存,再检测硬盘是否有缓存
重新打开页面:直接检测硬盘中是否有缓存
CTRL + F5强制刷新:不检测任何缓存,直接向服务器发送请求

  • 强缓存

    1. 先检测本地是否有强缓存,如果有且没国企,直接从本地获取,然后渲染【HTTP状态码:200】
    2. 如果没有或过期了,则重新向服务器发送请求,拉取回最新的结果,渲染的同时,把本次结果缓存起来
      优势:性能优化的重要手段,可以保证第二次及以后再访问产品,速度会很快
      弊端:可能无法保证本地获取的资源是最新的
      如何解决弊端?
    • HTML是不能做强缓存的
    • 只要HTML不处理强缓存,我们就可以保证其余资源的及时更新:请求资源后面设置时间戳,或者文件名字根据内容生成HASH名
    • 服务器设置的强缓存:在每一次重新从服务器拉取最新资源文件的时候,都在响应头中携带 Cache-Control/Expires “缓存有效期”,以后再访问这些资源,就可以看看本地是否有,以及是否过期了
  • 协商缓存304 【只有强缓存失效后,才会校验协商缓存】

    1. 如果啥缓存都没有,直接从服务器获取最新的资源信息“把信息缓存起来;强缓存:把 Cache-Control/Expires 存储起来;协商缓存:把 Last-Modified/ETag 存储起来”
      Last-Modified:当前资源文件再服务器端最后修改的事件
      ETag:每一次修改文件都会生成一个标志
    2. 再次请求这个页面,如果强缓存不生效,则开始协商缓存
      • 向服务器发送请求,同时带上 if-Modifyed-Since:Last-Modified 或者if-None-Match:ETag 传递给服务器;服务器根据传递的时间/标志,和服务器本身资源文件最后修改的时间/标志,进行对比,如果一样,说明文件没有更新过,直接返回304即可,无需返回内容;如果不一样,说明更新过,那么则返回最新的内容和最新的 Last-Modified/ETag
      • 接收的是304,直接从本地缓存中获取信息渲染即可
        HTML文件资源是可以使用协商缓存的
  • 数据缓存【AJAX/FETCH…】

DNS解析【域名解析】

在DNS服务器上,基于域名找到服务器的外网IP,后面我们就可以基于服务器的外网IP找到服务器了
DNS解析也有缓存

  • 从本地缓存中找时用的是递归查询
  • 从DNS服务器上查找时用的时迭代查找
    一次DNS解析大概20ms~120ms之间
    服务器拆分优势:
  • 资源的合理利用
  • 抗压能力加强
  • 提高HTTP并发

TCP三次握手

在拿到外网IP后,我们开始建立客户端和服务器端连接的通道“TCP通道”

  • TCP:稳定的网络通信协议【图稳定】
  • UDP:不稳定的网络通信协议【图个快,例如音视频的传输】
    TCP作为一种可靠传输控制协议,其核心思想:既要保证数据可靠传输,又要提高效率
    数据传输
    HTTP报文
  • 请求报文
  • 响应报文

TCP四次挥手

断开TCP连接通道

  • connection:keep-alive 长连接,在一定时间内,如果建立连接之后,可以保证连接通道不关闭,这样可以提高传输效率

性能优化汇总

  1. 利用缓存
  • 对于静态资源文件实现强缓存和协商缓存(扩展:文件有更新,如何保证及时刷新?)
  • 对于不经常更新的接口数据采用本地存储做数据缓存(扩展:cookie/localStorage/vuex|redux 区别?)
  1. DNS优化
  • 分服务器部署,增加HTTP并发性(导致DNS解析变慢)
  • DNS Prefetch(预先载入)
  1. TCP的三次握手和四次挥手
  • Connection: keep-alive
  1. 数据传输
  • 减少数据传输的大小
    • 内容或者数据压缩(webpack等)
    • 服务器端一定要开启GZIP压缩(一般能压缩60%左右)
    • 大批量数据分批次请求(例如:下拉刷新或者分页,保证首次加载请求数据少)
  • 减少HTTP请求的次数
    • 资源文件合并处理
    • 字体图标
    • 雪碧图 CSS-Sprit
    • 图片的BASE64
      +…
  1. CDN服务器“地域分布式”
  2. 采用HTTP2.0

网络优化是前端性能优化中的重点内容,因为大部分的消耗都发生在网络层,尤其是第一次页面加载,如何减少等待时间很重要“减少白屏的效果和时间“

  • LOADING 人性化体验
  • 骨架屏:客户端骨屏 + 服务器骨架屏
  • 图片延迟加载
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:51:07  更:2021-07-24 11:53:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:52:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码