【问题标题】:Why network-first strategy is slower than no service worker?为什么网络优先策略比没有服务工作者慢?
【发布时间】:2018-11-29 00:54:55
【问题描述】:

在使用 Workbox 对 Service Worker 的性能进行基准测试时,我们发现了一个有趣的现象。

当应用 service worker 时,workbox 的 network-first 策略比没有 service worker 网络慢大约 30 毫秒。然后,我们尝试跳过workbox,手动实现network-first策略,慢了20ms左右。

我的猜测是,如果 service worker 启动,所有请求都必须由 javascript 代码处理。正是 JavaScript 代码的执行使网络变慢了。

然后,我检查了缓存优先策略,结果发现从缓存存储中获取内容比在没有 service worker 的情况下从磁盘缓存(http 缓存)中获取内容要慢。

所以,据我了解,即使 Service Worker 为我们提供了对缓存的更多控制,也不能保证缓存速度更快,对吧?

【问题讨论】:

    标签: service-worker workbox


    【解决方案1】:

    启动以前未运行的 Service Worker 会产生相关成本。这可能是几十毫秒的数量级,具体取决于设备。一旦该服务工作人员启动,如果它不处理您的导航请求(这几乎可以肯定是服务工作人员会收到的第一个请求)通过缓存,那么您最终的性能可能会比如果根本没有服务人员在场。

    如果您要使用缓存,那么有一个服务工作者在场应该提供大致相同的性能与在 HTTP 浏览器缓存实际运行后查找内容,但需要花费相同的启动成本首先考虑。

    使用 Service Worker 的真正性能优势在于以缓存优先的方式处理 HTML 的导航请求,这是传统上使用 HTTP 缓存无法做到的。

    您可以阅读更多关于这些权衡和最佳实践的信息 “High-performance service worker loading”。

    【讨论】:

      猜你喜欢
      • 2022-08-03
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 2019-10-29
      • 2022-09-23
      相关资源
      最近更新 更多