关于Vue如何清除缓存的方法详解

 更新时间:2023年12月21日 08:41:20   作者:人猫神话  
缓存清除成为克服浏览器缓存中过时内容挑战的关键技术,术语“缓存清除”是指故意使静态资源失效或进行版本控制,迫使浏览器在发生更改时获取新资源,本文给大家介绍了Vue如何清除缓存,需要的朋友可以参考下

浏览器缓存是一种强大的优化技术,用于增强 Web App 的性能。它涉及用户设备上静态资源(比如图像、样式表和脚本)的本地存储。通过在本地存储这些资源,浏览器可以在后续访问时快速检索它们,显著减少加载时间并改善整体 UX(用户体验)。

虽然但是,这种优化策略面临一个挑战:用户可能会遭遇过时的内容。当用户访问网站时,浏览器会缓存静态资源的副本。下次用户访问该站点时,浏览器在从服务器获取这些资源之前,会检查其缓存中是否有这些资源。虽然此过程大大地加速了页面加载,但如果服务器进行了更新,那么可能会导致用户看到的是过时的内容。

缓存清除的作用

缓存清除成为克服浏览器缓存中过时内容挑战的关键技术。术语“缓存清除(cache-busting)”是指故意使静态资源失效或进行版本控制,迫使浏览器在发生更改时获取新资源。

缓存清除的目的

  • 确保最新版本:缓存清除可确保用户始终收到最新版本的 App。如果没有缓存清除,用户可能会遇到浏览器继续提供过时资源的问题,阻碍新功能、错误修复或设计更新的交付。
  • 优化 UX:通过保证用户访问最新版本的 Web App,缓存清除优化了整体 UX。用户受益于改进的性能并与开发者所做的最新更改保持一致。

缓存清除的机制

缓存清除涉及在发生更新时更改静态资源的文件名或 URL。常见策略包括:

  • 文件版本控制:在文件名中附加唯一的版本标识符(比如 styles.css?v=123)可确保浏览器将每个版本视为不同的资源,提示其获取更新的文件。
  • 内容哈希:根据文件内容生成哈希,并将其合并到文件名中(比如 styles.abcd123.css),这提供了一种识别更改的可靠方法。即使对文件进行微小的更改也会产生新的哈希值,并随后产生新的文件名。

1. 将 meta.json 添加到 Public 文件夹中

public 文件夹中创建 meta.json 文件来存储版本信息,方便客户端代码的运行时可访问性。

meta.json 文件的引入对于在 Vue App 中动态管理版本信息至关重要。此 JSON 文件包含有关当前版本和以前版本的重要详细信息,允许在运行时进行有效的版本比较。

meta.json 的内容如下所示:

{
  "version": "1.1.2",
  "oldVersion": "1.1.1"
}

public 文件夹是一大坨 Web 开发设置中的惯例。将 meta.json 文件放在 public 文件夹中可确保客户端代码在运行时可以访问该文件。

至关重要的是,在运行时将 package.json 中指定的版本与 meta.json 版本进行比较。此比较可确保当前版本与预期部署版本保持一致。如果检测到差异,它会触发操作,比如强制刷新,保证用户无缝体验最新的更新和改进。

2. 设置 generate-build-version.js 脚本

缓存清除过程的核心在于自动生成新构建版本、更新 package.json 文件并创建 meta.json 文件的脚本。让我们剖析一下此脚本的关键组件:

// generate-build-version.js

// 导入需要的模块,也可以按需使用 ESM
const fs = require('fs')
const path = require('path')
const semver = require('semver')

// 从 package.json 读取当前版本
const packageJson = require('./package.json')
const appVersion = packageJson.version

// 基于语义化版本规则增量更新版本的函数
const incrementVersion = version => {
  const versionArray = version.split('.')
  const [major, minor, patch] = versionArray

  // 检查补丁版本是否为 9,然后增量更新次版本号
  if (parseInt(patch) === 9) {
    const newMinor = parseInt(minor) + 1
    return `${major}.${newMinor}.0`
  }

  // 增量更新次版本号
  const newPatch = parseInt(patch) + 1
  return `${major}.${minor}.${newPatch}`
}

// 诉诸 incrementVersion 函数计算新版本号
const newVersion = incrementVersion(appVersion)

// 基于新版本号更新 package.json
packageJson.version = newVersion
fs.writeFileSync(
  './package.json',
  JSON.stringify(packageJson, null, 2),
  'utf-8'
)

// 基于新版本号创建 meta.json
const metaJson = { version: newVersion, oldVersion: appVersion }
fs.writeFileSync(
  './public/meta.json',
  JSON.stringify(metaJson, null, 2),
  'utf8'
)

// 打印日志,表明版本更新完毕
console.log('Version has been updated in package.json and meta.json')

该脚本自动执行版本控制过程,确保每次构建都会妥当增量更新版本并更新相关文件。反而言之,这有助于在 App 生命周期的后续阶段有效清除缓存。

3. 创建 HandleCache.vue 组件

HandleCache 组件通过管理加载状态、检查最新版本和处理缓存清除,在缓存清除中发挥着至关重要的作用。让我们深入研究其功能:

该组件封装了检查最新版本、更新加载状态,以及暴露 clearCacheAndReload 函数,供外部逻辑使用。

4. 在 App.vue 中集成 HandleCache 组件

HandleCache 组件集成到 App.vue 主文件中极其简单。该组件充当中间件,确保在渲染主 App 之前加载最新版本:

此处的 cacheBuster 用作对 HandleCache 组件的引用,允许您访问其功能并响应其加载状态。

5. 设置命令脚本和内置的 package.json

要简化开发和部署过程,务必使用必要的脚本更新您的 package.json

"scripts": {
  ...
  "generate-build-version": "node generate-build-version",
  "build": "pnpm generate-build-version && vite build",
}

这些脚本自动生成构建版本并触发构建过程,确保缓存清除无缝集成到您的开发工作流程中。

完结撒花

Vue 3 缓存清除成为提供无缝且最新 UX 的关键技术。虽然但是,值得注意的是,缓存清除的必要性可能因不同的 SPA 而异。虽然事实证明它对于频繁更新和动态内容的 App 必不可少,但并非所有 SPA 都需要这种级别的优化。

缓存清除的注意事项:

  • 更新频率:如果您的 App 经常更新,缓存清除可确保用户始终访问最新的功能和改进。
  • 动态内容:具有动态变化内容的 SPA 可以从缓存清除中受益匪浅,防止用户遭遇过时的信息。

受益于缓存清除的 SPA 示例:

  • 实时仪表板:显示实时数据的 App(比如财务仪表板或实时分析)受益于缓存清除,可保持数据准确性。
  • 新闻门户:提供新闻和文章的 SPA 需要及时更新,因此缓存清除对于确保用户收到最新信息至关重要。
  • 电子商务平台:缓存清除可以最好地支持电子商务 SPA 中的动态产品列表、定价更新和促销变化。

当不需要缓存清除时:

  • 静态内容:如果您的 SPA 主要提供很少更改的静态内容,那么缓存清除的好处可能很小。
  • 低更新频率:更新不频繁且更改最少的 SPA 可能不会因缓存清除而显著优化 UX。

在实现缓存清除时,请考虑 SPA 的独特特征,以确定额外的复杂性是否符合您的 App 需求。

愿您的代码没有错误,并且您的缓存速度极快!

以上就是关于Vue如何清除缓存的方法详解的详细内容,更多关于Vue清除缓存的资料请关注脚本之家其它相关文章!

相关文章

  • 在Vue 3中使用OpenLayers读取WKB数据并显示图形效果

    在Vue 3中使用OpenLayers读取WKB数据并显示图形效果

    WKB作为一种紧凑的二进制格式,在处理和传输空间数据时具有明显优势,本文介绍了如何在Vue 3中使用OpenLayers读取WKB格式的空间数据并显示图形,感兴趣的朋友一起看看吧
    2024-12-12
  • Vue3属性绑定方法解析

    Vue3属性绑定方法解析

    这篇文章主要介绍了Vue3属性绑定方法解析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • vue生成pdf文件步骤及pdf分页隔断处理方法

    vue生成pdf文件步骤及pdf分页隔断处理方法

    最近遇到一个需求,需要把内容下载生成pdf文件,但转换过程中内容总是会被截断,就很难受,从网上找到了解决办法分享给大家,这篇文章主要给大家介绍了关于vue生成pdf文件步骤及pdf分页隔断处理的相关资料,需要的朋友可以参考下
    2024-02-02
  • 3分钟了解vue数据劫持的原理实现

    3分钟了解vue数据劫持的原理实现

    这篇文章主要介绍了3分钟了解vue数据劫持的原理实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • vue实现购物车案例

    vue实现购物车案例

    这篇文章主要为大家详细介绍了vue实现购物车案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • 仿vue-cli搭建属于自己的脚手架的方法步骤

    仿vue-cli搭建属于自己的脚手架的方法步骤

    这篇文章主要介绍了仿vue-cli搭建属于自己的脚手架的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • elementui使用el-upload组件实现自定义上传的详细步骤

    elementui使用el-upload组件实现自定义上传的详细步骤

    upload上传是前端开发很常用的一个功能,在Vue开发中常用的Element组件库也提供了非常好用的upload组件,这篇文章主要给大家介绍了关于elementui使用el-upload组件实现自定义上传的详细步骤,需要的朋友可以参考下
    2023-12-12
  • ElementUI中el-tabs事件绑定的具体使用

    ElementUI中el-tabs事件绑定的具体使用

    本文主要介绍了ElementUI中el-tabs事件绑定的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 详解Vue源码学习之callHook钩子函数

    详解Vue源码学习之callHook钩子函数

    这篇文章主要介绍了详解Vue源码学习之callHook钩子函数,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 没有搭建脚手架时vue组件的使用方式

    没有搭建脚手架时vue组件的使用方式

    这篇文章主要介绍了没有搭建脚手架时vue组件的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10

最新评论