当前位置:首页 > VUE

vue实现强缓存

2026-03-30 06:47:29VUE

强缓存的实现原理

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

在Vue项目中配置强缓存

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

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

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并缓存静态资源:

// 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事件中清理旧缓存:

vue实现强缓存

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 路由实现内部切换的方法 Vue Router 是 Vue.js 官方的路由管理器,用于实现单页应用(SPA)的页面切换。以下是几种常见的内部路由切换方式: 使用 <router-lin…

vue实现边框

vue实现边框

Vue 实现边框的方法 在 Vue 中实现边框效果可以通过多种方式完成,包括内联样式、CSS 类绑定、动态样式以及使用第三方 UI 库。以下是几种常见的实现方法。 内联样式绑定 使用 Vue 的 :…

vue实现vnc

vue实现vnc

Vue 实现 VNC 客户端 在 Vue 项目中实现 VNC 客户端功能,可以通过集成现有的 VNC 客户端库或组件完成。以下是具体实现方法: 安装依赖库 使用 noVNC 或其他 VNC 客户端…

vue实现频道

vue实现频道

Vue实现频道功能的方法 使用Vue Router动态路由 通过Vue Router的动态路由功能可以轻松实现频道切换。在路由配置中定义动态参数,组件内通过this.$route.params获取当前…

vue实现标题

vue实现标题

Vue 实现标题的方法 在Vue中实现标题可以通过多种方式,以下是几种常见的方法: 方法一:使用模板语法 在Vue组件的模板中直接使用HTML的<h1>到<h6>标签来定义…

vue多选实现

vue多选实现

Vue 多选实现方法 基础实现(v-model + multiple) 在 Vue 中实现多选可以通过 <select> 元素的 multiple 属性结合 v-model 完成。v-mo…