`

Web Worker

 
阅读更多

 

<!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("dem.js");
    }
  w.onmessage = function (event) {
    document.getElementById("result").innerHTML=event.data;
  };
}
else
{
document.getElementById("result").innerHTML="Sorry, your browser does not support Web Workers...";
}
}

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

</body>
</html>
 
var i=0;

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

timedCount();

 一、概述

A web worker is a JavaScript running in the background, without affecting the performance of the page.

What is a Web Worker?

When executing scripts in an HTML page, the page becomes unresponsive until the script is finished.

A web worker is a JavaScript that runs in the background, independently of other scripts, without affecting the performance of the page. You can continue to 

do whatever you want: clicking, selecting things, etc., while the web worker runs in the background.

二、使用方法及步骤

(1)
检查浏览器是否支持
Check Web Worker Support

Before creating a web worker, check whether the user's browser supports it:

if(typeof(Worker)!=="undefined")
  {
  // Yes! Web worker support!
  // Some code.....
  }
else
  {
  // Sorry! No Web Worker support..
  }

(2)
Create a Web Worker File

Now, let's create our web worker in an external JavaScript.

Here, we create a script that counts. The script is stored in the "demo_workers.js" file:

var i=0;

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

timedCount();
The important part of the code above is the postMessage() method - which is used to posts a message back to the HTML page.

Note: Normally web workers are not used for such simple scripts, but for more CPU intensive tasks.

(3)
Create a Web Worker Object

Now that we have the web worker file, we need to call it from an HTML page.

The following lines checks if the worker already exists, if not - it creates a new web worker object and runs the code in "demo_workers.js":

if(typeof(w)=="undefined")
  {
  w=new Worker("demo_workers.js");
  }
Then we can send and receive messages from the web worker.

Add an "onmessage" event listener to the web worker.

w.onmessage=function(event){
document.getElementById("result").innerHTML=event.data;
};
When the web worker posts a message, the code within the event listener is executed. The data from the web worker is stored in event.data.


(4)
Terminate a Web Worker

When a web worker object is created, it will continue to listen for messages (even after the external script is finished) until it is terminated.

To terminate a web worker, and free browser/computer resources, use the terminate() method:

w.terminate();

三、注意事项
Web Workers and the DOM

Since web workers are in external files, they do not have access to the following JavaScript objects:

The window object
The document object
The parent object
web worker must run in container
分享到:
评论

相关推荐

    Web Worker版调用Face-Api.js

    "Web Worker版调用Face-Api.js"是一个解决方案,它利用Web Worker技术来封装并异步执行Face-API.js库,从而避免阻塞主线程,提供高性能的用户体验。以下是关于这个主题的详细知识点: 1. **Web Worker**:Web ...

    向Webpack添加原生WebWorker捆绑支持

    然而,默认情况下,Webpack 不直接支持原生Web Worker的捆绑和编译。Web Worker是HTML5引入的一个特性,用于在后台线程中执行脚本,以实现多线程处理,避免阻塞主线程。由于Web Worker的特殊性,其加载和运行机制与...

    nextjs-worker-example:这是Webpack使用Next.js加载Web Worker的示例

    NextJS Worker示例这是使Web Worker在NextJS项目中运行的示例。 要使用worker-loader将Web Worker加载到NextJS站点上,并允许在其worker上运行babel等webpack加载器,必须覆盖构建输出路径。 感谢。 // next.config....

    HTML5 WebWorker

    Web Worker使得复杂的、计算密集型的任务可以在不阻塞用户界面的情况下运行,显著提升了Web应用的性能体验。下面我们将深入探讨Web Worker的基本概念、工作原理以及如何在实际项目中应用。 一、Web Worker基础 1. ...

    Web Worker用法汇总

    Web Worker的出现就是为了缓解这一问题,它允许开发者创建额外的线程来处理计算密集型或长时间运行的任务,而不影响主线程上的用户交互。 Web Worker的使用主要包括以下几个步骤: 1. **创建Worker**: 使用`new ...

    vue3中使用Web Worker多线程(TS风味版)

    用于《vue3中使用Web Worker多线程》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_42063951/article/details/125300644

    vue3中使用Web Worker多线程(JS原味版)

    用于《vue3中使用Web Worker多线程》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_42063951/article/details/125300644

    web worker处理js长任务卡死,含引入第三方库

    完整测试用例,含数据和第三方库 用于《web worker处理js长任务卡死,含引入第三方库》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_43718790/article/details/135197630

    H5 web Worker

    Web Worker的出现就是为了解决这个问题,它允许开发者创建后台线程来处理耗时的任务,而不会影响主线程,从而提高网页应用的性能和用户体验。 **Web Worker的基本概念和结构** 1. **Worker的创建**:开发者可以...

    将独立函数类移动到webworker的一种非常简单的方法

    在JavaScript开发中,Web Worker是一种可以提升应用性能的技术,它允许我们在后台线程中执行耗时的计算任务,不阻塞用户界面。标题提到的"将独立函数类移动到Web Worker"是解决JavaScript单线程限制的有效手段。下面...

    react-reactworkerimage一个React组件实现通过webworker加载图像

    `react-worker-image`是一个专为解决这个问题而设计的库,它利用Web Worker技术在后台线程中加载图像,从而避免阻塞主线程,提高应用性能。本文将详细介绍这个React组件的工作原理、使用方法及其在图片编辑场景中的...

    基于各种HTML5新特性、WebSocket、WebWorker实现的视频播放弹幕互动网页.zip

    弹幕功能通常依赖WebSocket实现,用户发送的弹幕信息通过WebSocket实时推送到服务器,然后广播到其他连接的客户端,所有这些都是在WebWorker的辅助下,确保主线程(即用户界面)的流畅运行。 总的来说,这个项目...

    Viajs实现在一个WebWorker中使用DOM

    创建一个新的Web Worker,导入`via.js`库,然后在Worker中,你可以使用`via`对象来执行DOM操作。例如,你可以创建一个新的元素,设置属性,甚至添加事件监听器。所有这些操作都会被转换为消息传递到主线程,由主线程...

    Web-Worker在webgl中的应用(百度地图技术团队)1

    【Web Worker 在 WebGL 中的应用】 Web Worker 是一种在 Web 应用中实现后台线程处理的技术,用于解决 JavaScript 在浏览器环境中单线程运行的问题。它为浏览器提供了额外的 JavaScript 运行时环境,使得计算密集型...

    使用HTML5 Web Worker提高Web的应用性能研究.pdf

    5. Web Worker的实现方法:可以使用JavaScript创建Web Worker对象,并将JavaScript代码传递给Web Worker对象,然后Web Worker对象将执行JavaScript代码。 6. Web Worker的调试方法:可以使用浏览器的调试工具来调试...

    学习threejs,实现配合使用WebWorker,动漫模型

    学习threejs,实现配合使用WebWorker,动漫模型

    node-webworker, NodeJS的WebWorkers实现.zip

    node-webworker, NodeJS的WebWorkers实现 node-webworkers 是网络工作者API的一个实现,用于 node.js 。请参见这里的设计文档 。示例主源var sys = require('sys');var Worker = require('web

    react-便于与WebWorker通信的React组件

    利用Render Props模式获得最大的灵活性以及易于使用的新Context API。 只需为Web Worker指定公共URL,您就可以访问它发送的任何消息或错误,以及postMessage处理程序。

    在WebWorker中运行一个模块

    Web Worker 是一种在浏览器环境中运行后台脚本的技术,它允许开发者在主线程之外创建独立的线程,处理计算密集型任务,从而不阻塞用户界面。这个“在Web Worker中运行一个模块”的主题,主要是关于如何利用...

Global site tag (gtag.js) - Google Analytics