gulp之静态资源防缓存处理
最近,因为校友网项目开始有些规模了。开始就要考虑对静态资源进行工程自动化的管理。一讲到前端的自动化工具,大家或许都会想到Grunt,Gulp,或者百度的FIS。这三个都有各自的特点,大家可以依据自己的喜好,选择工具。至于为什么选择Gulp,因为Grunt的gruntfile配置真的很头大好吗!简直看到头晕晕,但是还是有不少人喜欢这种方式的。然后FIS真心很强大,你所需要的,基本它都提供了,并且做得很好很简单,如果你急于马上使用可以赶紧去看看。而我为什么不用呢,感觉可能是因为,有点黑盒子?哈哈哈....不说了,让我们赶紧看看今天的主角——Gulp。
定义:gulp.js 是一种基于流的,代码优于配置的新一代构建工具。
关于还要安装Node,怎么样用npm加载需要的Node模块,就不再赘述啦。当然使用yeoman来搭建手脚架是最快的,有兴趣的可以看看,慕课网里有噢。接下来看看我们的案例。我们的需求是,为了防止客户端的静态资源缓存,我们需要每次更新css或js的时候,通过md5或时间戳等方式重新命名静态资源。让客户端可以重新请求资源,而不是从缓存里取。然后html模板里的src也要做相应的修改。当然,这里还有个附加的需要就是,静态资源需要自行优化(压缩合并)。
- 静态资源优化
- 静态资源重命名
- 修改静态资源的引用路径
若是我们手动修改,这会有多麻烦呢?大家可以想一想,我们先用工具压缩了资源,然后手动更改名字,再打开相应的页面,改路径。这样一直枯燥的重复,不仅容易出错,而且尼玛工作量很大好嘛?!程序员自有懒人在,我们就站在懒巨人的肩膀上,沐浴春风。
那在gulpfile中,我们要用到的插件有哪些呢?
require完之后,我们就可以开始编写一个简单实用的版本控制的自动化工具了。
我们一步一步来,我们需要产出一个静态资源路径,我们首先要清空里面曾经的资源,防止有冗余。那我们就定义了一个clean任务,然后将src需要清理的文件夹引入,然后执行clean。src的第二个参数的{read:false},是不读取文件加快程序。
清理完之后,就可以对静态资源进行优化处理。那我们定义两个任务,一个是css的,一个是js的。在css里,还可以编译less或sass,这里我就没有做。然后js里同样可以编译coffee。我们来仔细看看下面的程序,首先任务名是css,然后src引入css文件,执行csso的压缩优化,然后重命名为*.min.css。接下来就是到了添加版本号,并将经过优化和版本控制的css输出到dist文件夹里。最后再用rev.manifest,将对应的版本号用json表示出来,这里可以参照下面第二张图。这样通过hash来精确定位到html模板中需要更改的部分。
接着便是最后一步,改变引用路径,这里我们将这个任务命名为rev。记得rev任务要在生成mainfest之后进行,可以用gulp[]任务依赖来进行流程控制。
src引入一个数组,前一个是引入刚才生成的json文件,后一个是需要更改的html模板,当然我这里是jsp。然后replaceReved: true就可以成功替换了。最后将替换过的文件输出即可,这里我输出到了原来引入的路径,这样就可以成功替换了。如果你在开发的时候需要不断调试,还可以加上gulp.watch,实时监控文件变化,然后动态做出响应。当然还是推荐开发与上线分开不同的文件夹进行管理。(可是我这坑爹的组长没有!妈蛋!)最后来看一下按照这样执行的大概结果。
这是成功生成到dist的静态资源,都加上了相应的后缀。这里要着重强调,修改的仅仅是后缀名,而之前的路径是不会帮你修改的。也就是说,你的原来的Html引入静态资源的时候,路径就要预先写好,然后rev来帮你修改后缀。至于是不是有更好的方法,我暂时还不清楚~~
这是html模板上的引用路径做了对应的变化。
是不是讲的十分不清楚呢?!哈哈哈,我跳过了一些的步骤 ,我只是想推荐大家gulp-rev配合gulp-rev-collector,这个自动化静态资源版本控制工具用gulp是可以做到的!所以要是大家不大会使用gulp的可以先自行寻找教程,最后再回来实现一遍。
gulp之静态资源防缓存处理的更多相关文章
- nginx静态资源设置缓存的方法
nginx静态资源设置缓存的方法 直接加expires 30d; 就是就可以了 缓存时间30天完整如下 <pre> location / { root /home/www/wordpres ...
- Nginx针对前端静态资源的缓存处理
当用户上报一个线上的bug后,开发者修改前端代码的bug上新后,用户反映问题依旧存在的问题...这种情况是不是曾经遇到过,这个问题跟浏览器的缓存机制有很大关系(强制缓存和协商缓存,这里我就不介绍具体的 ...
- gulp管理静态资源缓存
前端项目在版本迭代的时候,难免会遇到静态缓存的问题,明明开发的是ok的,但是一部署到服务器上,发现页面变得乱七八糟,这是由于静态缓存引起的. 从上面这张图片可以看出,浏览器加载css,js等资源时,s ...
- Http静态资源的缓存
最近一段时间一直在研究页面缓存和压缩方面的东西,由于公司服务器使用的是iis6.0,很多性能方面的优化都不支持.所以,就开始尝试着自己写个简单的处理程序. 为了减少服务器带宽的需求,我们要减少客户端与 ...
- Nginx实现静态资源的缓存
1.1 需求 1.对静态文件进行缓存:html,js,css,png,gif,jpg,jpeg,bmp,swf. 2.对符合url规则的请求进行缓存. 3.针对某个url进行清除缓存. 1.1 ...
- nginx静态资源浏览器缓存
1.缓存介绍 作用:提升用户体验,减少服务器压力 浏览器无缓存:浏览器发起请求->无缓存->请求WEB服务器->web服务器检查是否有更新(没有更新返回304)->呈现 浏览器 ...
- gulp下静态资源的合并、压缩、MD5后缀
var gulp = require('gulp'); var RevAll = require('gulp-rev-all'); var uglify = require('gulp-uglify' ...
- SpringBoot cache-control 配置静态资源缓存 (以及其中的思考经历)
昨天在部署项目时遇到一个问题,因为服务要部署到外网使用,中间经过了较多的网络传输限制,而且要加载arcgis等较大的文件,所以在部署后,发现页面loading需要很长时间,而且刷新也要重新从服务器下载 ...
- 前端工程精粹(一):静态资源版本更新与缓存(附精简js的工具)
转自:http://www.infoq.com/cn/articles/front-end-engineering-and-performance-optimization-part1/ 每个参与过开 ...
随机推荐
- openfire 介绍安装使用
Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议.Openfire安装和使用都非常简单,并利用Web进行管理.单台服务器可支持上万并发用户.您可以使用 ...
- java.lang.NumberFormatException: For input string:"filesId"
做项目时候,页面获取出现了这个问题.找了好久一直以为是我字段或者是数据库字段问题导致引起的. 最后才发现是 struts2中jsp我写错了一个参数,一直导致报错.后来改了就好了. 当大家遇到这个问题的 ...
- NDK(17)让ndk支持完整C++,exception,rtti,
C++ Support The Android platform provides a very minimal C++ runtime support library (/system/lib/li ...
- C#使用sharppcap实现网络抓包-----2
虽然网上已经有了SharpSniffer 这一个SharpSniffer还是原创的无他,唯为学习工程文件下载:SharpSniffer.rar 1.创建套接字2.绑定到本机3.设置IOControl4 ...
- AWS 之 S3篇<.NET(c#)批量上传文件>
第一次知道AWS然后网上就研究了一番,如果也是第一次知道这个的话,或者对这个只知道是干什么,并没有写个相关的程序的话,可以看看这个网址http://docs.aws.amazon.com/zh_cn/ ...
- ASP.NET MVC 学习3、Controller左手从Model获取数据,右手传递到View页面
参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/accessing-your-models-dat ...
- shape的属性(二)
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="r ...
- 使用Java VisualVM监控远程JVM
我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualV ...
- 【Unity3D】生成工程报错解决—UnityEditor.HostView:OnGUI() Error building Player: Couldn't build player because of unsupported data on target platform.
错误 错误1:An asset is marked as dont save, but is included in the build: unityEditor.HostView:OnGUI() 错 ...
- andeoid学习笔记七
Android中Broadcast的Intent大全 Api Level 3:(SDK 1.5) android.bluetooth.a2dp.intent.action.SINK_STATE_CHA ...