为什么网络优先策略比没有 Service Worker 慢?

Mor*_*eng 3 service-worker workbox

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

当应用 Service Worker 时,Workbox 的网络优先策略比没有 Service Worker 网络慢约 30 毫秒。然后,我们尝试跳过workbox并手动实施网络优先策略,速度慢了大约20ms。

我的猜测是,如果 Service Worker 启动,所有请求都必须由 JavaScript 代码处理。JavaScript 代码的执行导致网络速度变慢。

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

因此,根据我的理解,尽管 Service Worker 为我们提供了更多对缓存的控制,但并不能保证缓存速度更快,对吗?

Jef*_*ick 6

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

如果您要对抗缓存,那么拥有一个 Service Worker 应该会提供与在 HTTP 浏览器缓存实际运行后查找内容大致相同的性能,但需要首先考虑相同的启动成本。

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

您可以在“高性能 Service Worker 加载”中阅读有关这些权衡和最佳实践的更多信息。