HTML HTML5 PHP Mysql Linux 缓存技术 工具 资讯 读书 其他

HTML5 Web Workers


web worker是后台运行的JavaScript, 不会影响网页的性能.


什么是Web Worker?

在HTML页面执行脚本时, 页面在脚本执行完之前会变得迟钝.

web worker是在后台运行的JavaScript, 独立于其他脚本,不会影响页面的性能. 当web worker在后台运行,你可以执行: 点击, 选择等.


浏览器支持

Internet Explorer Firefox Opera Google Chrome Safari

IE10, 火狐, 谷歌, 苹果浏览器和欧鹏浏览器都支持web worker.


HTML5 Web Workers的例子

下面创建了个简单的web worker计数的例子:

例子

计数:




亲自试一试 »


检测Web Worker支持

创建web worker之前,检测用户的浏览器是否支持:

if(typeof(Worker) !== "undefined")
  {
  // 支持Web worker!
  // 相关代码.....
  }
else
  {
  // Sorry! 不支持Web Worker..
  }


创建Web Worker文件

创建额外的web worker文件.

这里, 我们创建一个计数脚本. 保存为"demo_workers.js":

var i = 0;

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

timedCount();

上面代码的重要部分是 postMessage() 方法 - 用于返回HTML页面.

注意: 通常web workers 不用于这样简单的脚本,而是用于CPU密集型的任务.


创建Web Worker对象

现在我们已经有web worker文件了, 我们需要在HTML页面中调用它.

下面代码检查worker是否已经存在, 如果不存在 - 会创建一个新的web worker对象,并且在代码中运行"demo_workers.js":

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

然后我们可以发送和接收web worker信息.

添加"onmessage"事件监听web worker.

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的全部例子

我们已经查看了.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>
<br><br>

<script>
var w;

function startWorker()
{
if(typeof(Worker) !== "undefined")
{
  if(typeof(w) == "undefined")
    {
    w = new Worker("demo_workers.js");
    }
  w.onmessage = function (event){
    document.getElementById("result").innerHTML = event.data;
  };
}
else
{
document.getElementById("result").innerHTML="对不起, 您的浏览器不支持Web Workers...";
}
}

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

</body>
</html>

亲自试一试 »


Web Workers 和 DOM

由于web workers是外部文件, 它们不能访问如下JavaScript对象:

  • The window object
  • The document object
  • The parent object

To Top