前端项目部署后,需要刷新页面才能看到更新内容

问题背景

前端项目部署更新后,通知业务验证,业务点击收藏的标签,打开网页后没有看到修改的内容,每次都需要手动刷新,用户体验非常不好。

问题原因:缓存未过期,浏览器直接读取本地缓存,而未从服务器请求新的资源,如下所示。

请求方法: GET
状态代码: 200 OK (来自磁盘缓存)

解决方法

在 build 目录下创建 generate.js,目的是每次打包时在 public 目录下生成 app-version.json 文件

// /build/version/generate.js

const fs = require('fs')
const path = require('path')

module.exports = function generateAppVersion(appVersion) {
  try {
    let obj = {
      appVersion: String(appVersion)
    }
    fs.writeFileSync(path.resolve('public/app-version.json'), 
    	JSON.stringify(obj))
  } catch (error) {
    console.error(error)
  }
}

在 vue.config.js 中调用 version.js

const generateAppVersion = require('./build/version/generate.js')
const timestamp = Date.now()
generateAppVersion(timestamp)

执行 npm run build,可以看到 public 中多了 app-version.json 文件

{"appVersion":"1698742226172"}

src 文件下创建 version.js,在 main.js 中 import 引入,进行新旧版对比并刷新浏览器。

import axios from 'axios'

async function compare() {
  let last = window.localStorage.getItem('app_version') // 旧版本
  let current = await queryVersion() // 新版本
  if(!last) {
    setVersion(current)
  }
  if(last && last != current) { // 新旧版本不一样
    setVersion(current)
    window.location.reload() // 自动刷新浏览器
  }
}

function setVersion(version) {
  window.localStorage.setItem('app_version', version)
}

/**
 * 请求新版本
 * @returns 
 */
async function queryVersion() {
  return axios.get(window.location.origin + window.location.pathname + './app-version.json?r=' + Math.random())
    .then(({data}) => {
      return data.appVersion
    })
}

compare()
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【资源说明】 毕业设计基于Java的直播数据可视化系统前后端源码+项目部署说明.zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 直播数据可视化系统 这是一个基于Spring Boot + Vue的直播数据可视化系统,实现了直播数据的可视化展示、分级权限管理、警报数据流处理、报表的统计与文件导出、实时事件通知等功能。 此部分为前端项目 项目简介 1. 基于[Ant Design Pro Vue](https://pro.antdv.com/docs/getting-started)脚手架进行开发 2. 使用[V-Chartz](https://v-charts.js.org/#/)、[ANTDV](https://www.antdv.com/docs/vue/introduce-cn/)等提供的组件,以及自己进行个性化封装,完成了对直播平台不同数据的可视化展示 3. 在用户不手动刷新页面的情况下,使用轮询完成了直播数据的实时刷新,使用WebSocket完成了警报事件的实时通知 4. 根据用户权限级别的不同定制化展示内容,主要包括:左侧菜单、表单选项、数据展示页(列表页/图表页) 要使用的技术:MyBatis、Shiro、WebSocket、Quartz ### 项目简介 1. RESTful风格的前后端分离式开发 2. 使用Shiro完成分级权限管理 3. 直播实时数据与历史数据的可视化展示 4. 对主播举报次数的实时检测,相关警报的发起、处理与传递 5. 基于Apache POI与iText实现直播数据的报表统计与导出 6. 主播管理、用户管理等基础功能模块 这是一个基于Spring Boot + Vue的直播数据可视化系统,实现了直播数据的可视化展示、分级权限管理、警报数据流处理、报表的统计与文件导出、实时事件通知等功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值