Service Worker 与 PWA

共 32 题
#

1. PWA 与原生应用的能力差距对比

A PWA 与原生应用的能力完全一致
B PWA 在分发、系统能力与后台执行上仍与原生有差距,但通过 SW、Manifest、Push 等标准持续缩小差距 ✓ 正确答案
C PWA 无法离线运行
D PWA 不需要安装即可使用全部原生能力
#

2. Cache API/IndexedDB/OPFS 在 PWA 离线存储的工程取舍

A Cache API 适合存业务结构化数据
B Cache API 存请求-响应资源对、IndexedDB 存结构化数据、OPFS 存大文件,三者共享配额并需清理策略 ✓ 正确答案
C OPFS 只能存小字符串
D 三者配额互相独立
#

3. Service Worker 的 updateViaCache 与浏览器 SW 缓存层级

A SW 脚本更新永远不会被 HTTP 缓存拦截
B updateViaCache 控制 SW 脚本是否走 HTTP 缓存,更新检查默认 24h 一次,资源缓存由 SW 策略控制,形成多层交互 ✓ 正确答案
C updateViaCache: 'all' 每次强制网络
D 新 SW 下载即自动接管页面
#

4. Service Worker 生命周期(install、activate、fetch、message、sync、push)

A SW 生命周期分安装期(install 预缓存、activate 接管清理)与运行期(fetch/message/sync/push 各司其职) ✓ 正确答案
B install 事件在每次页面刷新时触发
C activate 用于拦截网络请求
D sync 事件在页面可见时触发
#

5. navigator.storage.persist() 与存储配额驱逐策略,持久化存储申请与浏览器决策机制

A persist() 可以无限提升存储配额
B 所有浏览器都会批准 persist 请求
C persist() 申请免驱逐的持久化存储,浏览器按用户参与度决策,需配合 estimate 观测与清理降级 ✓ 正确答案
D 持久化存储仍会被自动驱逐
#

6. PWA Manifest(含 id/scope/start_url)

A Manifest 定义应用元数据,start_url 为启动入口、scope 限定管辖边界、id 决定安装唯一标识 ✓ 正确答案
B start_url 可以任意指定到其他站点
C scope 与 start_url 没有关系
D 图标只有 512 一种规格即可安装
#

7. beforeinstallprompt 事件与自定义安装按钮

A beforeinstallprompt 触发后必须立即调用 prompt()
B preventDefault 可暂停默认安装 UI,保存事件后在用户手势下调用 prompt(),iOS 需降级引导 ✓ 正确答案
C appinstalled 事件与安装无关
D prompt() 可以多次调用
#

8. Background Sync 的 SyncManager.register 与 IndexedDB 的协作取舍

A sync 事件在离线时立即触发
B 周期同步可靠且随时可用
C Background Sync 在联网后触发重放,离线数据先入 IndexedDB 队列,需幂等设计并区分一次性与周期同步 ✓ 正确答案
D 同步任务不需要失败重试
#

9. iOS Safari 的 PWA 安装限制与 apple-touch-icon 的兼容性

A iOS 通过"添加到主屏幕"安装,apple-touch-icon 决定主屏图标,Web Push 需 16.4+ 且安装后才可用 ✓ 正确答案
B iOS Safari 支持 beforeinstallprompt
C iOS 直接使用 manifest icons 作为主屏图标
D iOS PWA 无法独立窗口运行
#

10. Notifications API 在现代 PWA 与 Native App 的工程取舍

A PWA 通知链路为权限→订阅→服务端推送→SW push 事件展示,与原生相比受浏览器策略限制但成本更低 ✓ 正确答案
B PWA 推送不需要用户授权
C 通知权限可以强制获得
D pushsubscriptionchange 不需要处理
#

11. Workbox(Google 的 SW 库)在缓存策略预设与路由生成的工程价值

