摘要
避免HTTP请求
减少HTTP请求次数
减少HTTP响应的大小
避免HTTP请求
如何避免HTTP请求
答案就是缓存。我们通过将HTTP响应的数据缓存到本地,下次请求时直接从本地磁盘读取,避免网络IO的耗时。
如何缓存
URL为key,响应作为value
缓存有效期如何界定
服务器在返回HTTP响应时,会估算一个过期时间,并把该信息放在响应头中,客户端在收到响应头时返现缓存的响应是过期的,会重新发送网络请求。
缓存有效期已过,但资源实际未变更如何优化
客户端在重新发起请求时会在请求的etag的头中带上第一次请求的响应头部中的摘要(唯一资源标识),服务器收到请求后会比较本地资源摘要和请求中的摘要是否一致:
不一致,客户端缓存无效,返回最新的资源
一致,客户端缓存依然可以使用,仅返回304响应,响应中不包含响应体
减少请求次数
减少请求次数的方式
减少重定向次数
合并请求
延迟请求
减少重定向次数
重定向就意味需要发送新的HTTP请求,意味着额外的网络耗时。如果我们使用了代理服务器,可以将重定向的工作交给代理服务器,这样可以减少1次客户端的重定向(通过代理服务器完成了)。
合并请求
如果多个小文件的请求具有相同的头部,可以将这几个小文件的请求合并一起请求,虽然传输的资源一样,但减少了头部的重复传输。假设我们采用的是HTTP/1.1,合并请求还会减少TCP的连接数量
合并请求的方式有哪几种
CSS Image Sprites技术会把多个小图片合并成一个大图片,这样就可以一次请求获得,然后再根据CSS数据将大图片切割成小图片
图片的二进制数据我们可以对其base64直接返回,客户端收到以后可以直接解码显示图片,不用再使用单独的链接发起HTTP请求获取图片内容
合并请求的缺点
合并请求的本质是合并资源,那么多个资源中的一个发生变更,那么必须要要重新下载所有资源,这也会造成额外的网络开销,
延迟发送
需要的时候再发送请求获取。
减少HTTP响应数据的大小
如何减少相应数据的大小
压缩
压缩的大体种类分为
无损压缩
有损压缩
什么是无损压缩
无损压缩是指经过压缩后,信息不能丢失,可以完全恢复到压缩之前。适合文本文件、可执行程序和代码源文件。
常见的无损压缩算法:
gzip
deflate
br
什么是有损压缩
有损压缩是指经过压缩后,会丢失部分信息,解压的数据可能与原始数据存在些许差异。适合音频、视频、图片等资源,牺牲一些质量来减少数据量。