龙空技术网

大公司的静态资源优化方案主要有哪些?如何实现资源非覆盖式发布

代码开发 82

前言:

而今大家对“静态资源部署”大概比较着重,兄弟们都需要了解一些“静态资源部署”的相关文章。那么小编在网络上汇集了一些有关“静态资源部署””的相关知识,希望小伙伴们能喜欢,你们一起来了解一下吧!

一. 大公司的静态资源优化方案

配置很长时间的本地缓存 ———— 节省带宽,提高性能

给静态文件添加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运算得到的,只有文件内容发生变化了才会有更改。由于版本序列是与文件名写在一起的,而不是同名文件覆盖,因此不会出现上述说的那些问题。

标签: #静态资源部署