首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得ServiceWorker缓存中元素的大小和/或数量?

如何获得ServiceWorker缓存中元素的大小和/或数量?
EN

Stack Overflow用户
提问于 2015-02-05 05:49:08
回答 2查看 2.7K关注 0票数 9

ServiceWorker是Chrome中一种新的api。它允许您做的许多事情之一是拦截网络请求并使用缓存的版本进行响应。我正在实现一个“让这个离线”按钮,它动态地将东西添加到缓存中。我想向用户报告我使用了多少空间,以及我在缓存中放置了多少条目。

是否可以查询缓存以获取缓存中的项数?我能报告缓存在里面的东西的大小吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-05 08:28:14

显然,您可以使用cacheName.keys().length (如受过刺激的训练中所示),也可以循环单个条目并计算总权重。

票数 3
EN

Stack Overflow用户

发布于 2017-04-12 14:50:39

您可以执行如下操作来查找缓存的大致大小:

代码语言:javascript
复制
// returns approximate size of a single cache (in bytes)
function cacheSize(c) {
  return c.keys().then(a => {
    return Promise.all(
      a.map(req => c.match(req).then(res => res.clone().blob().then(b => b.size)))
    ).then(a => a.reduce((acc, n) => acc + n, 0));
  });
}

// returns approximate size of all caches (in bytes)
function cachesSize() {
  return caches.keys().then(a => {
    return Promise.all(
      a.map(n => caches.open(n).then(c => cacheSize(c)))
    ).then(a => a.reduce((acc, n) => acc + n, 0));
  });
}

有几个注意事项:

  • 只计算响应体的大小。(这可以部分修复。)
  • 计算非不透明的反应。(这个问题无法解决。)
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28337027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档