我正在使用 Next JS 进行电子商务。我正在尝试提高页面加载速度,该网站加载了大量 JS 文件,因为它拥有大量第三方供应商(并且无法删除)。我打算用 Service Worker 缓存一些静态资产。
我将使用使用 workbox-webpack-plugin 的库next-offline。这是我打算使用的配置:
workboxOpts: {
swDest: '../public/service-worker.js',
maximumFileSizeToCacheInBytes: 20000000,
runtimeCaching: [
{
urlPattern: /https:\/\/fonts\.googleapis\.com\/icon[\w\-_\/\.\:\?\=\&\+]*/,
handler: 'CacheFirst',
options: {
cacheName: 'google-fonts',
expiration: {
maxEntries: 10,
maxAgeSeconds: 30 * 24 * 60 * 60, // 1 month
},
},
},
{
urlPattern: /[\w\-_\/\.:]*\.(jpeg|png|jpg|ico|svg)\??.*/,
handler: 'CacheFirst',
options: {
cacheName: 'cache-img',
expiration: {
maxEntries: 15,
maxAgeSeconds: 2 * 24 * 60 * 60, // 2 days
},
},
},
{
urlPattern: /^((?!monetate).)*\.(js)$/,
handler: 'StaleWhileRevalidate',
},
{
urlPattern: /\/(browse.*|catalogsearch.*)$/,
handler: 'StaleWhileRevalidate',
},
],
},
所以,我的问题如下:
- 你觉得这个配置有风险吗?你会改变一些东西吗?我的意思是,过去我在 Service Worker 缓存 JS 文件时遇到了几个问题,我必须为每个文件设置一个版本才能使其正常工作。但是,现在看来workbox 解决了这个问题。
- 我应该为 Stale while revalidation 策略设置 maxAge 吗?每次用户重新加载页面时,我都想重新验证数据。但是这里它说它将使用缓存而不重新验证,直到 maxAge 时间完成。如果我没有在工作箱设置中设置 maxAge 会怎样?
我正在 Vercel 部署(在测试环境中)上对此进行测试,它似乎工作正常,我正在考虑将其移至生产环境。
谢谢,