Workbox如何决定一条路由是否匹配一个请求?

问题描述 投票:0回答:1

Workbox中一个常见的模式是用StaleWhileRevalidate策略缓存Google资源。

workbox.routing.registerRoute(
        /.*(?:googleapis)\.com/,
        new workbox.strategies.StaleWhileRevalidate({
            cacheName: 'googleapis',
        })
);

我想知道为什么上面的例子中使用的正则表达式会匹配googleapis.com上任何子资源的请求,尽管正则表达式本身只匹配URI的域、子域和顶级域部分。因此,Workbox似乎对完全匹配和部分匹配都会启动处理程序。这样做对吗?

workbox
1个回答
0
投票

正在使用的底层类是 RegExpRoute,而且有 扩充文件 解释一些行为。

你是对的,当使用 RegExpRoute的情况下,该路由将触发 RegExp 匹配的URL。如果 RegExp 不包括 ^$ 或其他任何可以将其固定在字符串的开始或结束的东西,那么部分匹配也会触发它。

说实话,这有点让人困惑,前段时间的时候 我们翻阅了文件 并改变了几乎所有的路由示例,使用了 matchCallback 句法,而不是对 urlrequest 参数。

粗略等同于您上面分享的内容,(可以说是)更清晰的语法是

workbox.routing.registerRoute(
  ({url}) => url.origin.endsWith('googleapis.com'),
  new workbox.strategies.StaleWhileRevalidate({
    cacheName: 'googleapis',
  })
);
© www.soinside.com 2019 - 2024. All rights reserved.