Logo
Section 1 / 4

服务工作者概览

服务工作者是所有渐进式网络应用(PWA)的基础,能够拦截网络请求,并为这些请求实现相应的缓存策略。

导入

服务工作者概览

服务工作者是所有渐进式网络应用(PWA)的基础,能够拦截网络请求,并为这些请求实现相应的缓存策略。


定义

服务工作线程(Service Worker)是一种特殊的 Web Worker,但它们之间存在细微差别:

服务工作线程 是一个作为我们网页应用与网络之间代理的 JavaScript 文件。

Web Worker 是具有通用用途的脚本,通常用于将繁重的任务从主线程中移出,并在独立的上下文中运行。

简而言之,服务工作线程(简称 SW)可以拦截 HTTP 请求,并根据所采用的缓存策略,从网络或本地缓存中提供响应(更多细节请参见下一章)。


我们来描述其主要特性:

安全性

服务工作线程仅在安全连接(HTTPS)下运行。这是一个安全的设计决策,因为如果允许非安全连接,应用程序很容易遭受“中间人攻击”。试想一下,如果任何人都能替换你的服务工作线程为被篡改的版本,并能够监听所有网络请求……你肯定不希望这种情况发生!


另一方面,`localhost` 被视为安全环境,可用于部署前的应用测试。 > ⚠️ **注意!** 关于 Angular:我们无法使用 `ng serve` 命令来本地构建和运行应用,因为它不支持服务工作线程。 > 在这种情况下,必须使用任意你喜欢的 HTTP 服务器,例如 [http-server](https://www.npmjs.com/package/http-server) 包,或 Chrome 扩展程序 [Web Server](https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb?hl=en)。

无法直接操作 DOM

服务工作线程不能直接访问 DOM。不过,它们可以通过 postMessage 接口与作用域内的页面进行通信。这些页面随后可以操作 DOM,从而实现间接访问。


非阻塞

与 Web Worker 类似,服务工作线程在独立于应用主线程的线程上运行。因此,“非阻塞”意味着即使执行大量计算任务或服务工作线程崩溃,也不会对网页应用的性能造成任何影响。
也正是由于其能够在后台持续运行的能力,我们才能在用户未主动访问应用时,依然向他们推送网页通知。


服务工作线程的兼容性

你可以通过以下链接查看浏览器对服务工作线程的支持情况:

Course Image


Course Image

在设备上安装 PWA

生命周期