Web工作器API

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

什么是 Web Worker?

在 HTML 页面中执行脚本时,页面在脚本完成之前是无响应的。

Web Worker 是在后台运行的 JavaScript,独立于其他脚本,不会影响页面的性能。你可以继续做任何你想做的事情:点击、选取内容等,同时 web worker 在后台运行。

Ìtọ́jú àwọn ìṣáájúwọlé

Àwọn àkójọpọ̀ àwọn àwọn àwọn ìṣáájúwọlé tí ó ti jẹ́ kí àwọn Web Workers jẹ́ kí ó ṣe é yọrí ló ti wá nínú táwọn àwọn ìṣáájúwọlé yìí:

Chrome IE Firefox Safari Opera
Chrome 4 IE 10 Firefox 3.5 Safari 4 Opera 11.5
Oṣù Ẹjọ́ 1, Ọdún 2010 Oṣù Ẹjọ́ 9, Ọdún 2012 Oṣù Ẹjọ́ 6, Ọdún 2009 Oṣù Ẹjọ́ 6, Ọdún 2009 Oṣù Ẹjọ́ 6, Ọdún 2011

Ìtọ́jú Web Worker

Àpẹẹrẹ kan tí ó kọ́ àwọn Web Worker àbádòfin kan, tí ó ń gùn ọ̀rọ̀ ní ẹ̀yìn:

Hanyar

Àpèsè:

亲自试一试

Yíyàwó Web Worker ìṣáájúwọlé

Kí o bá kọ Web Worker, o gbọdọ̀ yàá wí pé àwọn ìwé-ìbàjẹ́-ayárabíàṣá àwọn àwọn ìṣáájúwọlé kan lè gba ìtọ́jú rẹ̀:

if (typeof(Worker) !== "undefined") {
  // Yes! Web worker ìtọ́jú!
  // Àwọn ìwé kódù...
} else {
  // Sorí! Kò gà àwọn àwọn Web Worker ìtọ́jú...
}

创建 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 页面调用它。

以下代码行检查 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;

Siffar kammala Web Worker

Aɗa ɗauka ɗan shirin Worker a .js fayil. Sannan na daya HTML na fayil:

Hanyar

<!DOCTYPE html>
<html>
<body>
<p>Saɗu ɗimbi: <output id="result"></output></p>
<button onclick="startWorker()">Bata Iya</button>




亲自试一试

Web Worker 和 DOM

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

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