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日

相关文章

  • js实现定时进度条完成后切换图片

    下面是实现”js实现定时进度条完成后切换图片”的完整攻略。 目录 1.需求分析 2.方案设计 3.实现步骤 4.示例说明 4.1 示例1:进度条倒计时 4.2 示例2:图片切换 1.需求分析 我们需要实现一个功能,当用户进入页面时,能够显示一个进度条,并在进度条走完后自动切换到下一张图片。 2.方案设计 根据需求,我们需要实现以下几个功能: 显示进度条 进度…

    Java 2023年6月16日
    00
  • JSON创建键值对(key是中文或者数字)方式详解

    下面是关于JSON创建键值对的详细攻略。 1. JSON创建键值对 在JSON中,使用冒号(:)将Key和value分隔开来。Key必须是字符串或者数字。 1.1 Key是字符串 如果Key是字符串,需要将其用引号包围起来,例如: { "name": "小明", "age": 18 } 在以上代码中…

    Java 2023年5月26日
    00
  • 解决spring boot 1.5.4 配置多数据源的问题

    下面是解决Spring Boot 1.5.4配置多数据源的步骤: 1. 添加多数据源配置 打开Spring Boot项目的配置文件application.properties或application.yml,在其中添加多数据源的配置。示例代码如下(假设需要配置两个数据源:db1和db2): spring: datasource: db1: url: jdbc…

    Java 2023年6月16日
    00
  • RocketMQ是是如何管理消费进度的?又是如何保证消息成功消费的?

    RocketMQ消费者保障 消息确认机制 consumer的每个实例是靠队列分配来决定如何消费消息的。那么消费进度具体是如何管理的,又是如何保证消息成功消费的?(RocketMQ有保证消息肯定消费成功的特性,失败则重试) 什么是ACK 消息确认机制 在实际使用RocketMQ的时候我们并不能保证每次发送的消息都刚好能被消费者一次性正常消费成功,可能会存在需要…

    Java 2023年4月18日
    00
  • android上的一个网络接口和图片缓存框架enif简析

    Android上的一个网络接口和图片缓存框架Enif简析 1. 引言 在Android应用程序中,网络请求和图片缓存是比较重要的功能。然而,由于开发者的经验不同,导致实现这些功能较为困难和繁琐。为了提高开发效率和代码可维护性,开发者不得不使用一些第三方框架。而Enif正是其中一种较为常用的框架。 本文将详细介绍Enif框架,并通过示例代码来演示其常见用法。 …

    Java 2023年5月19日
    00
  • MyBatis常用动态sql大总结

    “MyBatis常用动态sql大总结”是一篇介绍MyBatis动态SQL的文章,为读者提供了MyBatis动态SQL的基本使用方法和常见应用场景,让读者能够更容易地利用MyBatis实现动态SQL语句的构建。 该文章分为以下几个部分: 简介:介绍MyBatis动态SQL的概念和优势。 基本用法:详细介绍了MyBatis动态SQL的基本使用方法,包括if、ch…

    Java 2023年5月20日
    00
  • 什么是虚拟化技术?

    以下是关于虚拟化技术的完整使用攻略: 什么是虚拟化技术? 虚拟化技术是一种将物理计算机资源(如处理器、内存、存储器等)抽象为个虚拟计算机的技术。它可以让多个虚拟计算机在同一物理计算机上运行,从而提高计算机资源的利用率和灵活性。 虚拟化技术的分类 虚拟化技术可以分为以下几种: 完全虚拟化:在完全虚拟化中,虚拟机可以运行不同的操作系统,且不需要对操作系统修改。它…

    Java 2023年5月12日
    00
  • jquery触发a标签跳转事件示例代码

    要实现jquery触发a标签跳转事件,我们可以通过以下步骤来进行: 获取a标签元素的选择器 绑定点击事件 通过jquery模拟点击事件触发跳转 下面是实现这个过程的详细代码及说明: 示例1: HTML代码 <a href="https://www.google.com/" id="jump">跳转到Goog…

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