如何处理 HTML5 Web Workers 中的错误?

html5web developmentfront end technology更新于 2024/5/23 3:56:17

假设您希望浏览器在点击某个单词时执行网页上的复杂计算。这需要时间。因此,网页将无响应,直到操作完成。您需要一个能够静默执行所需操作且不影响用户界面的程序。那么,如何解决这个问题呢?

在本文中,我们将讨论如何解决此类问题。

解决方案是 Web Workers。但什么是 Web Workers?让我们来看看。

什么是 Web Workers?

Web Workers 是一个由 JavaScript 代码组成的对象,它在网页后台运行,即在另一个与工作窗口不同的全局上下文中运行,独立于所有其他脚本。工作线程不会中断网页的运行,例如点击、滚动等操作。

Web Workers 创建后,它会向其包含的 JavaScript 代码发送消息。具体来说,它将消息发送到由 JavaScript 代码分配的事件处理程序,反之亦然。Web Worker 和主文档之间使用 postMessage() 方法和 onmessage 属性通过消息进行数据交换。

Web Worker 也可以使用 XMLHttpRequest 与 Web 服务器通信

Web Worker 有两种类型 -

  • 专用 Web Worker - 专用 Worker 只能由调用它的一个脚本访问。

  • 共享 Web Worker - 共享 Worker 可以被多个脚本访问。

Web Worker 的工作原理

让我们看看如何创建一个运行 JavaScript 代码的简单 Web Worker -

<script> var worker = new Worker (‘ demo.js ‘) ; </script>
  • postMessage() 是一种用于从 Worker 向主文档发送消息的方法。

语法

worker.postMessage();

参数

它包含要传递给主文档的数据。

示例

const webWorker = new Worker (‘ demo.js’ ); webWorker.postMessage ( ‘ This is an example ‘ );
  • onMessage 是消息事件的一个属性,在通过事件源接收到消息后触发。也可以使用 addEventListener() 方法执行此操作。

语法

worker.onmessage = function (event) {script}
Or
Worker.addEventListener ("message", script);

Example

<script> const webWorker = new Worker ( ‘demo.js ‘); webWorker.onmessage = function (event) => { console.log ( ‘ this is an example’ ); }; webWorker.addEventListener ( "message", function(e) { document.getElementById ( " demo ").innerhtml; }; </script>

如何终止 Web Worker?

如果您想停止正在执行代码的 Web Worker,可以使用 terminate() 方法停止 Worker 线程。您也可以使用 close() 方法。

terminate() 方法用于从主文档停止 Worker,而 close() 方法用于从 Worker 自身作用域停止 Worker。

语法

webWorker.terminate();
webWorker.close();

示例

const webWorker = new Worker (‘ demo.js’); webWorker.onmessage = function (event) => { document.getElementById ( ‘ demo’ ); }; webWorker.terminate();

调试错误

在 JavaScript 中,当 Web Worker 运行过程中发生错误时,会使用 error 事件进行调试。

onerror 处理程序有 3 个主要属性。它们如下:

  • message - 仅在发生错误时发出通知

  • lineon - 通知 Worker 中导致错误的行号

  • filename - 通知 Worker 中发生错误的文件的名称。

语法

addEventListener ( ‘error’ , (event) => {});
       Or
Onerror = ( event) => {} ;

示例

<script> const webWorker = new Worker ( ‘demo’ ); webWorker.postMessage (‘ this is an example of error handling ‘); webWorker.addEventListener ( "message" , function(event){ alert ( "Completed" + event.data + "of the operation"); }; webWorker.onerror = (event) => { console.log (‘ Error identified with your worker ‘ ) ; }; </script>

让我们通过另一个例子来理解整个过程 -

假设你想求 10000 的阶乘,并且你想使用 Web Worker。

首先创建一个名为 demo.js 的外部 js 文件

const number = 10000; const fact = 1; for ( let i= 1; i<= number; i++){ fact = fact * I; } console.log(fact);

现在编写 HTML 代码 -

<html> <title> Web Workers </title> <script> const webWorker = new Worker ( ‘demo.js’ ); webWorker.onmessage = function (event) { document.getElementById( "solution" ).innerhtml = event.data; }; webWorker.onerror = event => { console.log( " error occurred while doing the operation "); }; </script> <body> <div id = "solution" ></div> </body> </html>

此处,

event.data 元素包含由 Web Worker 发送的消息。

注意 − Web Worker 执行的代码始终存储在单独的 JavaScript 文件中。

结论

Web Worker 是 HTML5 的一项新功能。虽然它在 Web 浏览器上执行繁重计算时非常有用,但由于仍处于开发阶段,因此可能会出现错误。因此,最好在网页代码中添加错误处理功能,以便在出现此类错误时收到通知,从而进行调试操作。


相关文章