导航
×
   ❮   
HTML CSS JavaScript PHP Go Sass W3C Colors ECMS

JS 教程

JS 简介 JS 如何使用 JS 输出 JS 语法 JS 语句 JS 注释 JS 变量 JS 运算符 JS 条件语句 JS 循环 JS 字符串 JS 数字 JS 函数 JS 对象 JS 日期 JS 数组 JS 类型化数组 JS 集合 JS Map 映射 JS Math JS 正则表达式 JS 数据类型 JS 错误 JS 事件 JS 编程 JS 关键字参考 JS 保留关键字参考 JS 运算符参考 JS 运算符优先级 JS UTF-8 字符 JS UTF-8 符号 JS UTF-8 表情符号 JS 版本

JS 高级教程

JS 对象 JS 函数 JS 类 JS 迭代 JS Promises JS 模块 JS HTML DOM JS Windows JS Web API JS AJAX JS JSON JS jQuery JS 图形

JS 实例

JS 实例 JS HTML DOM JS HTML 输入 JS HTML 对象 JS HTML 事件 JS Browser JS 测验

Web Workers API


Web Worker 是一个在后台运行的 JavaScript 代码,不会影响页面的性能。


什么是 Web Worker?

在 HTML 页面中执行脚本时,页面会暂时无响应,直到脚本执行完毕。

Web Worker 是一个在后台独立运行的 JavaScript 代码,它不会影响页面的性能。您可以继续执行任何操作:点击、选择等等,Web Worker 会在后台运行。

浏览器支持

表格中的数字表示首个完全支持 Web Workers 的浏览器版本:

Chrome 4 IE 10 Firefox 3.5 Safari 4 Opera 11.5
2010年1月 2012年9月 2009年6月 2009年6月 2011年6月

Web Workers 示例

以下示例创建了一个简单的 Web Worker,用于在后台进行数字计数:

示例

Count numbers:

亲自试一试 »

检查 Web Worker 支持

创建 Web Worker 之前,请检查用户的浏览器是否支持它:

if (typeof(Worker) !== "undefined") {
  // Yes! Web worker support!
  // Some code.....
} else {
  // Sorry! No Web Worker support..
}

创建 Web Worker 文件

现在,让我们在外部 JavaScript 中创建 Web Worker。

这里,我们创建一个计数脚本。该脚本存储在"demo_workers.js"文件中:

let i = 0;

function timedCount(){
 i ++;
 postMessage(i);
  setTimeout("timedCount()",500);
}

timedCount();

以上代码的关键部分是postMessage()方法,它用于向HTML页面发送消息。

注意: 通常情况下,Web Worker 不用于此类简单的脚本,而是用于 CPU 密集型任务。


创建 Web Worker 对象

现在我们有了 Web Worker 文件,需要从 HTML 页面调用它。

以下代码检查 Web Worker 是否已存在,如果不存在,则创建一个新的 Web Worker 对象并运行"demo_workers.js"中的代码:

if (typeof(w) == "undefined") {
  w = new Worker("demo_workers.js");
}

然后我们就可以通过 Web Worker 发送和接收消息了。

为 Web Worker 添加一个"onMessage"事件监听器。

w.onmessage = function(event){
  document.getElementById("result").innerHTML = event.data;
};

当 Web Worker 发送消息时,事件监听器中的代码将被执行。Web Worker 返回的数据存储在 event.data 中。


终止 Web Worker

Web Worker 对象创建后,会持续监听消息(即使外部脚本已完成),直到被终止。

要终止 Web Worker 并释放浏览器/计算机资源,请使用 terminate() 方法:

w.terminate();

重用 Web Worker

如果将 worker 变量设置为 undefined,则在它终止后,您可以重用代码:

w = undefined;

完整的 Web Worker 示例代码

我们已经在 .js 文件中看到了 Worker 代码。以下是 HTML 页面的代码:

示例

<!DOCTYPE html>
<html>
<body>

<p>Count numbers:<output id="result"></output></p>
<button onclick="startWorker()">Start Worker</button>
<button onclick="stopWorker()">Stop Worker</button>

<script>
let w;

function startWorker(){
  if (typeof(w) == "undefined") {
    w = new Worker("demo_workers.js");
  }
  w.onmessage = function(event) {
    document.getElementById("result").innerHTML = event.data;
  };
}

function stopWorker(){
  w.terminate();
  w = undefined;
}
</script>

</body>
</html>
亲自试一试 »

Web Workers 和 DOM

由于 Web Workers 位于外部文件中,因此它们无法访问以下 JavaScript 对象:

  • window 对象
  • document 对象
  • parent 对象

Copyright ©2020-2026 freew3c.com All Rights Reserved 提供的内容仅用于学习和测试,不保证内容的正确性。