首先这个问题是http的缓存,我答了强缓存和协商缓存。
我说道协商缓存,是会请求到后端服务器,然后对比响应头last-modified或者etag,来决定时候使用缓存。
此时面试官问我,已经请求到后端了,为什么还要再去取缓存,而不是直接使用response,我就没答出来。
网上搜了很多,主要还是都是介绍2种缓存的,并没有提到这个问题,望解答!


···回复:

我猜你说的 response 指的是 response body?

协商缓存如果命中返回的是 304 啊……只有 header 没有 body。

虽然还是请求了一次服务器,但只需要传输 header 部分就可以了,节省了传输文件本身的开销。


···回复:

因为 response 里没有呀……本质上缓存就是为了减少传输文件的开销,server 既然返回了缓存还能用,就当然不会在 response 里带上数据呀。


···回复:

服务器直接通知浏览器调用缓存比response拿到文件返回效率更高,响应更快。减少了传输文件带来的开销。


···回复:

某些情况下网络开销,可以忽略不计,带着etag这类标记的request, 服务端可以主动判断 response 是否已经到期或者失效, 才 lazy 地进行计算。

相对于每次进行 100% 的计算, 采用协商缓存可以用每次仅仅进行 1% 或者更低的开销,加速用户端体验和整体开销。


···回复:

再次请求判断缓存是否失效,失效则需要从源站重新获取资源

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Scroll Up