当前位置: 移动技术网 > IT编程>网页制作>CSS > 前端性能优化之浏览器缓存

前端性能优化之浏览器缓存

2018年11月16日  | 移动技术网IT编程  | 我要评论
前端性能优化之缓存

前端性能优化有很多方式,今天我们主要学习下关于浏览器缓存的一些知识。

客户端缓存:

session

localstorage(需要注意安全问题,防篡改)

cookie (数据存储尽量不要使用这种方式存放,请求时会增加头部重量)

图片采用wbp格式,占用体积小。

浏览器缓存

作用:

减少冗余的数据传输 减少服务器负担 加快客户端加载网页的速度

当客户端向浏览器发送请求的时候,如果没有缓存则直接请求服务器。如果有则根据缓存状态来是否从缓存中获取对应的文件。

强制缓存

利用expires和cache-control两个字段来控制

expires:是缓存过期时间(即资源过期时间),是个绝对值。所以如果客户端更改时间,会导致缓存混乱。所以http:1.1增加了cache-control:max-age字段,它是一个相对的时间。

cache-control与expires可以在服务端配置同时启用,同时启用的时候cache-control优先级高。

control:max-age=3600,代表着资源的有效期是3600秒

no-cache:不使用本地缓存。需要使用缓存协商,先与服务器确认返回的响应是否被更改,如果之前的响应中存在etag,那么请求的时候会与服务端验证,如果资源未被更改,则可以避免重新下载。 no-store:直接禁止游览器缓存数据,每次用户请求该资源,都会向服务器发送一个请求,每次都会下载完整的资源。 public:可以被所有的用户缓存,包括终端用户和cdn等中间代理服务器。 private:只能被终端用户的浏览器缓存,不允许cdn等中继缓存服务器对其缓存。

协商缓存

普通刷新会启动弱缓存(即协商缓存),忽略强缓存。

协商缓存涉及到两组header字段。

etag和if-none-match

last-modified和if-modified-since

etag和if-none-match

他们返回的是一个校验码,是个hash值。etag能够保证资源都是唯一的,是客户端请求服务器的时候服务器返回的。如果

资源变化了etag也会发生变化。当再次请求服务器的时候服务器根据浏览器上送的if-none-match(之前服务器返回的etag值)值来判断是否命中缓存。

last-modified和if-modified-since

浏览器第一次请求一个资源的时候,服务器返回的header中会加上last-modify,last-modify是一个时间标识该资源的最后修改时间,例如last-modify: thu,31 dec 2037 23:59:59 gmt。

当浏览器再次请求该资源时,request的请求头中会包含if-modify-since,该值为缓存之前返回的last-modify。服务器收到if-modify-since后,根据资源的最后修改时间判断是否命中缓存。

如果命中缓存,则返回304,并且不会返回资源内容,并且不会返回last-modify。

last-modified与etag是可以一起使用的,服务器会优先验证etag,一致的情况下,才会继续比对last-modified,最后才决定是否返回304。

etag的优势:

http1.1中etag的出现主要是为了解决几个last-modified比较难解决的问题:

一些文件也许会周期性的更改,但是他的内容并不改变(仅仅改变的修改时间),这个时候我们并不希望客户端认为这个文件被修改了,而重新get; 某些文件修改非常频繁,比如在秒以下的时间内进行修改,(比方说1s内修改了n次),if-modified-since能检查到的粒度是s级的,这种修改无法判断(或者说unix记录mtime只能精确到秒); 某些服务器不能精确的得到文件的最后修改时间。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网