Workbox中一个常见的模式是用StaleWhileRevalidate策略缓存Google资源。
workbox.routing.registerRoute(
/.*(?:googleapis)\.com/,
new workbox.strategies.StaleWhileRevalidate({
cacheName: 'googleapis',
})
);
我想知道为什么上面的例子中使用的正则表达式会匹配googleapis.com上任何子资源的请求,尽管正则表达式本身只匹配URI的域、子域和顶级域部分。因此,Workbox似乎对完全匹配和部分匹配都会启动处理程序。这样做对吗?
正在使用的底层类是 RegExpRoute
,而且有 扩充文件 解释一些行为。
你是对的,当使用 RegExpRoute
的情况下,该路由将触发 RegExp
匹配的URL。如果 RegExp
不包括 ^
和 $
或其他任何可以将其固定在字符串的开始或结束的东西,那么部分匹配也会触发它。
说实话,这有点让人困惑,前段时间的时候 我们翻阅了文件 并改变了几乎所有的路由示例,使用了 matchCallback
句法,而不是对 url
或 request
参数。
粗略等同于您上面分享的内容,(可以说是)更清晰的语法是
workbox.routing.registerRoute(
({url}) => url.origin.endsWith('googleapis.com'),
new workbox.strategies.StaleWhileRevalidate({
cacheName: 'googleapis',
})
);