1.4 KiB
1.4 KiB
Change: 使用 postmessage-duplex 重构 Service Worker 通信层
Why
当前 SW 与应用层通信采用原生 postMessage + 广播模式,存在以下问题:
- 多标签页任务重复:同时打开多个页面时,任务可能被重复添加
- 无请求-响应模式:需要手动用 RxJS filter + timeout 实现
- 广播无差异化:所有客户端都收到相同消息,无法区分请求来源
- 无连接就绪保障:SW 未就绪时发送的消息可能丢失
What Changes
- BREAKING 重构
SWTaskQueueClient使用postmessage-duplex库 - BREAKING 重构 SW 端通信逻辑使用
ServiceWorkerChannel - 任务创建改用
call方法(请求-响应模式),SW 返回创建结果 - 任务状态更新使用
subscribe订阅模式 - 移除手动实现的 RxJS 超时/过滤逻辑
Impact
- Affected specs: 无(新增通信层规范)
- Affected code:
packages/drawnix/src/services/sw-client/client.tsapps/web/src/sw/task-queue/queue.tsapps/web/src/sw/task-queue/types.tsapps/web/src/sw/index.ts
Benefits
- 请求-响应模式:任务创建等操作可等待 SW 确认结果
- 消息队列:连接就绪前消息自动缓存
- 内置超时:无需手动实现
- 多页面隔离:每个页面有独立通道,避免重复处理
- 类型安全:完整的 TypeScript 类型定义