前言:
而今大家对“静态资源部署”大概比较着重,兄弟们都需要了解一些“静态资源部署”的相关文章。那么小编在网络上汇集了一些有关“静态资源部署””的相关知识,希望小伙伴们能喜欢,你们一起来了解一下吧!一. 大公司的静态资源优化方案
配置很长时间的本地缓存 ———— 节省带宽,提高性能
给静态文件添加MD5值 ———— 精确地控制缓存
静态资源CDN部署 ———— 优化网络请求
http协议缓存:
1. 本地强制缓存
expires: 缓存的绝对过期的时间;
cache-control: 缓存的相对过期时间;
也就是说在这个过期日期之前都不会向服务器去请求数据;
2. 304协商缓存
如果缓存过期了,那么就要进行缓存再验证;
请求头里 If-Modified-Since: 表示的是上一次从服务器获取数据的日期;
响应头里 Last-Modified: 表示的是服务器上最近一次修改文件的日期;
如果If-Modified-Since中的时间和浏览器最近一次修改的时间一致,那么服务器就会返回304,浏览器就会使用缓存。
二. 资源的非覆盖式发布
一般的大型网站,为了优化网络资源,通常会将页面和静态资源分集群部署。
一般会把静态资源部署到CDN上,使用户就近取得所需要的内容,解决Internet网络拥挤状况,提高用户访问网络的响应速度。
使用资源的非覆盖式发布解决的问题:
1. 缓存问题
由于一般的公司都会将缓存的过期时间设得很长,那么如果是使用的同名文件
例如:
a.html <script src='a.js'></script>a.js
即使在服务器上更新了静态资源,那么页面在缓存过期之前就会一直使用缓存的文件(这个就是静态资源的缓存的问题),于是可以使用资源的非覆盖式发布,让页面加载新的静态文件(改变文件名,于是也不会使用本地的缓存了)。
更新前:
a.html a.js
更新后
a.html a_0abcde.js
2. 更新问题
在更新了静态资源和页面之后,静态资源发布和页面的部署顺序会影响页面的加载,
先发布静态资源,再发布页面:若是有缓存的浏览器,旧页面 ————> 旧资源,页面没有改变;
先部署页面,再发布静态资源:在两者部署的时间间隔内,有用户访问页面,就会在新的页面中加载旧资源,并且把旧静态资源缓存起来,在缓存过期之内,页面一直都会是错误状态。
无论怎么部署,都会出现问题。
使用资源的非覆盖式发布,先部署静态资源,再部署页面,新的静态资源会被缓存。
3. 非覆盖式的发布如果线上出bug了方便快速回滚
三. 如何实现资源的非覆盖式发布
解决方式:给文件添加MD5值
MD5: MD5消息摘要算法 (英语:MD5 Message-Digest Algorithm),一种被广泛使用的 密码散列函数 ,可以产生出一个128位(16 字节 )的散列值(hash value),用于确保信息传输完整一致。
<link type="text/css" rel="stylesheet" href="a_82244e91.css">
其中”_82244e91”这串字符是根据a.css的文件内容进行hash运算得到的,只有文件内容发生变化了才会有更改。由于版本序列是与文件名写在一起的,而不是同名文件覆盖,因此不会出现上述说的那些问题。
标签: #静态资源部署