`
blueion
  • 浏览: 40300 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

HTML5 WebWorker

 
阅读更多

Web Workers现在还只是一个w3c的提案,可能随时都会有更改,但是Firefox, Safari和chrome已经将其加入到自己产品中了。Web Workers为浏览器提供了真正的异步计算的能力,web worker里的代码是执行在OS级别上的线程中的。但是目前并不能指望web worker能强大到什么程度,比如不支持同步机制,执行的时候还是js代码... 尽管如此,web worker还是可以解决诸如计算量庞大导致的UI焊住的问题。

使用web workers#

Mozilla有个不错的介绍,另外w3c的提案本身就带有示例代码,这些都可以参考。下面用具体的代码来展示如何使用web Workers。

1.在html中创建web worker对象。

var worker = new Worker('worker.js');

2.绑定onmessage事件,只有实现了worker的onmessage事件才可以收到worker的通知。

worker.onmessage = function(event){
    alert
(event.data);
};

3.向worker发布消息让它开始执行。

worker.postMessage('go');

4.在worker的代码中,需要实现onmessage接受外部的消息,当完成计算后,用postMessage通知外部。

onmessage = function(event){
   
if(event.data == 'go'){
        postMessage
('worker done!');
   
}
}

5.worker里面还可以生成子worker(subworker):

//work.js:
var subworker = new Worker('subworker.js');
subworker
.onmessage = function(e){
    postMessage
(e.data.msg)    
}

//subWork.js:
postMessage
({
    msg
: 'sub worker done'
});

SharedWorker#

chrome和safari支持sharedWorker,可以共享worker里面的数据。

html中:

//创建SharedWorker对象
var sharedworker = new SharedWorker('sharedWorker.js');
sharedworker
.port.onmessage = function(e) { // note: not worker.onmessage!
   writeLog
(e.data);
}
//sharedWorker还可以用addEventListener去绑定worker的通知事件
sharedworker
.port.addEventListener('message', function(e) {writeLog('listend:'+e.data);},false);

function testSharedWorker(){
    sharedworker
.port.start(); // note: need this when using addEventListener
    sharedworker
.port.postMessage('ping');
}

sharedWorker.js中:

var count=0;
//每次创建shared worker会触发onconnect事件
onconnect
= function(e) {
 
var port = e.ports[0];
  count
++;
  port
.postMessage('Hello World! '+count);
  port
.onmessage = function(e) {
    port
.postMessage('pong'); // not e.ports[0].postMessage!
 
}
}

 

在附件的demo中,用iframe引入了另一个html(当然这个html是在同一个domain下的),在这个html再使用同一个shared worker。可以看出shared worker为两个外部调用共享了数据count。

innerTest.htm:

var sharedworker = new SharedWorker('sharedWorker.js');
sharedworker
.port.postMessage();

查看附件

一些重要的问题#

  • 所有版本的IE都不支持web worker.
  • worker中的属性不能被父页面访问,worker也不能访问父页面的DOM节点,worker只能通过消息事件与外部通讯
  • Chrome和Safari不支持sub worker,Firefox不支持shared worker
  • 可以在worker中使用setTimeout、setInterval
  • 别太指望web worker的性能,如果web worker运行中不断的抛出事件让父页面更新DOM,浏览器照样焊住。

分享到:
评论

相关推荐

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

    "使用HTML5 Web Worker提高Web应用性能研究" HTML5 Web Worker是HTML5提供的一种JavaScript多线程解决方案,可以在Web页面上并发运行多个JavaScript脚本,而不会阻塞用户界面。下面是使用HTML5 Web Worker提高Web...

    浅谈HTML5 Web Worker的使用

    HTML5 Web Worker是一种JavaScript的多线程解决方案,它允许开发者在后台线程中执行耗时的计算任务,而不会阻塞用户界面。Web Worker的主要目标是改善网页应用的性能,尤其是处理大量数据或进行复杂计算时,使得主线...

    Web Worker版调用Face-Api.js

    1. **Web Worker**:Web Worker是HTML5引入的一种技术,允许在后台线程中运行脚本,这样可以长时间运行的任务不会影响用户界面的响应性。主线程负责处理UI交互,而Worker线程则用于处理计算密集型任务。 2. **Face-...

    H5 web Worker

    **H5 Web Worker** 是HTML5中引入的一个重要特性,旨在解决现代Web应用程序中的多线程问题。在传统的Web开发中,JavaScript是单线程执行的,这意味着所有任务都在同一个线程上运行,如果遇到复杂的计算或者长时间的...

    向Webpack添加原生WebWorker捆绑支持

    Web Worker是HTML5引入的一个特性,用于在后台线程中执行脚本,以实现多线程处理,避免阻塞主线程。由于Web Worker的特殊性,其加载和运行机制与常规的JavaScript代码不同,因此需要特别处理。 为了在Webpack中添加...

    Web Worker用法汇总

    Web Worker是HTML5引入的一种特性,它为JavaScript提供了一种在后台线程中运行脚本的能力,从而解决了JavaScript单线程执行模型所带来的问题。在传统的JavaScript执行环境中,所有的任务都在同一个线程上运行,如果...

    前端开源库-web-worker-manager

    Web Worker是HTML5的一个特性,它允许在浏览器后台独立于主线程执行脚本,避免了长时间运行的脚本导致的网页无响应问题。Web Worker在后台线程中运行,可以长时间进行大量计算,同时不会影响用户的交互。Worker线程...

    workerstream:将 HTML5 Web Worker 与节点流 API 结合使用

    将 HTML5 与节点流 API 结合使用 var workerstream = require('workerstream') var worker = workerstream('my-worker.js') worker是一个流,并说出流事件: data 、 error和end 。 这意味着您可以将工作器输出通过...

    Html5+WebWorkers定时通讯心跳处理

    在"Html5+WebWorkers定时通讯心跳处理"的场景中,我们首先需要创建一个Web Worker脚本,这个脚本通常会包含心跳消息的发送逻辑。例如,worker.js可能包含以下代码: ```javascript self.addEventListener('message'...

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

    Web Worker是HTML5引入的一个特性,它允许在浏览器的后台线程中执行脚本,以进行计算密集型或长时间运行的任务,而不影响用户界面的响应速度。在图像加载场景中,由于图片数据量大,直接在主线程加载会使得页面变得...

    【温故而知新】HTML5的Web Worker.md

    【温故而知新】HTML5的Web Worker

    针对HTML5的Web Worker使用攻略

    HTML5的Web Worker是JavaScript实现多线程的一种技术,它允许开发者在后台线程中运行耗时的操作,而不会影响用户界面的响应性。Web Worker的主要目标是解决JavaScript的单线程执行问题,使得复杂的计算或者大数据...

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

    这个名为"基于各种HTML5新特性、WebSocket、WebWorker实现的视频播放弹幕互动网页.zip"的压缩包文件,显然是一个利用HTML5技术来构建的多媒体互动项目,特别关注了视频播放和实时弹幕功能。 首先,让我们详细了解...

    Viajs实现在一个WebWorker中使用DOM

    为了解决这个问题,HTML5引入了Web Workers API,它允许在后台线程中执行脚本,从而不阻塞主线程。但Web Workers不能直接访问DOM,这限制了其在处理DOM操作时的应用。`Via.js`,正如标题所言,是一个创新性的库,它...

Global site tag (gtag.js) - Google Analytics