首页 > web前端 > js教程 > 正文

JavaScript如何创建Web Workers?

幻影之瞳
发布: 2025-12-20 09:45:38
原创
176人浏览过
JavaScript中创建Web Workers需通过Worker构造函数加载独立JS文件,主线程与Worker通过postMessage/onmessage通信,不可访问DOM或共享变量;Worker脚本须为外部文件,支持模块化(type: 'module'),但受限于同源策略、无DOM访问、需HTTP环境等。

javascript如何创建web workers?

JavaScript中创建Web Workers需要通过Worker构造函数加载一个独立的JS脚本文件,主线程与Worker之间通过postMessage()onmessage通信,不能直接访问DOM或共享变量。

准备一个独立的Worker脚本文件

Worker必须运行在单独的JS文件中(不能是内联字符串或匿名函数),例如新建worker.js

// worker.js
self.onmessage = function(e) {
  const data = e.data;
  // 执行耗时计算(如大数组处理、加密等)
  const result = data * 2;
  self.postMessage(result);
};
登录后复制

在主线程中实例化Worker并通信

使用new Worker('路径')启动,然后用postMessage()发送数据,监听onmessage接收结果:

// 主页面JS
const worker = new Worker('worker.js');
<p>worker.postMessage(42); // 发送数字</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/c1c2c2ed740f" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">Java免费学习笔记(深入)</a>”;</p>
                    <div class="aritcle_card">
                        <a class="aritcle_card_img" href="/xiazai/code/10673">
                            <img src="https://img.php.cn/upload/webcode/000/000/006/176321340261401.jpg" alt="Destoon B2B网站">
                        </a>
                        <div class="aritcle_card_info">
                            <a href="/xiazai/code/10673">Destoon B2B网站</a>
                            <p>Destoon B2B网站管理系统是一套完善的B2B(电子商务)行业门户解决方案。系统基于PHP+MySQL开发,采用B/S架构,模板与程序分离,源码开放。模型化的开发思路,可扩展或删除任何功能;创新的缓存技术与数据库设计,可负载千万级别数据容量及访问。 系统特性1、跨平台。支持Linux/Unix/Windows服务器,支持Apache/IIS/Zeus等2、跨浏览器。基于最新Web标准构建,在</p>
                            <div class="">
                                <img src="/static/images/card_xiazai.png" alt="Destoon B2B网站">
                                <span>2</span>
                            </div>
                        </div>
                        <a href="/xiazai/code/10673" class="aritcle_card_btn">
                            <span>查看详情</span>
                            <img src="/static/images/cardxiayige-3.png" alt="Destoon B2B网站">
                        </a>
                    </div>
                <p>worker.onmessage = function(e) {
console.log('Worker返回:', e.data); // 输出 84
};</p><p>// 可选:监听错误或终止Worker
worker.onerror = function(e) {
console.error('Worker出错:', e.message);
};
// worker.terminate(); // 手动终止</p>
登录后复制

注意关键限制和常见问题

Web Workers有明确的运行边界,避开典型误区才能稳定使用:

  • 无法访问windowdocumentparent等全局对象,只能用self代替globalThis
  • 不支持alertfetch(但现代Worker支持)、localStorage(可用indexedDB
  • 路径必须是同源的,且不能是file://协议(需HTTP服务器环境)
  • 若Worker脚本加载失败,会触发worker.onerror,但不会抛出控制台错误,容易被忽略

进阶:使用模块化Worker(ES Module Worker)

现代浏览器支持以模块方式加载Worker,更利于代码组织:

// 启动时指定type: 'module'
const worker = new Worker('worker.mjs', { type: 'module' });
<p>// worker.mjs中可使用import
import { heavyCalc } from './utils.mjs';
self.onmessage = (e) => {
self.postMessage(heavyCalc(e.data));
};</p>
登录后复制

注意:type: 'module'需服务端支持MIME类型,且所有导入路径必须带扩展名(如./utils.mjs)。

以上就是JavaScript如何创建Web Workers?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号