# 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 检测工具无法给出修复建议