gulp压缩清缓存

使用gulp解决微信页面缓存的问题

 

最近在开发web项目的时候发现一个令人头疼的事情,在微信公众号上展示的页面微信为了提升性能会进行缓存,关键是这个缓存机制还和其他浏览器的不一样,这就导致了即使发布了新的版本,如果不清除缓存的情况下,还是会执行缓存的老版本。对于用户来讲,可能不懂得怎么清除缓存,这就会出现bug。

通过网上查找资料,各路大神对于清除缓存给了好多方法,在此展示下,当然最终还是要说下使用gulp来解决微信html页面中css、js缓存的问题,后台配置Nginx环境解决html文件本身被缓存的问题

清除页面缓存(对微信无效)

方法一: 添加meta

no-cache: 告诉浏览器、缓存服务器,不管本地副本是否过期,使用资源副本前,一定要到源服务器进行副本有效性校验

must-revalidate:告诉浏览器、缓存服务器,本地副本过期前,可以使用本地副本;本地副本一旦过期,必须去源服务器进行有效性校验。

<meta http-equiv="Pragma" content="no-cache"><meta http-equiv="expires" content="0">

方法二: 用ajax请求服务器最新文件,并加上请求头If-Modified-Since和Cache-Control (针对此接口不缓存)

$.ajax({url:'www.baidu.com',dataType:'json',data:{},async:false,beforeSend:function(xmlHttp){    xmlHttp.setRequestHeader("If-Modified-Since","0");    xmlHttp.setRequestHeader("Cache-Control","no-cache");  },success:function(response){//操作}});

方法三:ajax请求添加cache:false (不对接口数据缓存)

$.ajax({url:'www.baidu.com',dataType:'json',data:{},cache:false,async:false,ifModified:true,success:function(response){//操作}});

方法四:在服务端配置 (不对html文件本身缓存)

location ~ \.(html)$ {  expires -1;  add_header Cache-Control no-store;}

此处只让后台同事对html不进行缓存,css、js加载完一遍之后,进行缓存(304),这样既能保证性能,也能解决每次更新带来的缓存问题。

(上面的方法和Gulp共同使用,就能解决微信缓存问题了。)

--------------------------------- gulp ------------------------------

对于gulp的应用我也只是皮毛,在此记录下只是为了以后用到了方便查阅。大家可以通过Gulp中文网(戳进去)这篇博文(通过gulp将less转为css)进行相应的学习~

“gulp是基于Nodejs的自动任务运行器,它能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定等等操作。。。在实现上,她借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,使得在操作上非常简单。”

第一步:搭建nodejs环境

在使用gulp前需要搭建nodejs的环境,不熟悉的可以查看我的这篇文章中的第一步和第二步操作

第二步:全局安装gulp

# 说明:全局安装gulp目的是为了通过它执行gulp任务$ npm install gulp -g# 查看是否安装成功,出现版本号即为成功$ gulp -v

第三步:在项目中新建gulpfile.js文件(这个名字可以改,只要和package.json文件中的"main": " "对应即可)

gulpfile.js是gulp项目的配置文件,在这个文件中写入需要执行的脚本

第四步: 新建package.json文件

说明:package.json是基于nodejs项目必不可少的配置文件,它是存放在项目根目录的普通json文件。

$ cd 到项目路径

$ npm init

按照提示一步一步的填写对应的信息即可,此时项目中就会生成一个package.json文件(配置文件)和node_modules文件夹(依赖模板库)。

第五步: 本地安装gulp插件

在项目路径下执行:

# --save-dev:保存配置信息到package.json文件的devDependencies开发环境依赖中。$ npm install --save-dev# 因为本例中用到的模板比较多,需要都安装下$ npm install gulp-rev --save-dev$ npm install gulp-rev-collector --save-dev$ npm install gulp-clean --save-dev$ npm install gulp-jshint --save-dev$ npm install jshint --save-dev$ npm install gulp-minify-css --save-dev$ npm install gulp-uglify --save-dev

执行完之后在package.json文件的devDependencies中就会产生对应的依赖。node_modules文件夹中就会下载对应的模板。

第六步: 在gulpfile.js文件中实现脚本逻辑

接下来就要回过头来去编辑我们刚才创建的gulpfile.js文件了。

因为代码较多,我就切成图片放这里了,随后我回把整个demo放在GitHub上,有需要查看的可以download下来。

图中就是对应的整个脚本逻辑

第七步:运行gulp

方式一:

1. 通过webStrom 选中 gulpfile.js 文件,右击选择 Show Gulp Tasks。

2. 在左侧列表中就会列出我们脚本中写的所有task,双击想要执行的task即可。此处我们通过双击default,来执行我们编写的所有task。

方式二:

通过Terminal终端:

cd 到项目路径下# 执行所有任务$ gulp# 执行指定任务$ gulp 任务名称

上面的两种方法取一执行即可。

提示:(不管执行哪种方式,都要重复执行2遍,要不然html文件中引入的css、js文件名不会被替换掉,我目前也不知道为什么。。。)

执行结果如下:

dist文件夹下的css和js

web文件下是未压缩的原开发文件,通过执行gulpfile.js脚本,在dist文件下生成了对应的压缩过的css和js文件。

rev文件夹下记录了原文件和处理后生成的新文件的一一对应关系。

rev-manifest.json中保存的内容如下:

# /rev/css{"myCss.css":"myCss-1bfa302df1.css"}# /rev/js{"myJavaScript.js":"myJavaScript-228385c373.js"}

对于生成的html文件:

这是我web文件夹下原html文件的引用

这是在dist目录下新生成的html文件的引用

效果很明显,这样在发布的时候引用dist目录下的对应代码就可以了。

既解决了微信页面缓存的问题(通过修改文件名避免缓存上个版本),又提升了页面访问效率。

到此,整个demo就梳理完了。我把demo放在gitHub上了,有需要查看的可以download下。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,875评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,569评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,475评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,459评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,537评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,563评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,580评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,326评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,773评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,086评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,252评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,921评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,566评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,190评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,435评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,129评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,125评论 2 352

推荐阅读更多精彩内容