网络请求优化
中等 🟡性能优化
4 个标签
预计阅读时间:6 分钟
性能优化网络请求HTTP/2缓存策略
网络请求优化
网络请求是前端性能的关键瓶颈,优化网络请求可以显著提升页面加载速度和用户体验。
HTTP 协议优化
HTTP/2:
•多路复用:一个连接处理多个请求:HTTP/2引入的多路复用特性允许在单个TCP连接上同时传输多个请求和响应数据,突破了HTTP/1.1的队头阻塞问题,在HTTP/1.1中浏览器通常只能并发6个请求,而HTTP/2可以在一个连接上并发传输任意数量的请求,大幅提高了页面资源的并行下载能力,是HTTP/2性能提升的核心特性
•服务器推送:主动推送资源:HTTP/2的服务器推送允许服务器在客户端请求某个资源时,主动将相关资源推送到客户端缓存中,当浏览器需要这些资源时可以直接从缓存使用,无需等待请求,例如当浏览器请求HTML页面时,服务器可以主动推送相关的CSS、JavaScript和图片资源,减少后续请求的延迟,服务器推送可以显著减少首屏加载时间
•头部压缩:减少头部大小:HTTP/2使用HPACK算法对请求和响应头部进行压缩,包括静态表(常见的头部字段)、动态表(当前连接中出现的头部字段)和哈夫曼编码,显著减少了头部传输的数据量,在HTTP/1.1中每个请求都需要携带完整的Cookie、User-Agent等头部,而HTTP/2只需要传输头部索引,大幅减少了网络传输开销
•二进制分帧:更高效的数据传输:HTTP/2将数据分割成更小的帧进行传输,每个帧都有帧头标识其所属的流(请求/响应),相比HTTP/1.1的文本格式,二进制格式解析更高效,错误更少,二进制分帧是多路复用的基础,允许在单个连接上并发传输多个请求和响应,同时保持顺序正确,是HTTP/2高性能的重要基础
HTTP/3:
•基于 QUIC 协议
•更快的连接建立
•更好的拥塞控制
•更强的可靠性
HTTPS:
•加密传输
•提高安全性
•搜索引擎排名优势
•浏览器信任度高
缓存策略
强缓存:
•Cache-Control 响应头
•Expires 响应头
•不需要向服务器发起请求
•直接使用缓存资源
协商缓存:
•ETag 响应头
•Last-Modified 响应头
•向服务器发起请求验证资源是否过期
•未过期则使用缓存
缓存策略选择:
•静态资源:长缓存时间:对于不经常变化的静态资源如JavaScript、CSS、图片、字体等,应该设置较长的缓存时间(如一年),通过Cache-Control: max-age=31536000响应头实现,这样浏览器在首次加载后会缓存这些资源,后续访问直接从缓存读取,显著减少加载时间,通常配合文件名哈希(content hashing)实现缓存更新,当文件内容变化时生成新的哈希值,文件名变化后浏览器会重新请求
•动态资源:协商缓存:对于经常变化的动态资源如HTML页面、API数据等,应该使用协商缓存策略,通过ETag或Last-Modified响应头让浏览器在后续请求时验证资源是否更新,浏览器发送If-None-Match或If-Modified-Since请求头,服务器判断资源是否变化,未变化返回304状态码使用缓存,变化则返回新资源,协商缓存可以在保证内容新鲜度的同时减少数据传输
•关键资源:预加载:对于首屏渲染必需的关键资源如关键CSS、关键JavaScript、首屏图片等,应该使用preload预加载,让浏览器提前开始下载,避免渲染阻塞,preload可以设置正确的资源优先级,确保关键资源优先下载,通常将首屏必需的CSS内联到HTML中,JavaScript使用defer或async加载,避免阻塞HTML解析
•非关键资源:延迟加载:对于非首屏必需的资源如图片、JavaScript模块、组件等,应该使用懒加载策略延迟加载,图片使用loading="lazy"属性或Intersection Observer API实现懒加载,JavaScript使用动态import()语法进行代码分割和按需加载,延迟加载可以减少首屏加载时间,加快首次内容绘制,让用户更快看到页面内容
请求优化
减少请求数量:
•资源合并:CSS/JS 合并
•精灵图:合并小图标
•内联关键 CSS
•减少第三方脚本
减少请求大小:
•压缩资源:gzip、brotli
•最小化 CSS/JS/HTML
•优化图片:WebP、压缩
•移除不必要的代码
请求优先级:
•预加载关键资源
•延迟加载非关键资源
•合理使用资源提示
•优化请求顺序
CDN 与边缘计算
CDN:
•内容分发网络
•就近访问资源
•提高加载速度
•减轻源服务器负担
边缘计算:
•在边缘节点处理请求
•减少延迟
•提高响应速度
•适合动态内容
连接优化
DNS 优化:
•DNS 预解析
•减少 DNS 查询时间
•使用可靠的 DNS 提供商
•合理设置 DNS TTL
TCP 优化:
•启用 TCP 快速打开
•优化 TCP 窗口大小
•减少 TCP 连接建立时间
•使用 HTTP 持久连接
TLS 优化:
•启用 TLS 会话复用
•使用 TLS 1.3
•减少 TLS 握手时间
•优化证书链
监控与分析
网络监控:
•Chrome DevTools Network 面板
•WebPageTest
•Lighthouse
•New Relic
关键指标:
•DNS 解析时间
•TCP 连接时间
•TLS 握手时间
•首字节时间 (TTFB)
•内容传输时间
•总加载时间
最佳实践
•升级到 HTTP/2 或 HTTP/3
•实现合理的缓存策略
•减少请求数量和大小
•使用 CDN 分发静态资源
•优化 DNS 和 TCP 连接
•监控网络性能
•持续优化和测试
•考虑不同网络环境