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日

相关文章

  • C# Marshal类基本概念和入门实例讲解

    C# Marshal类是与另一个通信的进程交互的强大工具,该进程可以在同一台计算机或网络上运行。本文旨在介绍Marshal类的基本概念和学习Marshal类的入门实例。 什么是Marshal类 Marshal类是在.NET Framework中提供的一个强大的、可靠的机制,用于在C#应用程序和非托管代码(如Windows API、COM组件、动态链接库等)之…

    Java 2023年5月19日
    00
  • Java sdk安装及配置案例详解

    Java SDK安装及配置攻略 1. 下载Java SDK 首先,在Oracle官网(https://www.oracle.com/java/technologies/javase-downloads.html)下载最新版本的Java Development Kit(JDK)。 2. 安装Java SDK 接下来,进行Java SDK的安装。Windows平…

    Java 2023年5月20日
    00
  • ExtJS GTGrid 简单用户管理

    ExtJS GTGrid 简单用户管理 概述 在本文中,将会详细讲解通过 ExtJS GTGrid 进行简单用户管理的完整攻略。用户管理是每个 Web 系统必备的功能之一,通过 ExtJS GTGrid 可以快速搭建一个用户管理模块,同时也能与后端数据进行交互。 本文将会通过以下几个方面逐步阐述: GTGrid 的基本使用方法 GTGrid 与后端数据的交互…

    Java 2023年6月15日
    00
  • JSP模板应用指南(上)

    JSP模板应用指南(上)完整攻略 什么是JSP模板 JSP模板即Java Server Pages的模板,是一种基于Java技术的Web开发技术。JSP模板将HTML文档和Java代码结合起来,通过JSP引擎最终生成一个可执行的Servlet程序。 JSP模板的特点 便于开发和维护 不需要额外学习其他的模板语言 实现数据和功能的封装 支持高级特性 JSP模板…

    Java 2023年6月15日
    00
  • 微信小程序模板template简单用法示例

    微信小程序模板template简单用法示例 什么是小程序模板? 小程序模板是一种可复用的代码结构,可以在多个页面中使用。它包含了一些 HTML、CSS、JavaScript 代码,用于渲染页面元素。 如何使用小程序模板? 在微信小程序中,使用小程序模板需要遵循以下步骤: 在 *.wxml 文件中引入模板:使用 wxml 标签的 import 属性,将需要引入…

    Java 2023年5月23日
    00
  • Java中session存储Users对象实现记住密码

    当我们使用Java web开发时,常使用session来存储用户的信息以便在整个会话期间使用。如果想要实现记住密码功能,则需要将用户的用户名与密码存储在session对象中,并设置session的有效时间。下面是实现过程的完整攻略。 第一步:创建一个登录页面 首先我们需要创建一个登录页面,该页面包含一个用户名和密码的输入框以及一个“记住密码”的复选框。当用户…

    Java 2023年5月20日
    00
  • SpringMVC响应处理详细解读

    SpringMVC响应处理详细解读 概述 SpringMVC是一个非常流行的MVC框架,它的出现极大地简化了Java Web应用的开发过程。其中,响应处理是SpringMVC的核心功能之一。本文将详细解读SpringMVC中响应处理的过程。 响应处理的流程 SpringMVC的响应处理过程分为以下几个阶段: Controller方法的返回值处理 视图成功渲染…

    Java 2023年5月16日
    00
  • JavaScript实现搜索框的自动完成功能(一)

    以下是详细的讲解: JavaScript实现搜索框的自动完成功能(一) – 完整攻略 1. 自动完成功能的介绍 自动完成功能是指用户在输入搜索关键字时,搜索框会自动显示出与该关键字相关的搜索建议或关键字列表。这种功能通常使用 AJAX 技术来实现,通过 JavaScript 发送异步请求,获取服务器返回的搜索建议或关键字列表,并将其显示在下拉框中。 2. 实…

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