当前位置:首页 > 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格式:

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组件中使用响应式数据存储已加载的图片:

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缓存策略:

vue实现图片缓存

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
    })
}

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

相关文章

vue实现页面缓存

vue实现页面缓存

使用 <keep-alive> 组件实现缓存 Vue 内置的 <keep-alive> 组件可以缓存动态组件或路由组件。通过包裹需要缓存的组件,可以保留其状态避免重复渲染。…

网页设计制作css图片

网页设计制作css图片

CSS图片处理基础方法 在网页设计中,CSS可以控制图片的尺寸、位置、边框等样式属性。通过<img>标签或背景图方式引入图片后,使用CSS属性进行调整。 img { width: 1…

vue实现拖动图片验证

vue实现拖动图片验证

Vue 实现拖动图片验证功能 核心思路 拖动图片验证通常需要用户将图片拖动到指定区域或按正确顺序排列。实现时需要处理拖拽事件、验证逻辑和视觉反馈。 实现步骤 1. 基础组件结构 <templ…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…