无需登录 数据私有 本地保存

Web Worker 代码生成器 - 快速创建独立线程脚本

20
0
0
0

Web Worker 代码生成器

快速生成主线程与 Worker 线程代码,开箱即用,支持多种实用场景模板

🧮
密集计算
斐波那契 / 质数
📊
数据处理
排序 / 过滤 / 映射
⏱️
定时任务
周期执行后台任务
🔄
API 轮询
后台定时请求数据
🖼️
图片处理
Canvas / 像素操作
自定义模板
自由定制 Worker
配置: 任务完成自动终止 包含错误处理 Transferable 传输 进度反馈
主线程代码 — main.js
Worker 线程代码 — worker.js
使用 Blob URL 在浏览器中实时测试 Worker
点击「在线测试运行」查看 Worker 执行结果...
常见问题 & 知识点

Web Worker 是浏览器提供的多线程解决方案,允许在后台独立线程中运行 JavaScript 代码,不阻塞主线程(UI 线程)。它解决了执行大量计算或耗时操作时页面卡顿、无响应的问题。Worker 线程与主线程通过 postMessage 进行通信,数据传输采用结构化克隆,也可以使用 Transferable 对象实现零拷贝传输。

Worker 线程中无法访问 DOM(document、window 对象不可用),不能操作页面元素。可用的 API 包括:navigatorfetchsetTimeout/setIntervalWebSocketIndexedDBpostMessage 等。可以通过 importScripts() 导入外部脚本。注意 Worker 受同源策略限制。

Transferable 对象(如 ArrayBufferMessagePortImageBitmap)可以通过零拷贝的方式在主线程和 Worker 之间传输。使用时在 postMessage(data, [transferableObject]) 的第二个参数中指定。传输后,原线程将失去对该对象的所有权,大幅提升大数据传输性能。本工具支持在配置中开启 Transferable 传输模式。

有两种方式终止 Worker:
1. 主线程调用 worker.terminate() — 立即终止,Worker 中的代码不会有机会清理。
2. Worker 内部调用 self.close() — Worker 主动关闭自己,更优雅。
推荐在任务完成后使用 self.close(),避免资源泄漏。本工具生成的代码默认包含自动终止选项。

Dedicated Worker(专用 Worker):仅能被创建它的页面使用,一个页面可以创建多个。最常用,API 简单直接。
Shared Worker(共享 Worker):可被多个同源页面(不同 tab、iframe)共享,通过 port 进行通信,适用于多页面协同场景。本工具主要生成 Dedicated Worker 代码,更符合大多数使用场景。

如果不想单独维护 worker.js 文件,可以使用 Blob URL 创建内联 Worker:
const blob = new Blob([workerCodeString], {type: 'application/javascript'});
const worker = new Worker(URL.createObjectURL(blob));
这种方式适合单个文件项目或需要动态生成 Worker 代码的场景。本工具的在线测试运行功能就是基于 Blob URL 实现的。

在 Chrome DevTools 中,Worker 线程会出现在 Sources 面板的 Threads 列表中。可以像调试主线程一样设置断点、查看变量。也可以使用 console.log() 输出到控制台(在 Worker 中 console 可用)。对于使用 Blob URL 创建的 Worker,调试时需要在 Sources 中找到对应的 blob 来源。

1. 按需创建:仅在需要时创建 Worker,任务完成后及时终止。
2. 批量传输:将多个数据合并后一次性发送,减少通信次数。
3. 使用 Transferable:传输大块二进制数据时使用零拷贝。
4. 错误处理:始终监听 onerror 事件,防止 Worker 静默失败。
5. 超时机制:对可能长时间运行的任务设置超时。
6. 避免过度使用:简单操作在主线程完成即可,创建 Worker 本身也有开销。