HTML5 : worker API

worker 是异步操作的API
js的执行是以主线程,单线程执行,当遇到耗时的计算时会发生堵塞,这时候需要雇佣一个worker进行异步计算,将计算结果返回给主线程。
worker文件必须和主文件满足同源策略
worker 和主线程之间的通信
postMessage(n)方法
message事件
雇主(index.html) 向工人发出任务数据
var worker = new Worker('./worker.js');
//给worker发送数据
worker.postMessage(12)
复制代码
工人(worker.js) 接受任务数据
onmessage = function(e){
    console.log(e.data);//12
}
复制代码
工人处理index发过来的数据
onmessage = function(e){
    postMessage(deal(e.data));
}
function deal(data){
    return data * data;
}
复制代码
雇主监听工人返回的数据并使用
var worker = new Worker('./worker.js');
worker.postMessage(12)
worker.onmessage = function (e){
    console.log(e.data);//144
}
复制代码
结束一个worker
close()在worker作用域中调用(worker.js)-->辞职
terminate()在worker对象上调用(主进程的worker对象上worker.terminate)-->解雇
close() 辞职,自己不干了
//worker.js
onmessage = function(e){
    postMessage(deal(e.data));
    //取消worker
    close();
}
function deal(data){
    return data * data;
}
//index.html
var worker = new Worker('./worker.js');
worker.postMessage(12)
worker.onmessage = function (e){
    console.log(e.data);
    worker.postMessage(24)//不执行
}
复制代码
terminate()解雇,被炒鱿鱼
//index.html
var worker = new Worker('./worker.js');
worker.postMessage(12)
worker.onmessage = function (e){
    console.log(e.data);
    //取消worker
    worker.terminate();
    worker.postMessage(24);//不执行
}
复制代码
其他特性(兼容性较低不建议使用)
1.importScripts('./math1.js','math2.js')
worker只是window的子集,只能实现部分功能,不能获得到windowdocument,所有这里不要引入jqueryzepto。可以引入一些计算类的库。
2.作用域globalWorkerScope
   i.可以继续生产worker对象(Chrome暂时还不支持,浏览器支持情况不好)
   ii.navigator
   iii.XMLHttpRequest
   iiii.setTimeout/setInterval
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值