JavaScript 服务工作线程可视化 什么是服务工作线程?关于服务工作线程需要考虑的一些事实 服务工作线程如何工作?概览 服务工作线程生命周期 最常见用例 Web 推送 更复杂的用例 亲自动手,精通你的技能 返回响应 完整代码

2025-05-24

JavaScript 服务工作者可视化

什么是 Service Worker?

关于服务人员需要考虑的事实

Service Worker 如何工作?概览

Service Worker 生命周期

最常见的用例

Web 推送

更复杂的用例

亲自动手,精通技艺

返回响应

完整代码

最初发表于Medium

想必大家或多或少都听说过 JavaScript 生态系统中的新成员——Service Worker。它可是现代 Web 开发中不可或缺的一部分。近年来,它们备受瞩目,这都得益于渐进式 Web 应用(PWA)的流行。

当我听到这个消息时,我最大的疑问是:“我们应该什么时候使用服务工作者?我们可以在哪些场景或环境下应用它们?”

在本文中,我们将看到一些实际案例,它们能够很好地服务于我们的最终用户。最终的目标是让他们真正满意,对吧?

话虽如此,在开始讨论实际案例之前,我认为最好先了解一下服务工作者的一些基础知识。对于新手来说,这是一个很好的总结,为了向他们致敬,我们将其整理成一个表格。

什么是 Service Worker?

Service Worker 本质上是浏览器在后台运行的脚本。请记住,它完全独立于它正在处理或服务的网页。

实际上,它们充当着代理服务器的角色,位于 Web 应用程序、浏览器和网络之间。还有什么疑问吗?希望没有。

服务工作者使 Web 应用程序能够像原生应用程序一样运行。

关于服务人员需要考虑的事实

  • 它们不能直接访问 DOM。它使用一种通过 postMessage 接口发送消息来响应的机制。
  • 不使用时终止。这意味着它们是事件驱动的。
  • 利用 ES6 承诺。
  • 由于它们功能强大,因此只需通过 HTTPS 即可使用,除非在本地主机上无需 HTTPS 即可使用。但是,如果您上传到远程服务器,则需要安装 HTTPS。

Service Worker 如何工作?概览

基本上,它们赋予应用程序拦截网络请求、缓存这些请求的能力,从而提升应用程序的性能。这种性能提升是因为你之前已经缓存了所有内容。

然而,“一图胜千言”,所以,为了更好地理解,让我们看下一张图片。

Service Worker 的工作原理 — 作者:blarz<br>

Service Worker 生命周期

正如我之前提到的,Service Worker 的工作方式独立于它所控制的页面。如果你想在你的 Web 应用中安装 Service Worker,首先要做的就是注册它。

完成后,启动 Service Worker 安装的浏览器将进入后台。为了更好地理解,我们来看下图。

Service Worker 生命周期工作 — 作者:blarz<br>

最常见的用例

现在我们对服务工作者的工作方式有了更好的了解,现在是时候了解它们的最常见用途了。

缓存支持

Service Worker 可以在一系列缓存策略下使用。关于这些缓存策略,有以下用例:

  • 仅缓存——您拥有永远不会改变的静态内容。

  • 网络或缓存——如果您想向用户显示最新的内容,唯一的条件/愿望就是更快地加载它。

  • 缓存和更新——您希望立即显示内容,并且不介意暂时与服务器不同步。

  • 缓存、更新和刷新——您希望在后台检索新内容时立即显示内容。一旦新内容可用,您希望以某种方式显示它。

Web 推送

Web 推送允许应用程序发送推送通知,然后在收到通知后带回内容。

  • 推送和检索有效载荷——您希望在内容到达时将其传送并带回。

  • 推送有效载荷——您不仅希望传递文本,还希望传递不同类型的有效载荷,从而使您的信息更加丰富。

  • 推送丰富内容 — 您希望显示图像、振动以及任何其他可以丰富您想要传递的信息的内容。

  • 推送客户端——您希望根据应用程序的状态显示不同的通知。

更复杂的用例

API 分析

我有一个 Web 应用。因此,我想添加跟踪其使用情况的功能,并使用同步 API 定期上传收集到的数据。

负载均衡器

您希望根据服务器可用性动态选择最佳内容提供商。在这种情况下,您需要一个 Service Worker 来拦截对资源的请求,并根据其可用性选择最合适的内容提供商。

我强烈建议您查看ServiceWorke.rs上有关如何使用服务工作者的完整集合、实际示例以及更多内容。

亲自动手,精通技艺

正如我常说的:“跳入水中,看看你是否会游泳。”阅读这篇文章很有趣,但真正的乐趣始于你弄脏手指的时候。

注册 Service Worker

如果我们快速回顾一下上面描述 Service Worker 生命周期的图片,首先要做的就是安装它。为此,需要注册它的步骤。

注册 Service Worker

现在,您可以访问 Chrome://inspect/#service-workers 检查所有服务工作线程是否正在运行(Chrome 检查图像)。

Chrome 检查器

另外,如果您打开 Chrome 开发者工具并转到“应用程序”选项卡->“服务工作者”,您将看到有关服务工作者状态的所有信息。

Chrome 检查器

安装

我们要做的最基本的例子是缓存所有文件。此外,您还可以定义要缓存的文件。因此,我们可以在安装步骤中处理这个问题。

安装 Service Worker

在上面的代码中,我们所做的是:

  1. 为我们的缓存定义一个名称(mullinstack.com-v1)。
  2. 定义要缓存的文件。我们定义了一个数组。
  3. 在安装 eventListener 内部,我们告诉浏览器等待承诺得到解决,并且在该函数内部,我们打开了一个将以 mullinstack.com-v1 名称存储的缓存。
  4. 最后,我们将之前定义的所有文件添加到缓存中。

删除所有不需要的缓存

现在,我们需要删除所有不需要的旧版本缓存。

删除所有不需要的缓存

返回响应

如果我们无法返回缓存内容,以上这些都无关紧要。所以,你可能想返回一个缓存的响应,对吧?

这在我们现在要创建的 fetch 事件中是可能的。

从缓存内容返回响应<br>

完整代码

感谢阅读!如果觉得这个故事有趣,请分享给你的朋友,我会非常感激。

欢迎通过我的博客Medium与我联系

文章来源:https://dev.to/blarzhernandez/javascript-service-workers-visualized-1683
PREV
继续编码!——给初级开发人员的一封信 初学者阶段 此阶段的力量和价值 您希望建立成功的开发人员职业生涯 自我激励、自律和专注 最后,一些建议
NEXT
2020 年的 5 个前端预测和趋势 这些预测和趋势的来源 微前端 - 微服务的扩展 前端框架 - React.js 最受欢迎的 Web 组件 ES 模块和动态导入 JavaScript 将势不可挡 帮助您准备的资源 2020 年值得阅读的前端书籍