javascript:Web Workers入门

Web Workers入门

一.介绍

Web Workers 是Html5提供的一个多线程解决方案,我们可以将一些大计算量的代码交由web worker运行而不冻结用户界面

二.Web Workers基本用法

1.先创建一个分线程,语法如下

var worker = new Worker('分线程文件路径')

注意,此处分线程文件不能是本地文件,可以是localhost里面的文件或者网络文件,还有该分线程的文件与主线程文件必须同源,否则会报错

2.向分线程发送消息
在主线程中输入如下代码

xxx.postMessage("主线程传给分线程的内容")

注意,此处的内容可以是各种类型的数据,包括变量,二进制数据

3.在分线程中接收来自主线程的数据
在分线程文件中输入如下代码

var xxx=function(event){
var result=event.data
}

注意,此处event参数是分线程的全局特有的对象,它与window的event不是同一个对象,原因后续第三点会提及,此处event.data的值就是主线程传输过来的数据,我们可以设置一个变量来接收它(上述result)

4.在分线程文件中定义要执行的代码(对数据进行操作)
在分线程文件中输入如下代码

function dosomething(){
//dsomething
return result//返回对数据操作之后的新数据
postMessage(result)//将返回的数据传回主线程
}

5.在主线程设定接收来自分线程数据的代码
在主线程文件输入如下代码

worker.onmessage=function(event){
var result=event.data//接收
//之后可以对数据进行进一步操作,如打印输出等
}

6.关闭分线程(为节省系统资源,分线程使用完要及时关闭)
在主线程文件中输入如下代码

worker.terminate()

在分线程文件中输入如下代码

self.close()//此处self指分线程的全局对象,相对于this.close()

三.分线程不能操作页面的原因

通过在分线程中打印this后不难发现,分线程中的全局对象不再是window,由于DOM对象存在window中,所以worker线程无法获取到DOM对象,所以无法更新界面

四.Web Workers基本用法图解说明

在这里插入图片描述
主线程发送数据→分线程→分线程接收数据→分线程操作数据并返回新的数据→分线程将新的数据发送给主线程→主线程接收新数据→主线程进一步操作数据

补充
1.Worker 线程和主线程不在同一个上下文环境,它们不能直接通信,必须通过消息完成。
2.分线程里面还可以继续创建分线程,但目前只有Firefox浏览器支持这个操作
3.Web Workers不能跨域(域名,端口,协议任意一项不同)加载js
4.不是每个浏览器都支持Web Workers
5.Web Workers会让整个程序的运行时间比原来更长(极其细微)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Feng Wuqian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值