HTML页面自动清理js、css文件的缓存(自动添加版本号)

为了解决用户访问网站时,由于浏览器缓存而读取了旧版本的js、css文件而导致网页无法正确渲染的问题,需要对网站中的js、css文件进行版本控制,并自动清理浏览器缓存。

1. 添加版本控制

在引用js、css文件时,添加版本号。可以采用以下两种方式:

1.1 引用文件名添加版本号

在引用js、css文件时,在文件名后面添加?v=版本号

<link rel="stylesheet" href="/css/style.css?v=1.0">
<script src="/js/script.js?v=1.0"></script>

版本号可以使用时间戳或版本号进行标识,例如:

<link rel="stylesheet" href="/css/style.css?v=202106011400">
<script src="/js/script.js?v=1.1"></script>

1.2 引用路径添加版本号

将文件路径中添加版本号,可以采用以下方式:

<link rel="stylesheet" href="/css/1.0/style.css">
<script src="/js/1.0/script.js"></script>

这时,在服务端,可以将文件的版本号添加到文件路径中,例如:

<link rel="stylesheet" href="/css/1.0/style.css?version=202106011400">
<script src="/js/1.0/script.js?version=1.1"></script>

2. 自动清理浏览器缓存

可以借助于gulp-revgulp-rev-collector实现自动清理浏览器缓存。具体步骤如下:

2.1 安装gulp及相关插件

npm install gulp gulp-rev gulp-rev-collector --save-dev

2.2 gulp任务配置

在gulpfile.js文件中添加以下任务:

var gulp = require('gulp');
var rev = require('gulp-rev');
var revCollector = require('gulp-rev-collector');

gulp.task('rev-css', function(){   //为css添加hash编码
    return gulp.src('src/css/*.css')
        .pipe(rev())
        .pipe(gulp.dest('dist/css'))
        .pipe(rev.manifest())
        .pipe(gulp.dest('rev/css'));
});

gulp.task('rev-js', function(){    //为js添加hash编码
    return gulp.src('src/js/*.js')
        .pipe(rev())
        .pipe(gulp.dest('dist/js'))
        .pipe(rev.manifest())
        .pipe(gulp.dest('rev/js'));
});

gulp.task('rev', ['rev-css', 'rev-js'], function() {  //html模板内,静态资源添加hash编码
    return gulp.src(['rev/**/*.json', 'src/index.html'])
        .pipe(revCollector())
        .pipe(gulp.dest('dist'));
});

gulp.task('default', ['rev']);   //执行gulp默认任务

其中,rev-cssrev-js任务分别为css和js添加hash编码,rev任务为html模板内静态资源添加hash编码。

2.3 配置nginx

在nginx配置文件中添加以下内容:

location ~* \.(js|css)$ {
    expires 1d;
    add_header Cache-Control "public, no-transform";
}

配置文件中需要修改root指向dist文件夹。

2.4 示例说明

例如,在原始文件夹src中存在以下文件:

├── css
│   ├── style.css
│   └── app.css
├── js
│   ├── index.js
│   ├── main.js
│   └── lib.js
└── index.html

执行gulp任务后,在新建文件夹dist中会生成以下样式:

├── css
│   ├── style-1f8ce40a.css
│   └── app-2b298ef1.css
├── js
│   ├── index-ca64fa6c.js
│   ├── main-726cf8a4.js
│   └── lib-5c7a2a6b.js
└── index.html

并在新建文件夹rev中生成以下json文件:

├── css
│   └── rev-manifest.json
└── js
    └── rev-manifest.json

此时,index.html文件中引用静态资源文件的代码变为:

<link rel="stylesheet" href="/css/style-1f8ce40a.css">
<link rel="stylesheet" href="/css/app-2b298ef1.css">
<script src="/js/index-ca64fa6c.js"></script>
<script src="/js/main-726cf8a4.js"></script>
<script src="/js/lib-5c7a2a6b.js"></script>

同时,浏览器在请求文件时会自动添加版本号,例如:

