「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战」
网络请求时间花在哪?
- 从域名到IP地址,需要DNS协议查询;
- HTTP协议使用TCP传输的,要建立TCP连接;
- 如果用HTTPS,要交换证书;
- 网页内还会有图片等其他资源。
优化技术方案
秒开率
缓存
- 合理使用强缓存和协商缓存
降低请求成本
- 预先请求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连接延迟,等。