缓存进阶处理:从不处理到基于gulp的前端静态文件自动添加版本号

    

       如上图,在web前端项目的开发中,缓存是一个难点,这是慕课网上小米工程师刘炬光PPT上开篇的一段话,很经典,对缓存感兴趣的强烈推荐大家去看一看,链接:前端缓存那些事儿

       下面讲一讲我对缓存处理的过程。

阶段一:不处理

       在开始做web前端开发时,对cache懵懵懂懂,一开始做的项目没有任何对cache的处理,既没有在.html文件<head>中添加<meta>缓存标签,也没有在引用静态资源的地方添加版本标识。直接导致的结果就是在我做的我们公司的APP下载页面down.html中,虽然服务器上down.html已经更新,安卓APP的链接已经升级到5.0.1 版本。但是因为缓存的原因,部分用户没有从服务器上获取最新页面,依然使用的是本地的cache文件,下载的也是老的5.0.0。在这个时候,我才开始重视对cache的处理。

阶段二:手动添加版本号

       对于软件这个领域,快速提升自己的方法之一就是学习分析他人的代码,在这个过程中,我发现有好多人会在引用的js和css文件后面添加类似“?ver=0.01”的标识,如下图所示。


        这是什么鬼?于是百度之,原来这是版本号,这样就能解决版本号的问题了,每次更新完文件,就应该在文件名后面添加或升级版本号。这样浏览器加载页面时,就会把缓存中的文件和服务器中的文件对比,举个例子,对于main.min.css这个文件,首先浏览器会向服务器发起请求,我需要“main.min.css?ver=0.02”这个文件,我本地的cache里面的资源是“main.min.css”,它是不是最新的?服务器告诉浏览器,文件名已经变更,需要重新从服务器下载这个资源。当然这只是一种形象化的描述。真实的过程跟ETag等参数有关系,有兴趣的童鞋可以查找对应的资料。

阶段三:.html文件<head>中添加<meta>缓存标签

       对于阶段二,虽说已经能够基本应对缓存的问题,但是远远不够。因为在快速迭代的软件开发中,不仅js和CSS文件需要更新,.html文件同样需要更新,那么怎么办?一样的给.html文件添加版本号吗?如果有10个项目引用了同一个down.html页面,down.html页面更新,那么是不是这10个项目全部都得更新down.html的版本号,这显然不科学,而<meta>缓存标签可以解决这个问题。

       在我维护的公益项目中,我在每个html文件头部中添加了:

<meta http-equiv="Cache-Control" content="no-cache">

这样,所有的.html我就不需要考虑缓存的问题了,反正只要服务器上.html文件有更新,浏览器就应该下载最新的.html文件。
 
阶段四:基于gulp的前端静态文件自动添加版本号

       阶段二加上阶段三的方法,已经能够基本应对前端缓存的问题,但是依然谈不上方便,首先,所有的.html页面不缓存,必然会影响CHP(缓存命中率)值,对于CHP的介绍和分析,我依然推荐大家看:前端缓存那些事儿

       接下来我又开始了上下求索的过程,前端自动化工具自动添加版本号的文章和blog查了很多,讲得最清楚和我实测可用是这两篇文章:

使用gulp-rev-append给页面的引用添加版本号

gulp详细入门教程

          前端自动化工具,网上推荐最多的是grunt和gulp,而gulp优于grunt,所以选择了gulp。

      至于具体步骤,上面两篇文章已经讲得很详细很清楚了,我就不班门弄斧了。

      最后上传我生成版本号前后的截图:

  生成前:


生成后:


        所以对于前端开发中的缓存处理,最优的方法是只在index.html(也就是你的主页)中添加<meta http-equiv="Cache-Control" content="no-cache">标签,其它有更新需求的所有静态文件采用gulp自动添加版本号。这样做的前端页面性能才是最好的。


2017年1月10日补充:

<meta>缓存标签支持有限,目前还是需要服务端来设置。(待补充)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值