当前位置:首页 > 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实现图片加载

使用Image对象加载图片 通过JavaScript的Image对象可以动态加载图片,适用于需要预加载或动态插入图片的场景。 const img = new Image(); img.src =…

js实现图片拖动

js实现图片拖动

实现图片拖动的步骤 使用JavaScript实现图片拖动功能,可以通过HTML5的拖放API结合事件监听实现。以下是具体方法: 设置HTML结构 为图片添加draggable属性,并设置唯一ID以便…

vue 实现预览图片

vue 实现预览图片

实现图片预览功能 在Vue中实现图片预览功能可以通过多种方式完成,以下是几种常见的方法: 使用Element UI的el-image组件 Element UI提供了内置的图片预览功能,通过el-im…

vue实现图片保存

vue实现图片保存

实现图片保存的基本方法 在Vue中实现图片保存功能通常涉及前端操作,可能包括从Canvas生成、直接下载或通过后端接口保存。以下是几种常见实现方式: 使用HTML5的download属性 对于已存在…

vue实现发送图片

vue实现发送图片

使用 Vue 实现发送图片功能 前端实现(Vue 部分) 模板部分 <template> <div> <input type="file" accept="…

vue实现图片拖

vue实现图片拖

Vue实现图片拖拽功能 使用HTML5拖放API 在Vue中实现图片拖拽功能可以通过HTML5的拖放API来实现。创建一个可拖拽的图片元素,设置draggable属性为true,并绑定相关事件。 &…