Request URL: http://www.example.com/css/style.css?version=1.0

总结

通过添加版本控制和自动清理浏览器缓存的方式可以有效解决网页无法正确渲染的问题。可以采用gulp配合nginx实现自动化编译和自动清理缓存。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:HTML页面自动清理js、css文件的缓存(自动添加版本号) - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • Java超详细讲解WebMvcConfigurer拦截器

    下面是关于“Java超详细讲解WebMvcConfigurer拦截器”的完整攻略,包含两个示例说明。 Java超详细讲解WebMvcConfigurer拦截器 在Spring MVC中,我们可以使用拦截器来拦截请求并进行一些处理。WebMvcConfigurer是一个接口,它提供了一些方法来配置Spring MVC的行为,其中包括添加拦截器。本文将详细讲解W…

    Java 2023年5月17日
    00
  • 常见的Java锁有哪些?

    常见的Java锁有以下几种: 1. synchronized关键字 synchronized是Java提供的最基本的锁,可以用于方法或代码块中。它采用悲观锁的机制,在同一时间只能有一个线程获得该锁,其他线程需要等待。 示例: public class SynchronizedExample { private int count = 0; public sy…

    Java 2023年5月11日
    00
  • 23种设计模式(8) java外观模式

    23种设计模式(8) Java外观模式 一、什么是外观模式? 外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供一个一致的接口,使得这个子系统更加容易被使用。 外观模式又称为门面模式,顾名思义,就是像房屋门面一样,将一个复杂的系统或一组类的接口封装起来,提供一个更加简单、易用的接口,使得外部用户通过这个接口就能够完成庞杂…

    Java 2023年5月24日
    00
  • Java中Gson的使用详解

    Java中Gson的使用详解 Gson是Google提供的一种Java序列化/反序列化库,可让Java对象与JSON序列进行转换。Gson可以从 JSON 中读取 Java 对象,也可以将 Java 对象转换到 JSON 中。因此,Gson可以轻松地将Java对象序列化为JSON格式的字符串,也可以将JSON格式的字符串反序列化为Java对象。 Gson基础…

    Java 2023年5月26日
    00
  • springBoot 与neo4j的简单整合示例

    下面是一份“springBoot与neo4j的简单整合示例”的完整攻略。 简介 Spring Boot是一种微服务框架,可帮助开发人员快速创建和配置开发中的应用程序。它具有快速启动、自动配置、无多余代码等特点。而Neo4j是一个高性能的图数据库,具有多种用途,如社交网络的关系建模、推荐系统等。将Spring Boot与Neo4j整合在一起可以使我们的应用程序…

    Java 2023年5月20日
    00
  • win10环境下 VMware Workstation Pro 安装centos7无法上网

    一、安装centos7 网上类似的教程太多了,我就不一一写了,提供两个网址,先按照教程安装 VMware Workstation Pro ,秘钥在第二个链接里面(亲测可用), 安装完VMware在根据教程安装centos7,网络配置安装教程中不全,可参考如下 虚拟机安装教程  VMware Workstation Pro激活秘钥 二、配置网络 一、点击菜单栏…

    Java 2023年4月22日
    00
  • 如何进行Java异步编程?

    首先,为了进行Java异步编程,我们需要了解以下概念: 回调函数(Callback):是一种异步编程的实现方式,即在某个任务完成后执行的函数。 Future模式:是一种异步编程设计模式,它允许我们在执行一个任务时,不用一直等待结果,而是可以先返回一个Future对象,稍后再获取真正的结果。 CompletableFuture:是Java 8新增的一种异步编程…

    Java 2023年5月11日
    00
  • 关于MVC的dao层、service层和controller层详解

    关于MVC的dao层、service层和controller层详解 在 MVC 设计模式中,通常将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。为了更好地组织代码,通常将控制器进一步分为三个层次:DAO 层、Service 层和 Controller 层。本文将详细讲解 MVC 的 DAO 层、Service 层…

    Java 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部