web前端浏览器实现版本更新

前言

        对前端人员来说,版本更新是一个很必要的功能,拿浏览器来说,前端实现版本更新需要做哪些呢?(uniapp做双端APP的版本热更新后续会发)

一、项目打包文件名加上时间戳

打包加上时间戳的目的是为了让每次打包好的js、css等文件的文件名不同,浏览器向服务器发起请求时,缓存里面没有,从而向服务器取最新的。因为这个打包加上时间戳比较常见且简单,有非常多的博主分享,我就不多说了,可以点以下链接去了解一下。

vue2、vue3如何在打包时加上时间戳

!!!但是在文件名里加上时间戳,浏览器就会乖乖向服务器请求最新的资源了吗???

首先了解一下浏览器的缓存机制浏览器缓存机制

那么问题来了,我们在打包时给文件名加上了时间戳,浏览器怎么会有缓存呢??

是这样的,打包时只会对js、css等文件的文件名进行加时间戳的处理,但是index.html是不加时间戳的,我们知道,所有的资源都是在index.html引入的,如果index.html是旧的,那引入的js、css等资源也都是旧的,破案。

那么如果想要加载最新的index.html我们需要清空当前url的缓存

二、浏览器清空缓存方法

下面有四种浏览器清缓存的方法,采取第三种方法可以让浏览器向服务器请求所有最新的资源

① window.location.reload(false)

        方法会根据缓存的有效期和修改时间,决定是否重新从服务器下载内容。如果缓存的内容没有过期或没有修改,就会直接使用缓存,这样可以节省流量和时间。

②window.location.href = window.location.href

        方法会重新加载当前页面的URL,但是也可能使用缓存的内容。

③window.location.reload(true)

        方法会忽略缓存的内容,强制重新从服务器下载所有内容,包括 JavaScript 文件,图像,文本文件等。这样可以保证显示网页的最新内容,但是会消耗更多的流量和时间。

④window.location.replace(window.location.href)

        方法会把浏览器中的临时文件夹的文件删除再重新从服务器下载。这样可以清除一些可能造成问题的缓存文件,但是也会消耗更多的流量和时间。

三、什么时候清空缓存?

如果每次进入网页都清空缓存重新加载资源,会消耗更多的流量和时间。因此我们可以在本地代码store里面定义一个版本号(我是以时间来对比的),再让后端新增一个版本号参数的接口。每次发版打包前,修改本地代码store的版本号,修改线上版本号参数,保证本地代码的版本号和线上的版本号参数一样。

这样,每次进入该页面时,判断本地store的版本号是否和线上版本号一致,不一致弹出更新确认按钮。

// 检测是否有版本更新
import store from '@/store';
import { getConfigKey } from '@/api/system/config';
import { MessageBox } from 'element-ui';
export function detectNewVersion() {
	// replace(/-/g, '/') 兼容,safari浏览器只支持yyyy/mm/dd格式
	let loaclVersion = new Date(store.state.app.currentVersion.replace(/-/g, '/')).getTime();
	getConfigKey('sys.index.version').then((res) => {//请求线上版本号参数
		if (res.code != 200) return;
		let latest = new Date(res.msg.replace(/-/g, '/')).getTime();
		// 判断是否有变化
		if (loaclVersion != latest) {
			MessageBox.confirm('有新版本更新, 可能出现操作异常,请点击按钮更新?', '提示', {
				confirmButtonText: '更新',
				cancelButtonText: '取消',
			}).then(() => {
                //清空浏览器缓存
				window.location.reload(true)
			});
		}
	});
}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Web前端开发中,浏览器兼容性是一个常见的挑战。不同的浏览器实现了不同的标准和规范,因此相同的代码在不同的浏览器上可能会有不同的表现,甚至无法正常工作。 为了解决浏览器兼容性问题,前端开发者需要注意不同浏览器的差异性,并采用相应的解决方法来保证页面在各种浏览器中能够正确地展示和运行。以下是一些常见的解决方法和工具: 1. 使用polyfill库:Polyfill是一种JavaScript代码,用于在旧版本浏览器实现新的Web标准和API。通过使用polyfill库,开发者可以在不支持某些功能的浏览器上模拟这些功能,从而提高兼容性。 2. 使用CSS hack:CSS hack是一种通过特定的CSS代码来针对不同浏览器的差异性进行样式修复的方法。通过使用不同的CSS hack,开发者可以针对不同浏览器应用不同的样式规则,从而解决兼容性问题。 3. 使用媒体查询:媒体查询是一种CSS技术,用于根据设备的特性(如屏幕宽度、设备类型等)来应用不同的样式规则。通过使用媒体查询,开发者可以根据不同设备的特性来调整页面的布局和样式,从而提高兼容性。 4. 使用特定的前缀:某些CSS属性和JavaScript API在不同浏览器中可能存在不同的前缀。通过在代码中添加特定的前缀,开发者可以确保这些属性和API在不同浏览器中正常工作。 5. 使用兼容性检测工具:有许多兼容性检测工具可以帮助开发者发现和解决兼容性问题。例如,Can I use是一个广泛使用的兼容性查询工具,可以查看不同浏览器对特定功能的支持情况。另外,还有一些在线工具和浏览器插件可以帮助开发者进行兼容性测试和调试。 总之,通过注意浏览器的差异性,并采用相应的解决方法和工具,开发者可以有效地解决Web前端浏览器兼容性问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值