Web Worker线程进行数据交换

为了与Worker线程交换数据,Worker提供了如下方法:

▲postMessage(data):发送消息,提交data数据。

Worker提供了一个名为onmessage的事件监听器属性。当程序在前台JavaScript中调用postMessage(data)发送消息时,将会触发Worker线程启动的JavaScript脚本中的onmessage函数;当Worker线程启动的JavaScript脚本调用postMessage(data)发送消息时,将会触发为该Worker对象的onmessage事件绑定的监听器。

/

1.与Work线程交换数据

为了与Work线程交换更加复杂的数据,我们可以把复杂数据封装成JavaScript对象,在把JavaScript对象转为json字符串之后进行传递。

例子:允许用户输入两个数值,两个数值确定一个范围,而程序代码则负责计算、收集这个范围内的所有质数。

代码解释:上面程序中的粗体字代码把用户输入的两个数值封装成JavaScript对象,接下来程序把JavaScript对象转换为json字符串提交给Worker线程。当前台JavaScript脚本调用Worker对象的postMessage()方法提交消息时,将会触发Worker线程所启动的JavaScript脚本里的onmessge方法。

代码解释:使用浏览器来浏览该页面,并在两个文本框中输入两个整数,用于确定两个计算、收集质数的范围,然后单击页面上的"计算"按钮,程序将会把用户输入的数据提交给后台的Worker线程,当Worker线程计算、收集完成后,程序再次把计算结果返回给前台JavaScript。

/

2.Worker线程中可用的API

Worker线程所启动JavaScript脚本不能访问DOM API,不能动态地修改前台HTML界面组件。事实上,Worker线程所启动的JavaScript脚本甚至不能调用alert()、confirm()、prompt()等用户交互函数。

在Worker线程中可用API大致有如下几个:

①onmessage:这是一个事实监听器属性,通过为属性指定的函数可以获取前台JavaScript脚本提交过来的数据

②postMessage(data):这是Worker的核心方法。如果在Worker启动的JavaScript脚本中调用该方法提交消息,将会触发响应Worker对象的onmessage事件;如果调用前台JavaScript脚本中Worker对象的postMessage()方法提交消息,将会触发该Worker对象启动的JavaScript脚本中的nomessage事件监听器。

③importScripts(urls):这也似乎是Worker的核心方法。该方法可用于导入JavaScript脚本,该方法可以同时导入多个JavaScript脚本,例如importScripts("a.js","b.js","c.js");。

④sessionStorage/localStorage:完全可以在Worker线程中使用Storage来执行本地存储。

⑤Worker:Worker线程可以创新的Worker对象来启动嵌套线程。

⑥XMLHttpRequest:Worker线程中可以使用XMLHttpRequest来发送异步请求。

⑦navigator:这是一个WorkerNavigator对象,该对象的功能与window里的navigator属性相似。

⑧location:这是一个WorkerLocation对象,该对象的功能与window里的location属性相似。

⑨self:这是一个WorkerGlobalScope对象,该对象就代表了当前Worker线程自身的作用域。调用self的close()方法可以结束本线程。

⑩setTimeout()/setInterval()/eval()/isNaN()/parselnt()等:这些是与界面无关的JavaScript核心函数,包括使用Array/Data/Math/Number/Object/String等JavaScript核心类创建对象,以及使用这些类的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ClementQL

机会只属于对自己更狠的人。

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

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

打赏作者

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

抵扣说明:

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

余额充值