Vue/cli2 || /cli3部署上线清理浏览器缓存

本文主要是介绍Vue/cli2 || /cli3部署上线清理浏览器缓存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述:项目(vue /cli2 || vue /cli3) 部署上线用浏览器打开后依旧是上一个版本

问题原因:浏览器的缓存机制(分为强缓存和协商缓存)
强缓存:不在客户端存储资源,始终去原始服务器获取资源
协商缓存:向后端发起请求,看服务器资源是否更新,如果没有更新就返回304,如果更新了就返回200
no-cacheno-store 都是 HTTP 协议头 Cache-Control 的值。区别是:
no-store
彻底禁用缓存,所有内容都不会被缓存到缓存或临时文件中。
no-cache
可以在客户端存储资源,每次都必须去服务端做新鲜度校验,来决定从服务端获取新的资源(200)还是使用客户端缓存(304)。也就是所谓的协商缓存
除了 no-cacheno-storeCache-Control 头的取值还有:
public
所有内容都将被缓存(客户端和代理服务器都可缓存)
private
内容只缓存到私有缓存中(仅客户端可以缓存,代理服务器不可缓存)
max-age=xxx
缓存的内容将在 xxx 秒后失效,这个选项只在 HTTP1.1 可用,并如果和 Last-Modified 一起使用时,优先级较高。

一、修改根目录index.html,添加以下代码

于 HEAD 标签内直接添加 META 标签:
1.)本人所在项目采用得这个

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

2.)如果不想彻底禁止缓存可以采用下面的

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

二、nginx设置不缓存 html

(nginx设置后,每次刷新页面加载时间太长,所以我所在项目未使用)
1.)在nginx.conf文件做设置:增加add_header Cache-Control "no-cache, no-store

location = /index.html {root	 /usr/webkit/dist;add_header Cache-Control "no-cache, no-store";
}

2.)或者直接在 location / 这里增加add_header Cache-Control "no-cache, no-store

server {location / {root   /usr/webkit/dist;index  index.html index.htm;add_header Cache-Control "no-cache, no-store";}
}

三、打包的文件路径添加时间戳

1.)vue-cli2.x 创建的项目里,找到 build/webpack.prod.conf.js 文件

//获取当前时间戳
const version = new Date().getTime();
//将时间戳加入output中
output: {...config.output,filename: utils.assetsPath(`js/[name].[chunkhash].${version}.js`),chunkFilename: utils.assetsPath(`js/[id].[chunkhash].${version}.js`)
},//css文件名加时间戳
new ExtractTextPlugin({filename: utils.assetsPath(`css/[name].[contenthash].${version}.css`),allChunks: true,
}),

2.)在 vue-cli3.x 创建的项目里,打开 vue.config.js 文件

const version = new Date().getTime();
module.exports = {configureWebpack: {output: { filename: `js/[name].[chunkhash].${version}.js`,chunkFilename: `js/[id].[chunkhash].${version}.js`}}
}

或者

const version = new Date().getTime();
module.exports = {configureWebpack: config =>{	if(process.env.NODE_ENV === "production"){Object.assign(config,{output: { ...config.output,filename: `static/js/[name].[chunkhash].${version}.js`,chunkFilename: `static/js/[name].[chunkhash].${version}.js`}})}}
}

四、location.reload() 重新加载当前文档

(这是同事提供的方法,本人未使用,但是有采取性)
  如果index.html 设置了不允许缓存,每次刷新时,就会重新加载资源,可能会造成响应过慢的现象。所以引入了一种新的方案:
  1.)在package.json文件每次打包时改变一下version;
  2.)在main.js文件中,加入如下代码:

const VUE_VERSION = require('../package.json').version
const V_VER = window.localStorage.getItem("vueVersion");
if(VUE_VERSION != V_VER){localStorage.clear()window.localStorage.setItem("vueVersion", VUE_VERSION );location.reload()
}

五、HTML中的Meta标签
根据HTML语言标准注释:meta标签是对网站发展非常重要的标签,它可以用于鉴别作者,设定页面格式,标注内容提要和关键字,以及刷新页面等等。

HTTP-EQUIV类似于HTTP的头部协议,它回应给浏览器一些有用的信息,以帮助正确和精确地显示网页内容。

1.expires(期限)
说明:可以用于设定网页的到期时间。一旦网页过期,必须到服务器上重新调阅。
用法:

`<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">`

注意:必须使用GMT的时间格式。

2.Pragma(cach模式)
说明:禁止浏览器从本地机的缓存中调阅页面内容。
用法:

`<META HTTP-EQUIV="Pragma" CONTENT="no-cache">` 

注意:这样设定,访问者将无法脱机浏览。

3.Refresh(刷新)
说明:需要定时让网页自动链接到其它网页的话,就用这句了。
用法:

`<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://www.baidu.com">`

注意:其中CONTENT="5;URL=http://www.baidu.com"的5是指停留5秒钟后自动刷新到URL网址。

下面标签作用是20秒自动刷新当前页面:

<meta http-equiv="refresh" content="20" />

4.Set-Cookie(cookie设定)
说明:如果网页过期,那么存盘的cookie将被删除。
用法:

<META HTTP-EQUIV="Set-Cookie" CONTENT="cookievalue=xxx;
expires=Wednesday, 21-Oct-98 16:14:21 GMT; path=/"> 

注意:必须使用GMT的时间格式。

这篇关于Vue/cli2 || /cli3部署上线清理浏览器缓存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/606970

相关文章

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

Java实现本地缓存的四种方法实现与对比

《Java实现本地缓存的四种方法实现与对比》本地缓存的优点就是速度非常快,没有网络消耗,本地缓存比如caffine,guavacache这些都是比较常用的,下面我们来看看这四种缓存的具体实现吧... 目录1、HashMap2、Guava Cache3、Caffeine4、Encache本地缓存比如 caff

Linux部署中的文件大小写问题的解决方案

《Linux部署中的文件大小写问题的解决方案》在本地开发环境(Windows/macOS)一切正常,但部署到Linux服务器后出现模块加载错误,核心原因是Linux文件系统严格区分大小写,所以本文给大... 目录问题背景解决方案配置要求问题背景在本地开发环境(Windows/MACOS)一切正常,但部署到

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指