当前位置:首页 > VUE

vue实现强缓存

2026-02-18 06:07:51VUE

Vue 实现强缓存的方法

强缓存通过 HTTP 响应头 Cache-ControlExpires 控制,浏览器在缓存有效期内直接使用本地资源,不发送请求到服务器。Vue 项目可以通过以下方式实现强缓存。

配置 Webpack 输出文件名哈希

vue.config.js 或 Webpack 配置中,为输出文件添加内容哈希。当文件内容变化时,哈希值改变,强制浏览器重新加载资源。

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

设置 Nginx 强缓存规则

在 Nginx 配置中,为静态资源设置 Cache-Control 响应头。通常对哈希命名的文件设置长期缓存,对非哈希文件禁止缓存。

vue实现强缓存

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, immutable";
}

使用 Service Worker 缓存策略

通过 workbox-webpack-plugin 或自定义 Service Worker 实现更灵活的缓存控制。在 vue.config.js 中配置:

const { InjectManifest } = require('workbox-webpack-plugin');

module.exports = {
  configureWebpack: {
    plugins: [
      new InjectManifest({
        swSrc: './src/service-worker.js',
        swDest: 'service-worker.js'
      })
    ]
  }
}

在 Service Worker 中定义缓存策略

创建 src/service-worker.js 文件,使用 Cache API 实现强缓存逻辑:

vue实现强缓存

const CACHE_NAME = 'my-app-cache-v1';
const urlsToCache = [
  '/',
  '/index.html',
  '/static/js/main.[contenthash].js',
  '/static/css/main.[contenthash].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))
  );
});

通过 HTTP 头控制缓存

确保服务器返回正确的 HTTP 响应头。对于哈希命名的静态资源,可设置长期缓存:

Cache-Control: public, max-age=31536000, immutable

对于 HTML 文件,通常禁用缓存或设置较短的有效期:

Cache-Control: no-cache, no-store, must-revalidate

使用 Vue CLI 的 PWA 插件

Vue CLI 的 @vue/cli-plugin-pwa 自动生成 Service Worker 并支持缓存策略。在 vue.config.js 中配置:

module.exports = {
  pwa: {
    workboxOptions: {
      runtimeCaching: [
        {
          urlPattern: /\.(?:js|css|woff|woff2)$/,
          handler: 'CacheFirst',
          options: {
            cacheName: 'static-resources',
            expiration: {
              maxEntries: 100,
              maxAgeSeconds: 60 * 60 * 24 * 365
            }
          }
        }
      ]
    }
  }
}

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

相关文章

实现 vue ssr

实现 vue ssr

Vue SSR 实现方法 Vue SSR(Server-Side Rendering)通过服务器端渲染 Vue 应用,提升首屏加载速度和 SEO 友好性。以下是核心实现方法: 基础配置 安装必要依赖…

vue实现通知

vue实现通知

Vue 实现通知功能的方法 使用 Vue 实现通知功能可以通过多种方式实现,以下是一些常见的方法: 使用 Vue 的全局事件总线 在 Vue 中可以通过事件总线实现通知功能。创建一个全局事件总线,然…

vue实现toast

vue实现toast

Vue 实现 Toast 的方法 使用第三方库(推荐) 对于快速实现 Toast 功能,推荐使用成熟的第三方库如 vue-toastification 或 vant 的 Toast 组件。 安装 v…

vue实现popper

vue实现popper

Vue 实现 Popper 的方法 使用 Tippy.js 库 Tippy.js 是一个轻量级的 Popper.js 封装库,提供丰富的工具提示功能。安装 Tippy.js 及其 Vue 封装: n…

vue实现单击

vue实现单击

Vue 实现单击事件的方法 在 Vue 中实现单击事件可以通过 v-on 指令或简写的 @ 符号绑定事件处理器。以下是几种常见的实现方式: 基础用法 通过 v-on:click 或 @click 绑…

实现vue vm

实现vue vm

Vue VM 实现方法 Vue VM(ViewModel)是 Vue.js 的核心概念之一,负责连接视图(View)和数据模型(Model)。以下是实现 Vue VM 的几种方法: 使用 Vue 实…