A Workbox 只能手写 fetch 逻辑
B Workbox 提供策略预设、路由绑定、预缓存清单与插件治理,并通过构建插件自动注入 SW ✓ 正确答案
C 预缓存不需要版本号管理
D CacheFirst 适合所有请求
#

12. Service Worker 更新策略(skipWaiting、clients.claim、UI 提示)

A 新 SW 下载后立即接管页面
B clients.claim 只影响安装流程
C 新 SW 默认等待旧版页面关闭,skipWaiting+clients.claim 实现静默接管,提示更新由用户确认后切换 ✓ 正确答案
D 更新策略与缓存版本无关
#

13. Cache API 中 response.clone() 与流式缓存的限制,流式响应的缓存方案与 workaround

A clone() 对流式响应不增加缓冲
B Cache.put 不支持流
C 响应体只能消费一次,clone 会缓冲流,流式缓存需用流 tee 分叉同时供页面与缓存写入 ✓ 正确答案
D 流式缓存没有兼容问题
#

14. Service Worker 缓存与 HTTP 磁盘缓存的优先级关系,fetch 事件拦截与浏览器缓存层级的交互

A HTTP 缓存优先于 SW fetch 事件
B SW 缓存与 HTTP 缓存互不影响
C navigation preload 会禁用缓存
D SW fetch 在 HTTP 缓存命中前介入,可传 cache 选项控制是否复用 HTTP 缓存,两层缓存需版本化治理 ✓ 正确答案
#

15. BroadcastChannel/clients.claim 在多 SW 客户端通信的工程价值

A BroadcastChannel 只能在同一页面内通信
B SW 无法向页面主动发消息
C clients.claim 不影响已加载页面
D BroadcastChannel 支持同源页面/Worker 间广播,clients.claim 让新 SW 立即接管,二者配合治理多标签一致性 ✓ 正确答案
#

16. workbox-webpack-plugin/vite-plugin-pwa 在构建产物注入 SW 的工程价值

A 构建插件生成的是静态手写 SW
B GenerateSW 支持任意精细定制
C 构建插件自动生成含哈希清单的 SW 并注入注册代码,清单与产物绑定保证缓存版本一致 ✓ 正确答案
D SW 与构建产物无需关联
#

17. Background Fetch API(window.BackgroundFetchManager)在大文件下载的应用

A Background Fetch 由浏览器接管大文件下载,系统级可见进度且页面关闭仍继续,支持度有限需降级方案 ✓ 正确答案
B Background Fetch 需要页面保持打开
C Background Fetch 只适合小请求
D 下载进度无法感知
#

18. Service Worker 调试与 Chrome DevTools Application 面板

A Application 面板可控制 SW 生命周期、查看缓存存储与校验 Manifest,配合 Network Offline 验证离线行为 ✓ 正确答案
B Application 面板只能查看缓存不能控制
C SW 脚本无法断点调试
D Update on reload 会禁用缓存
#

19. SW 更新灰度与多版本客户端共存问题,skipWaiting 策略与客户端版本兼容性管理

A SW 灰度由客户端自行随机决定
B SW 更新灰度靠服务端按条件下发,资源用版本命名空间隔离,契约变化的版本需提示刷新而非强制接管 ✓ 正确答案
C 多版本共存不会产生兼容问题
D 静态资源无需版本化
#

20. Web App Manifest 的 name、short_name、icons 在安装体验的工程价值

A name 用于完整场景、short_name 用于受限空间,icons 需多尺寸与 maskable 安全区适配系统裁剪 ✓ 正确答案
B short_name 用于应用商店展示
C icons 只需要一张图即可
D maskable 图标没有特殊要求
#

21. Web App Manifest 的 theme_color 与 background_color 在浏览器 UI 适配的现代应用

A background_color 影响地址栏颜色
B theme_color 影响窗口与地址栏着色、background_color 决定启动屏背景,二者需与页面 CSS 保持一致 ✓ 正确答案
C theme_color 不支持深色模式分支
D 启动屏颜色可以随意设置
#

