【问题标题】:Vuejs cache images from url, avoid re-fetchingVuejs从url缓存图片,避免重新获取
【发布时间】:2019-05-15 09:40:32
【问题描述】:

我正在构建一个简单的画廊 + 幻灯片应用程序。
在图库组件中,我拥有所有 url 并将它们显示在 GalleryItem 组件中。

<gallery-item v-for="i in images" :item="i" :key="i.uid"/>

GalleryItem 然后使用

<img :src="item.url"/>

显示图像。
如果用户点击任何GalleryItem,它将在灯箱/幻灯片组件中突出显示。

<lightbox :item="highlightedItem"/>

再次使用

<img :src="item.url"/>

我天真地期望浏览器缓存该请求而不是重新加载完全相同的 url,但这正是正在发生的事情。

有什么优雅的方法可以避免这种情况并在加载一次时缓存图像?

【问题讨论】:

  • 显示浏览器 确实 缓存,除非开发工具已打开且 disable-cache 处于活动状态,因此在生产中没有问题。
  • 我欠你的......花了很长时间试图解决这个问题,但我也启用了“禁用缓存”,哎呀!
  • 您可以尝试一次加载所有图像,然后使用 v-show 有条件地显示它们。这样您就可以避免重新获取。

标签: javascript vue.js vuejs2 vue-component browser-cache


【解决方案1】:

您可以使用 service worker 实现缓存图像。

您可以使用的示例 Service Worker 库是 Workbox。 使用 Workbox,您可以定义要缓存的 URL 和多种不同的缓存策略。与以下代码示例类似,只需将 RegExp 替换为适合您用例的正则表达式,例如使用图像扩展。

如果你的图片没有改变,因为同一个 url 总是指向同一个图片,我建议你使用 cacheFirst 策略,因为如果图片已经存在,你就不需要向服务器发送请求在缓存中。

workbox.routing.registerRoute(
  new RegExp('/styles/'),
  new workbox.strategies.CacheFirst()
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多