WebWorker

WebWorker出现之前,JavaScript只能单线程运行,网络IO等耗时操作通过异步回调的方式完成,这是由JavaScript最开始的用途决定的,如DOM操作等,多线程会带来复杂的同步问题。

然而,没有多线程支持实际上很多代码难以编写,比如一个长时间运行的后台逻辑。现在,WebWorker可以创建一个子线程,在后台执行耗时操作。

代码例子

下面例子代码中,我们使用WebWorker创建一个子线程,并通过子线程向主线程发送消息:

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>web worker demo</title>
</head>
<body>
    <span id="count">0</span>
    <script>
        var w = new Worker("worker.js");
        w.onmessage = function(event)
        {
            document.querySelector("#count").innerHTML = event.data;
        }
    </script>
</body>
</html>

worker.js

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

如上述代码,直接new Worker()就能创建一个WebWorker对象,参数需要指定子线程JavaScript代码的url。主线程使用onmessage回调接收消息并处理,子线程使用postMessage()向主线程发送消息。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap