首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

workbox 3-在运行时缓存时忽略URL参数

Workbox是由Google开发的一套用于构建离线优先的Web应用程序的工具集。它提供了一组强大的库和工具,用于帮助开发人员实现高效的缓存策略和离线功能。

Workbox 3是Workbox的一个版本,它提供了一种在运行时缓存时忽略URL参数的功能。URL参数通常用于标识资源的不同版本或变体,但在某些情况下,我们可能希望忽略这些参数,以便将它们视为相同的资源。

忽略URL参数的优势在于可以减少缓存的重复内容,提高缓存的命中率,并减少网络请求。这对于具有大量变体资源的应用程序特别有用,例如具有多语言支持或根据用户角色提供不同内容的应用程序。

Workbox提供了一个名为ignoreURLParametersMatching的方法,可以用于配置哪些URL参数应该被忽略。该方法接受一个正则表达式或字符串数组作为参数,用于匹配要忽略的URL参数。

以下是一个示例代码,演示如何在Workbox中配置忽略URL参数:

代码语言:javascript
复制
workbox.routing.registerRoute(
  new RegExp('/api/'),
  new workbox.strategies.NetworkFirst({
    cacheName: 'api-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/assets/'),
  new workbox.strategies.CacheFirst({
    cacheName: 'assets-cache',
    plugins: [
      new workbox.expiration.Plugin({
        maxEntries: 50
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/static/'),
  new workbox.strategies.StaleWhileRevalidate({
    cacheName: 'static-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/pages/'),
  new workbox.strategies.NetworkFirst({
    cacheName: 'pages-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/images/'),
  new workbox.strategies.CacheFirst({
    cacheName: 'images-cache',
    plugins: [
      new workbox.expiration.Plugin({
        maxEntries: 100
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/videos/'),
  new workbox.strategies.CacheFirst({
    cacheName: 'videos-cache',
    plugins: [
      new workbox.expiration.Plugin({
        maxEntries: 10
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/fonts/'),
  new workbox.strategies.CacheFirst({
    cacheName: 'fonts-cache',
    plugins: [
      new workbox.expiration.Plugin({
        maxEntries: 20
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/scripts/'),
  new workbox.strategies.StaleWhileRevalidate({
    cacheName: 'scripts-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/styles/'),
  new workbox.strategies.StaleWhileRevalidate({
    cacheName: 'styles-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/manifest.json'),
  new workbox.strategies.StaleWhileRevalidate({
    cacheName: 'manifest-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/favicon.ico'),
  new workbox.strategies.StaleWhileRevalidate({
    cacheName: 'favicon-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/index.html'),
  new workbox.strategies.NetworkFirst({
    cacheName: 'index-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/'),
  new workbox.strategies.NetworkFirst({
    cacheName: 'root-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/about/'),
  new workbox.strategies.NetworkFirst({
    cacheName: 'about-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/contact/'),
  new workbox.strategies.NetworkFirst({
    cacheName: 'contact-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/404/'),
  new workbox.strategies.NetworkFirst({
    cacheName: '404-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/500/'),
  new workbox.strategies.NetworkFirst({
    cacheName: '500-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/login/'),
  new workbox.strategies.NetworkFirst({
    cacheName: 'login-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/logout/'),
  new workbox.strategies.NetworkFirst({
    cacheName: 'logout-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/register/'),
  new workbox.strategies.NetworkFirst({
    cacheName: 'register-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/profile/'),
  new workbox.strategies.NetworkFirst({
    cacheName: 'profile-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

workbox.routing.registerRoute(
  new RegExp('/settings/'),
  new workbox.strategies.NetworkFirst({
    cacheName: 'settings-cache',
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [200]
      })
    ]
  }),
  'GET'
);

在上述代码中,我们使用了正则表达式来匹配不同的URL路径,并为每个路径注册了不同的缓存策略。其中,我们可以通过配置ignoreURLParametersMatching来忽略URL参数。

需要注意的是,Workbox是一套开源工具,与腾讯云无直接关联。因此,在答案中无法提供与腾讯云相关的产品和产品介绍链接地址。但是,你可以在腾讯云的官方文档中查找与Workbox类似的产品或功能,以满足你的需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Workbox-webpack-plugin 使用指南与实践

new GenerateSW({swDest: 'custom-service-worker.js',});exclude: 用于排除不需要缓存的文件,常用于忽略 .map 文件等。...缓存策略详解Workbox 支持多种缓存策略,每种策略适用于不同的资源类型和场景。CacheFirst:优先使用缓存,只有在缓存中没有找到资源才会从网络获取。...完整项目示例以下是一个完整的 Webpack 项目示例,结合 GenerateSW 模式配置静态资源预缓存和运行时缓存:const { GenerateSW } = require('workbox-webpack-plugin...,如果未能即时生效,可能是由于旧的 Service Worker 仍在运行。...通过它,我们可以轻松实现静态资源的预缓存、运行时缓存、自动缓存更新等功能,从而提升应用的离线能力和加载性能。

14210

Workbox5+Webpack4构建离线应用

详细介绍请查阅官方文档 配置 Workbox可以修改缓存名称,可以用setCacheNameDetails设置预缓存和运行时缓存的名称,还可以通过workbox.core.cacheNames.precache...: '383676' }, {url: '/styles/app.0c9a31.css', revision: null}, {url: '/scripts/app.0d5770.js...,第一个参数是一个正则表达式,用来匹配路径,第二个参数是对匹配路径进行的处理函数,可以用workbox封装的缓存策略处理函数,也可以自定义,上述示例就是使用的workbox内部封装的CacheFirst...如果第二个参数使用自定义函数,那么这个函数有三个默认参数,示例如下: import {registerRoute} from 'workbox-routing'; const handler = async..., }); // 更新自动生效 clientsClaim(); // 预缓存文件,self.

1.2K10
  • PWA 实践应用(Google Workbox

    当一起使用 Service Worker 和 CacheStorage API ,可以控制网站上使用的资源(HTML、CSS、JS、图像等)如何从网络或缓存中请求,甚至允许在离线返回缓存的内容。...(用于新的 HTML 页面),当它状态码为 200 ,该策略将缓存的页面存储在一个名为 pages 的缓存中。...预缓存 除了在发出请求进行缓存(运行时缓存)之外,Workbox 还支持预缓存,即在安装 Service Worker 缓存资源。...__WB_MANIFEST); 这个 Service Worker 将在安装缓存文件,替换 self.__WB_MANIFEST,其中包含在构建注入到 Service Worker 中的资源。...离线回退 让 Web 应用在离线工作感觉更健壮的常见模式是提供一个后退页面,而不是显示浏览器的默认错误页面。通过 Workbox 路由和预缓存,你可以在几行代码中设置这个模式。

    1.5K40

    PWA 实践应用(Google Workbox

    当一起使用 Service Worker 和 CacheStorage API ,可以控制网站上使用的资源(HTML、CSS、JS、图像等)如何从网络或缓存中请求,甚至允许在离线返回缓存的内容。...(用于新的 HTML 页面),当它状态码为 200 ,该策略将缓存的页面存储在一个名为 pages 的缓存中。...预缓存 除了在发出请求进行缓存(运行时缓存)之外,Workbox 还支持预缓存,即在安装 Service Worker 缓存资源。...__WB_MANIFEST); 这个 Service Worker 将在安装缓存文件,替换 self.__WB_MANIFEST,其中包含在构建注入到 Service Worker 中的资源。...离线回退 让 Web 应用在离线工作感觉更健壮的常见模式是提供一个后退页面,而不是显示浏览器的默认错误页面。通过 Workbox 路由和预缓存,你可以在几行代码中设置这个模式。

    38810

    【腾讯云前端性能优化大赛】前端性能和加载体验优化实践(附:PWA、离线包、内存优化、预渲染)

    当一起使用 Service Worker 和 CacheStorage API ,可以控制网站上使用的资源(HTML、CSS、JS、图像等)如何从网络或缓存中请求,甚至允许在离线返回缓存的内容。...(用于新的 HTML 页面),当它状态码为 200 ,该策略将缓存的页面存储在一个名为 pages 的缓存中。...预缓存 除了在发出请求进行缓存(运行时缓存)之外,Workbox 还支持预缓存,即在安装 Service Worker 缓存资源。...离线回退 让 Web 应用在离线工作感觉更健壮的常见模式是提供一个后退页面,而不是显示浏览器的默认错误页面。通过 Workbox 路由和预缓存,你可以在几行代码中设置这个模式。...JavaScript 对内存的占用受代码的影响,如果在运行时缓存和计算大量的数据、处理巨量字符串等耗费空间的行为,那么内存就会极速飙升,极端情况下会导致承载网页的应用闪退。

    2.7K121

    前端性能和加载体验优化实践

    当一起使用 Service Worker 和 CacheStorage API ,可以控制网站上使用的资源(HTML、CSS、JS、图像等)如何从网络或缓存中请求,甚至允许在离线返回缓存的内容。...Workbox 的主要特性之一是它的路由和缓存策略模块。 路由和缓存策略 Workbox 允许使用不同的缓存策略来管理 HTTP 请求的缓存。...首先确定正在处理的请求是否符合条件,如果符合,则对其应用缓存策略。匹配是通过返回真值的回调函数进行的。缓存策略可以是 Workbox 的一种预定义策略,也可以创建自己的策略。...(用于新的 HTML 页面),当它状态码为 200 ,该策略将缓存的页面存储在一个名为 pages 的缓存中。...JavaScript 对内存的占用受代码的影响,如果在运行时缓存和计算大量的数据、处理巨量字符串等耗费空间的行为,那么内存就会极速飙升,极端情况下会导致承载网页的应用闪退。

    1.5K20

    【腾讯云前端性能优化大赛】前端首屏性能优化

    我们常用的字体文件格式是TTF(TrueType Font),由苹果和微软为 PostScript 而开发的字体格式,它被开发就没有考虑为web使用,所以它们没有经过压缩,体积往往较大。...@font-face { font-family: 'Fira Sans'; src: url('....// registerRoute 是最重要的方法,用来拦截请求,第一个参数可以是正则也可以是一个函数 // 是正则的话,当请求的URL匹配的时候,就会对这个请求执行对应得 CacheHandler registerRoute...png|gif|jpg|jpeg|svg|ico|ttf|woff|woff2)$/, // 这里暂时用 handler 代替 cacheHandler ) // 是函数的话,会传入一些请求相关的参数...后续还可以使用SSR方案进行进一步的优化,不过这个方案需要项目整体重构,一半会儿搞不出来。

    1.6K41

    hexo博客添加到桌面应用程序

    必须在作用域范围内; 如果 start_url 为相对地址,其根路径受 scope 所影响; 如果 start_url 为绝对地址(以 / 开头),则该地址将永远以 / 作为根地址; start_url...如果需要填写多个尺寸,则使用空格进行间隔,如”48x48 96x96 128x128” type {string} 图标的 mime 类型,非必填项,该字段可让浏览器快速忽略掉不支持的图标类型 在博客\...'); if (workbox) { workbox.setConfig({ modulePathPrefix: 'https://g.alicdn.com/kg/workbox/3.3.0/...$'), workbox.strategies.networkFirst()); workbox.routing.registerRoute(new RegExp('.*.html'), workbox.strategies.networkFirst...如你想要添加所有的格式,按照以上格式复制即可 将上述图片放到对应的目录下,并修改 _config.yml 和 manifest.json 与之对应 推荐图片大小转换网站:iloveimg 最后输入以下内容即可 # 清理缓存

    73430

    WorkBox 之底层逻辑Service Worker

    缓存和运行时缓存 Service worker与Cache实例之间的交互涉及两个不同的缓存概念: 「预缓存」(Precaching caching) 「运行时缓存」(Runtime caching)...运行时缓存是指在运行时从网络请求资源应用缓存策略。这种类型的缓存非常有用,因为它保证了用户已经访问过的页面和资源的离线访问。...此构造函数接受一个参数,即我们在第1步中创建的JavaScript文件的URL。...「在预缓存,应考虑删除特别大的资产,并依赖于运行时缓存来捕捉它们」,而不是进行假设用户都需要这些资源,从而全部都进行缓存。 6....当这种情况发生,浏览器将从缓存中驱逐它认为过时或值得牺牲以腾出空间以容纳新资产的项目。 处理存储配额应该是Service Worker开发的一部分,而 Workbox 使这个过程比自行管理更简单。

    39220

    ServiceWorker工作机制与生命周期:资源缓存与协作通信处理

    如果注册成功,service worker就会被下载到客户端并尝试安装或激活(见下文),这将作用于整个域内用户可访问的URL,或者其特定子集。...// Perform install steps     //首先 event.waitUntil 你可以理解为 new Promise,     //它接受的实际参数只能是一个 promise,因为,...Workbox 由于直接写原生的sw.js,比较繁琐和复杂,所以一些工具就出现了,而workbox是其中的佼佼者,由google团队推出。...workbox缓存策略  workbox.strategies,有如下属性:staleWhileRevalidate networkFirst cacheFirst networkOnly cacheOnly...workbox原理 通过Proxy按需依赖 熟悉了workbox后会得知,它是有很多个子模块的,各个子模块再通过用到的时候按需importScript到线程中。

    1.5K20

    为 vue 项目添加 PWA 支持

    或指定文件夹中的)文件添加到 precache manifest 中,或从中排除,支持使用正则表达式 自动跳过 Service Worker 的等待阶段 添加离线 Google Analytics 支持 运行时缓存...runtimeCaching,Workbox 的强大所在,阅读这些内容会使你更好地了解如何配置以及具体能做什么: Workbox Routing Workbox Strategies Workbox Cache...Expiration iconPaths 该设置项可以自定义在页面中添加的一些图标的或中指定的文件路径 public/icons中有安装插件生成的默认图标 其有一个坑点...例如弹出一个对话框来提示用户点击某个按钮以刷新页面 该方法对仅 precache 应用是没有任何影响的 但由于 skipWaiting 后新 SW 会立即接管页面,因此如果你更新了 SW 在处理 runtimeCaching 之类的运行时操作的行为而用户又没有刷新页面...type:'SKIP_WAITING'}消息,并在新 SW 控制页面后立即刷新 复制1 2 3 4 5 6 7 8 9 10 11 12updated(reg) { // 当控制页面的 SW 改变刷新

    3.7K00

    Butterfly主题的PWA实现方案

    装配了PWA以后,用户可以将网站作为WEB APP安装到自己的设备上,以原生应用般的方式浏览博客,同时借助PWA的缓存机制,能够更快速的浏览。本文讨论的是使用两种方案实现PWA。...使用hexo-offline-popup以后,如果还开启了pjax,可能遇到页面URL带着长长的后缀。形似index.html?...安装必要插件 既然要使用gulp配合workbox实现PWA,自然少不了安装这两个插件。...butterfly_v3.6.0取消了缓存配置,转为完全默认,需要将{cache:theme.fragment_cache}改为{cache: true}: 将之前生成的图标包移入相应的目录,例如我是/...运行gulp指令时报错: 这个众说纷纭,一个是说插件安装不对,一个是说和nvm版本不兼容,通过github action使用CI安装并不会报这个错,推测是nvm版本不兼容。

    1.6K20

    Webpack5 新特性业务落地实战

    最后的两点介绍比较抽象,但整体可以看出,其实升级 Webpack5 对于开发者而言,能够感知到的就是构建的效率和运行时的性能都有着明显的提升,包括一些新特性可能给我们带来的更舒适的“coding 姿势...在 Webpack5 之后,默认就为我们集成了一种自带的缓存能力(对 module 和 chunks 进行缓存[14])。通过如下配置,即可在二次构建提速。...如设置 name: 'production-cache' 生成的缓存存放位置如下。 ?...PS:如果你直接通过调用 Webpack compiler 实例的 run 方法执行定制化构建操作,你可能会遇到构建缓存最终没有生成缓存文件的情况,在搜索了 Webpack 的相关 Issues 后我们发现...没有配置的初次和二次构建: ? 配置了缓存的初次构建和二次构建: ? ?

    1.4K30
    领券