22. Web App Manifest 的 id(替代 start_url)在 PWA 唯一标识的工程实践

A id 决定每次启动的页面
B 不声明 id 会无法安装
C id 与域名无关
D id 是安装唯一标识(默认由 start_url 解析),显式声明稳定 id 可防止路径变化导致重复安装 ✓ 正确答案
#

23. Web App Manifest 的 categories、screenshots 在应用商店展示的现代应用

A categories 用于商店归类、screenshots 展示界面截图(含 form_factor),商店上架需按平台规格准备素材 ✓ 正确答案
B categories 可以自定义任意值
C screenshots 只能用占位图
D 商店发布不需要隐私政策
#

24. Web App Manifest 的 shortcuts 在长按图标的快捷操作的工程价值

A shortcuts 的 url 可以指向任意站点
B 不配置 shortcuts 会影响安装
C shortcuts 声明长按图标的快捷菜单项,点击按 url 启动并路由直达,需处理登录态与平台差异 ✓ 正确答案
D 快捷操作无法携带参数
#

25. Web App Manifest 的 file_handlers 与 launch_handler 在文件关联的工程应用

A file_handlers 让 PWA 成为系统默认应用
B 所有浏览器都支持 file_handlers
C 文件打开无需处理来源安全
D file_handlers 声明可处理文件类型、launch_handler 控制启动模式,通过 launchQueue 接收文件句柄并需安全校验 ✓ 正确答案
#

26. Web App Manifest 的 protocol_handlers(web+something:)的现代应用

A protocol_handlers 可以注册任意协议名
B 注册后无需用户确认
C protocol_handlers 注册 web+ 协议并在 url 模板中用 %s 接收参数,需用户授权且参数必须校验 ✓ 正确答案
D 协议链接参数可以无条件信任
#

27. Web App Manifest 的 share_target 接收分享数据的工程实践

A share_target 只支持纯文本
B 接收的文件有永久权限
C share_target 声明接收系统分享(POST/GET),页面解析 text/url/files 处理,并与 Web Share 形成闭环 ✓ 正确答案
D 所有浏览器都支持 share_target
#

28. Web App Manifest 的 edge_side_panel 与 tabbed 的现代应用

A tabbed 模式与 standalone 完全相同
B tabbed 模式不支持多页面
C edge_side_panel 以侧边栏常驻形态运行、tabbed 提供窗口内标签页,均为新兴特性需特性检测与降级 ✓ 正确答案
D 侧边栏形态无需适配窄布局
#

29. PWA 安装后的离线启动与冷启动在不同设备的工程应用

A 离线启动无需预缓存导航入口
B iOS 与 Android 启动行为完全一致
C 冷启动只与硬件有关
D 离线启动依赖 SW 预缓存导航与资源,冷启动优化首屏加载,不同设备(iOS/Android/桌面)启动行为需分别验证 ✓ 正确答案
#

30. Web App Manifest 的 orientation 在锁屏方向的工程价值

A orientation 声明应用方向偏好,用户系统方向锁优先级更高,运行时可用 screen.orientation.lock 按需锁定 ✓ 正确答案
B orientation 可以强制覆盖用户系统锁
C orientation 影响桌面端
D 方向变化无需响应式适配
#

31. PWA 在 Microsoft Store、PWA Builder 的发布工程实践

A PWA Builder 自动提交到应用商店
B MSIX 包只能手动更新
C 商店发布不需要隐私政策
D PWA Builder 分析并打包 PWA(MSIX 等)供应用商店提交,发布需满足可安装性与商店审核要求 ✓ 正确答案
#

32. Web App Manifest 在 PWA 检测(Lighthouse、PWA Builder)

A Lighthouse 审计可安装性/离线/启动体验,PWA Builder 评估发布就绪度,两者可纳入 CI 防回归 ✓ 正确答案
B Lighthouse 只检查性能
C 检测通过即代表真实体验完美
D 检测工具无法给出修复建议