chrome extension 系列:第六章——background

顾名思义,background即是后台的意思。在chrome extension中,除了我们可以直接接触到的popup和side panel以外,还有后台运行的环境,一些较为敏感的能力只有在background中才能使用。

在chrome extension manifest v3中,background的运行环境是Extension Service WorkerService Worker 的概念在web开发中我们已经接触过,简单来说它就是一个在背后默默工作的助手,独立于网页,使开发者能够在没有网页或用户交互的情况下运行特定的功能。

Service Worker 有几个特点:无法访问 DOM,发起网络请求需要使用 fetch() API等。

生命周期

扩展 Service Worker 在需要时加载,并在其进入休眠状态时取消加载。一般来说,如果扩展程序在 30 秒后没有被使用,Chrome 就会将其暂停。

安装

当 extension 被加载时,会发生安装,按顺序发生三个事件。

  1. Web Service Worker 的 install 事件
  2. chrome.runtime.onInstalled
  3. Web Service Worker 的 active 事件

空闲和关停

通常,Chrome 会在满足以下条件之一时终止 Service Worker:

  • 无操作 30 秒后。收到事件或调用扩展程序 API 会重置此计时器。
  • 单个请求(例如事件或 API 调用)的处理用时超过 5 分钟。
  • fetch() 响应的传递时间超过 30 秒时。

事件和对扩展程序 API 的调用会重置这些计时器,如果 Service Worker 已休眠,传入事件将使它们恢复。不过,您应该将 Service Worker 设计为能够灵活应对意外终止。

实时更新

上面说到,Service Worker 在不需要时会卸载。我们有在 worker 中使用 websocket 进行消息通信的需求时,是需要 worker 一直运行的。Chrome 会采用一系列启发法来确定扩展程序是否"正在使用",其中之一是处于活动状态的 WebSocket 连接。Chrome 不会暂停在过去 30 秒内发送或接收 WebSocket 消息的扩展程序。

因此如果我们需要保持 worker 一直运行,我们可以使用心跳包的方式,以小于30秒的周期发送心跳包,来使 WebSocket 连接保持,同时令 worker 不被暂停。

事件

扩展程序 Service Worker 同时支持标准 Service Worker 事件和扩展程序 API 中的许多事件。

Service Worker 中的事件处理脚本需要在全局范围内声明,这意味着它们应该位于脚本的顶层,而不应嵌套在函数内。

相关推荐
AlienZHOU8 小时前
AI Coding 时代下,我的技术面试实践分享
前端·后端·面试
Captaincc11 小时前
AI用量v0.1.11更新发布 新增 jusage doctor 诊断指令 托盘展示token 和余额 新增 AutoClaw 支持
前端·后端·vibecoding
计算机魔术师12 小时前
德国Wiki被黑后两周,OpenAI终于把模型失控的账本摊开了
前端
kyriewen13 小时前
我让 AI 当面试官面了我一轮:第 3 个追问我就卡住了(附 10 道追问清单)
前端·面试·ai编程
IT_陈寒13 小时前
Python的GIL把我坑惨了,多线程跑得比单线程还慢
前端·人工智能·后端
前端snow13 小时前
ai agent --- 多agent框架之图编排引擎-langgraph
前端
竹林81813 小时前
OmniPic Studio v3.2.1 核心技术架构与全平台发版解析文档
前端·浏览器
JamesZhang8007813 小时前
页面内存只涨不跌? 一次泄漏排查, 牵出 WeakMap 的诞生
前端
Z小明13 小时前
第 6 章 组件进阶
前端·vue.js
江华森13 小时前
HTTP请求的完整过程详解:从DNS解析到TCP挥手的微秒级实战分析
前端