最简明可靠的降级方式是直接检测 typeof Worker !== 'undefined',存在则用 Web Worker,否则同步执行;需保证接口一致、避免 DOM 依赖,并建议增加 ping 验证和按需创建。

直接检测 Worker 构造函数是否存在,存在则使用,不存在则同步执行逻辑——这是最简明、最可靠的降级方式。不依赖报错捕获,也不靠特性模拟,核心是“有就用,没有就退到主线程”。
检测 Worker 支持性必须用 typeof 判断
浏览器不支持 Web Worker 时,window.Worker 是 undefined,不是 null 或 false。所以检测必须写成:
-
if (typeof Worker !== 'undefined')✅ 正确(推荐) -
if (Worker)❌ 错误(在不支持环境会报 ReferenceError) -
try { new Worker(...) } catch❌ 不推荐(异常开销大,且部分 WebView 可能静默失败)
降级路径要保持接口一致
主线程里同步执行的函数,输入输出应和 Worker 版本完全一样,避免业务层做分支判断。例如:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- Worker 版本:
worker.postMessage({data: [1,2,3]})→ 返回处理后的数组 - 降级版本:
syncProcess([1,2,3])→ 同样返回处理后的数组 - 调用方无需关心底层是异步还是同步,只管传参、监听结果
常见降级场景示例
比如一个图像灰度转换任务:
立即学习“Java免费学习笔记(深入)”;
- 支持 Worker:创建
new Worker('/gray-worker.js'),发图数据,监听onmessage - 不支持时:直接调用
grayFilter(imageData)函数,在主线程同步计算 - 注意:降级函数不能访问 DOM(如
canvas.getContext),否则在无 DOM 环境(如某些 SSR 或测试环境)会出错;应只处理纯数据
避免踩坑的细节
有些环境看似支持 Worker,实则受限(如 iOS Safari 的某些 WebView、微信内置浏览器旧版本),建议补充轻量级运行时验证:
- 新建 Worker 后,可发送一个简单 ping 消息,等待
onmessage回应;超时(如 500ms)即视为不可用,自动切回同步 - 不要在模块顶层初始化 Worker,应在实际需要时按需创建,便于统一控制降级逻辑
- 若使用封装库(如 Operative),它内部已做了支持性检测和 fallback,可直接依赖其返回的 Promise,无需额外判断

















