web优化—网络

168 阅读2分钟

「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战

网络请求时间花在哪?

  1. 从域名到IP地址,需要DNS协议查询;
  2. HTTP协议使用TCP传输的,要建立TCP连接;
  3. 如果用HTTPS,要交换证书;
  4. 网页内还会有图片等其他资源。

优化技术方案

秒开率

缓存

  • 合理使用强缓存和协商缓存

降低请求成本

  • 预先请求dns,标签属性rel="dns-prefetch"
  • TCP/TLS连接复用:服务端升级到HTTP2,尽量合并域名

减少请求数

  • JavaScript、CSS打包到HTML
  • 用JavaScript控制图片懒加载和异步加载
  • 小型图片使用data-uri或base64,不用大图做缩放

减少传输体积

  • 尽量使用SVG/gradient等代替图片
  • 根据机型和网络状况控制图片清晰度
  • 对低清晰度图片使用锐化来提升体验
  • 设计上避免用大的背景图

域名规划

网站对同一域名同时可发送6(一般浏览器)个请求,我们可以看看当前页面需要哪些域名,首屏需要哪些域名,然后做规划

减少DNS查询

每次域名解析都需要一次网络往返,增加请求延迟,在查询期间会阻塞请求。

减少HTTP请求

任何请求都不如没有请求快,因此要去掉一些没必要的请求资源。

使用CDN

从地理位置上把数据放在离客户端更近的地方,可以显著减少每次TCP连接的网络延迟

添加Expires首部并配置ETag标签

相关资源应该缓存,以避免重复请求每个页面中相同的资源。Expires首部可用于设置缓存时间,在这个时间内,可以直接从缓存读取资源,完全避免HTTP请求。ETag及Last-Modified首部提供了一个与缓存相关的机制,相当于最后一次更新的指纹或时间戳。

Gzip资源

所有文本资源都应该使用Gzip压缩,然后再客户端和服务器间进行传输。一般来说,Gzip可以减少60%-80%的文件大小,只要在服务器上加一项配置,就能有很好的优化效果。

避免HTTP重定向

HTTP重定向极其耗时,特别是客户端重定向到一个完全不同的域名下,还会导致额外的DNS查询、TCP查询、TCP连接延迟,等。