美文网首页
gulp压缩清缓存

gulp压缩清缓存

作者: 毛尖哥 | 来源:发表于2018-05-16 16:30 被阅读90次

使用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下。

相关文章

  • gulp压缩清缓存

    使用gulp解决微信页面缓存的问题 最近在开发web项目的时候发现一个令人头疼的事情,在微信公众号上展示的页面微信...

  • 前端性能优化

    1,压缩合并文件,包括压缩图片,精灵图,webpack/gulp打包 2,图片懒加载 3,图片加载队列 4,cdn缓存

  • gulp--自动化构建工具

    常用的gulp插件: 1、css压缩:gulp-caanano; 2、图片压缩:gulp-imagemin; 3、...

  • 前端自动化工具之gulp

    gulp 作用压缩、合并js和css 文件 文件的压缩合并可以减少缓存 减少文件的网络请求可以提高网页速度,所以g...

  • gulp-css压缩

    gulp是什么?使用 gulp 实现图片压缩、CSS 压缩合并、JS 压缩合并 gulp是一个基于流的构建工具,可...

  • gulp压缩合并文件

    gulp压缩合并文件流程 //引入gulp和gulp插件var gulp = require('gulp');va...

  • gulp插件

    gulp-rename 改名字gulp-uglify 压缩jsgulp-minify-css 压缩cssgulp-...

  • 常用gulp插件

    sass的编译(gulp-sass)自动添加css前缀(gulp-autoprefixer)压缩css(gulp-...

  • gulp浅显易懂的入门

    gulp是什么? gulp是工具链、构建工具,可以配合各种插件做js压缩,css压缩,less编译 替代手工实现自...

  • webpack模块化开发及配置问题

    webpack和gulp区别 1.gulp是工具链、构建工具。可以配合各种插件做jps.压缩,css.压缩,les...

网友评论

      本文标题:gulp压缩清缓存

      本文链接:https://www.haomeiwen.com/subject/bktmdftx.html