当前位置:首页 > VUE

vue实现图片缓存

2026-03-09 15:02:15VUE

使用Service Worker缓存图片

在Vue项目中注册Service Worker,通过Workbox库实现图片缓存策略。在vue.config.js中配置PWA插件:

module.exports = {
  pwa: {
    workboxOptions: {
      runtimeCaching: [
        {
          urlPattern: /\.(?:png|jpg|jpeg|svg|gif)$/,
          handler: 'CacheFirst',
          options: {
            cacheName: 'image-cache',
            expiration: {
              maxEntries: 50,
              maxAgeSeconds: 30 * 24 * 60 * 60
            }
          }
        }
      ]
    }
  }
}

本地存储实现缓存

使用浏览器的localStorage或IndexedDB存储图片数据。通过Canvas将图片转换为Base64格式:

vue实现图片缓存

function cacheImage(url) {
  const canvas = document.createElement('canvas')
  const ctx = canvas.getContext('2d')
  const img = new Image()

  img.onload = () => {
    canvas.width = img.width
    canvas.height = img.height
    ctx.drawImage(img, 0, 0)
    const dataURL = canvas.toDataURL('image/jpeg')
    localStorage.setItem(url, dataURL)
  }

  img.src = url
}

内存缓存策略

在Vue组件中使用响应式数据存储已加载的图片:

vue实现图片缓存

export default {
  data() {
    return {
      imageCache: new Map()
    }
  },
  methods: {
    loadImage(url) {
      if (this.imageCache.has(url)) {
        return Promise.resolve(this.imageCache.get(url))
      }

      return new Promise((resolve) => {
        const img = new Image()
        img.onload = () => {
          this.imageCache.set(url, img)
          resolve(img)
        }
        img.src = url
      })
    }
  }
}

浏览器原生Cache API

通过Fetch API和Cache接口实现图片缓存:

async function cacheImage(url) {
  const cache = await caches.open('image-cache-v1')
  const response = await fetch(url)
  await cache.put(url, response.clone())
}

async function getCachedImage(url) {
  const cache = await caches.open('image-cache-v1')
  const response = await cache.match(url)
  return response ? response.blob() : null
}

第三方库实现

使用lru-cache等库实现LRU缓存策略:

import LRU from 'lru-cache'

const imageCache = new LRU({
  max: 100,
  maxAge: 1000 * 60 * 60
})

function getImage(url) {
  if (imageCache.has(url)) {
    return imageCache.get(url)
  }

  return fetch(url)
    .then(res => res.blob())
    .then(blob => {
      imageCache.set(url, blob)
      return blob
    })
}

标签: 缓存图片
分享给朋友:

相关文章

js实现图片移动

js实现图片移动

使用CSS和JavaScript实现图片移动 方法一:使用CSS动画结合JavaScript控制 通过CSS定义动画关键帧,JavaScript动态添加或移除动画类。 /* CSS部分 */ .m…

vue实现加载图片

vue实现加载图片

Vue 实现图片加载的方法 在 Vue 中加载图片可以通过多种方式实现,以下是一些常见的方法: 使用静态资源路径 将图片放在 public 或 assets 目录下,通过相对路径或绝对路径引用。…

vue实现图片剪切

vue实现图片剪切

Vue 实现图片裁剪的方法 在 Vue 中实现图片裁剪功能,可以通过以下两种常见方式完成: 使用第三方库 cropperjs 安装 cropperjs 库: npm install cro…

vue实现图片压缩

vue实现图片压缩

使用 canvas 实现图片压缩 在 Vue 项目中可以通过 canvas 的 drawImage 和 toDataURL 方法实现图片压缩。创建一个方法处理图片文件,将其绘制到 canvas 并输出…

vue 实现图片放大

vue 实现图片放大

使用 Vue 实现图片放大功能 基础实现:CSS 放大 通过 CSS 的 transform: scale() 和 transition 实现简单的鼠标悬停放大效果。 <template>…

vue实现图片插入

vue实现图片插入

Vue 实现图片插入的方法 在 Vue 中插入图片可以通过多种方式实现,具体取决于图片的来源和用途。以下是几种常见的方法: 静态图片插入 对于项目中的静态图片,可以直接通过 src 属性引入。图片需…