上一篇: HTML5 应用程序缓存

下一篇: HTML5 SSE

HTML5 Web Workers

创建 Web Worker 文件

首先,需要创建一个 JavaScript 文件,其中包含要在 Web Worker 中运行的代码。这个文件被称为工作线程文件,在本教程中我们将其命名为 worker.js。例如,以下是一个简单的 Web Worker 文件,用于计算数字的平方:

                self.addEventListener("message", function (event) {
                const input = event.data;
                const result = input * input;
                self.postMessage(result);
                });
                

在这个示例中,我们监听 "message" 事件。当从主线程接收到消息时,我们获取传递的数据(数字),计算其平方,并通过 postMessage 方法将结果发送回主线程。

创建 Web Worker 实例

接下来,在主要的 JavaScript 文件中,我们需要创建一个 Web Worker 实例,并指定刚才创建的 worker.js 文件。例如:

                const worker = new Worker("worker.js");
                

发送消息给 Web Worker

现在,您可以通过 postMessage() 方法向 Web Worker 发送消息。例如,为了计算数字 5 的平方,可以这样做:

                worker.postMessage(5);
                

从 Web Worker 接收消息

要处理从 Web Worker 发送回来的消息,需要在主线程中监听 "message" 事件。例如:

                worker.addEventListener("message", function (event) {
                console.log("Square of the number is: ", event.data);
                });
                

在这个示例中,当我们接收到来自 Web Worker 的消息时,我们会在控制台上打印出数字的平方。

关闭 Web Worker

在某些情况下,您可能希望在完成任务后关闭 Web Worker。为此,可以调用 terminate() 方法。例如:

                >worker.terminate();
                

请注意,一旦调用了 terminate(),Web Worker 将立即停止执行,且无法重新启动。如果需要再次使用该 Web Worker,则必须创建一个新实例。

以下是完整的代码示例:

                <!-- index.html -->
                <!DOCTYPE html>
                <html>
                <head>
                <script src="main.js"></script>
                </head>
                <body>
                </body>
                </html>
                
                // main.js
                const worker = new Worker("worker.js");

                worker.postMessage(5);

                worker.addEventListener("message", function (event) {
                console.log("Square of the number is: ", event.data);
                });

                worker.terminate();
                
                // worker.js
                self.addEventListener("message", function (event) {
                const input = event.data;
                const result = input * input;
                self.postMessage(result);
                });
                

通过使用 HTML5 Web Workers 功能,您可以将耗时的、计算密集型任务移到后台线程中,从而避免阻塞用户界面,并提高应用程序的性能。请务必了解这些概念,以便更好地利用 Web Workers 的优点。