当前位置:首页 > VUE

vue实现强缓存

2026-03-30 06:47:29VUE

强缓存的实现原理

强缓存通过设置HTTP响应头中的Cache-ControlExpires字段实现。浏览器在请求资源时会先检查这些字段,如果未过期则直接从本地缓存读取,不发送请求到服务器。

在Vue项目中配置强缓存

通过webpack配置输出文件名哈希

vue.config.js中配置文件名添加内容哈希,确保文件内容变化时文件名改变:

vue实现强缓存

module.exports = {
  configureWebpack: {
    output: {
      filename: '[name].[contenthash].js',
      chunkFilename: '[name].[contenthash].js'
    }
  }
}

设置Nginx服务器缓存头

在Nginx配置中添加缓存头,对静态资源设置长期缓存:

location / {
  try_files $uri $uri/ /index.html;

  # 静态资源缓存一年
  location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
    expires 1y;
    add_header Cache-Control "public, no-transform";
  }
}

使用Service Worker实现离线缓存

注册Service Worker并缓存静态资源:

vue实现强缓存

// sw.js
const CACHE_NAME = 'my-cache-v1';
const urlsToCache = [
  '/',
  '/index.html',
  '/static/js/main.js',
  '/static/css/main.css'
];

self.addEventListener('install', event => {
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(cache => cache.addAll(urlsToCache))
  );
});

self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request)
      .then(response => response || fetch(event.request))
  );
});

缓存更新策略

使用版本号控制缓存

在文件名或请求URL中添加版本号参数:

// 动态加载带版本号的资源
const version = 'v1.0.0';
loadScript(`/static/js/main.js?version=${version}`);

清除旧缓存

在Service Worker的activate事件中清理旧缓存:

self.addEventListener('activate', event => {
  const cacheWhitelist = [CACHE_NAME];
  event.waitUntil(
    caches.keys().then(cacheNames => {
      return Promise.all(
        cacheNames.map(cacheName => {
          if (!cacheWhitelist.includes(cacheName)) {
            return caches.delete(cacheName);
          }
        })
      );
    })
  );
});

注意事项

  • 对index.html文件不应设置长期缓存,确保用户能获取最新版本
  • API请求通常不应使用强缓存,需要设置Cache-Control: no-cache
  • 文件哈希能有效解决缓存更新问题,内容变化时文件名改变会强制浏览器获取新资源
  • 测试阶段可暂时禁用缓存方便调试

标签: 缓存vue
分享给朋友:

相关文章

vue实现录播播放

vue实现录播播放

Vue 实现录播播放 使用 video.js 实现 安装 video.js 和相关的 Vue 适配器: npm install video.js @videojs-player/vue 在 Vue…

vue实现主题

vue实现主题

Vue 实现主题的方法 使用 CSS 变量动态切换主题 定义全局 CSS 变量,通过修改这些变量实现主题切换。在 Vue 的根组件或全局样式中定义变量: :root { --primary-co…

vue实现键盘

vue实现键盘

Vue 实现键盘功能 在Vue中实现键盘功能通常涉及监听键盘事件、处理输入以及渲染虚拟键盘界面。以下是几种常见的实现方式: 监听键盘事件 通过@keydown或@keyup指令监听键盘事件,适用于需…

vue 实现表单

vue 实现表单

Vue 表单实现方法 Vue.js 提供了多种方式实现表单,包括双向数据绑定、表单验证和动态表单生成。以下是常见的实现方法: 基础表单绑定 使用 v-model 指令实现表单元素与数据的双向绑定:…

vue实现监听

vue实现监听

监听数据变化 在Vue中,可以通过watch选项或$watch方法监听数据的变化。watch适用于组件选项内声明式监听,$watch适用于动态监听。 // 选项式API export default…

vue实现datalist

vue实现datalist

使用 Vue 实现 HTML5 的 datalist 功能 HTML5 的 <datalist> 元素提供了一种自动完成输入框的功能,允许用户在输入时从预定义的选项列表中选择。以下是几种在…