javascript - 使用服务人员的 Firefox 中可兑现文件的限制?
问题描述
我希望有人可以帮助我。
在我的服务工作者的安装阶段,我尝试缓存 100 个文件,但 Firefox 只缓存其中的 50 或 60 个,每次我安装服务工作者时都会缓存不同的文件。
在监控缓存时,我没有收到任何错误,但安装完成后,一半的文件不在缓存中。这适用于 MacOS Catalina 和 Windows 10 上的 Firefox 75。在 Safari、Edge、Chrome 中一切正常。
我正在缓存的测试文件每个 3kb 并且使用“存储”和“估计”我看到有足够的可用空间。
这是我的服务人员代码。我尝试使用 cache.addAll 和 forEach 来监控缓存,但结果是一样的:大约一半的文件丢失了。
const CACHE_NAME = 'limit-test-cache-v1';
const urlsToCache = [
'/serviceworker-limit/testdata/testdata1.pdf',
'/serviceworker-limit/testdata/testdata2.pdf',
'/serviceworker-limit/testdata/testdata3.pdf',
'/serviceworker-limit/testdata/testdata4.pdf',
...
'/serviceworker-limit/testdata/testdata97.pdf',
'/serviceworker-limit/testdata/testdata98.pdf',
'/serviceworker-limit/testdata/testdata99.pdf',
'/serviceworker-limit/testdata/testdata100.pdf'
];
const cacheSize = urlsToCache.length;
let counter = 0;
self.addEventListener('install', event => {
event.waitUntil(
/*
caches.open(CACHE_NAME).then(cache => {
cache.addAll(urlsToCache);
})
*/
caches.open(CACHE_NAME).then(cache => {
console.log('Opened cache');
urlsToCache.forEach(url => {
const req = new Request(url);
cache.add(req).then(() => {
counter++;
console.log(url + ' has been cached. Message ' + counter + ' of total: ' + cacheSize);
}).catch(err => {
counter++;
console.log('Error while caching' + url + '. Error ' + err);
});
});
})
);
});
由于没有错误,我基本上不知道要搜索什么。这是某种预期的行为吗?我的代码错了吗?这是一个 Firefox 错误吗?扁平地球人到底是对的吗?如果有人可以给我一些指示,将不胜感激。
解决方案
如果有人感兴趣或遇到相同的问题,则此问题是由两个问题的组合引起的:
- 在服务人员状态从“激活”更改为“激活”后,我立即检查了缓存大小。如MDN所述(见第一个注释),这可能为时过早,因为已获取文件的内容主体可能仍在流式传输且缓存尚未准备好。我希望缓存大小会计算数据库条目,但显然情况并非如此。
- Firefox 开发工具中的缓存存储视图仅显示有限数量的缓存文件。像这样的注释:“这里只显示前 60 个缓存文件”有助于防止误解这种情况,但最终这里应该有某种分页。也许这个问题在 Firefox devEdition 的应用程序面板中得到了解决。
推荐阅读
- python - 在类的 __new__ 中调用 self 变量
- python - 让敌人跟着你
- android - BottomSheetDialog 在栏下应用
- debugging - 调试 C Wireshark 解剖器
- php - Woocommerce 三重变体产品价格未显示 SVI 变体插件
- python - 如何将 python AudioSegment 提取转换为 ffmpeg 命令?
- sql - 通过使用来自单个列的不同总和进行分组
- java - 尝试解密时 CryptoKit 身份验证失败
- linux - 列出软盘映像文件的内容而不在 Linux 中挂载
- python-3.x - 如何在不再次写入整行的情况下修改我的参数?