重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
小编给大家分享一下Html5中多线程Worker类的使用方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
十载的伊金霍洛网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整伊金霍洛建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联从事“伊金霍洛网站设计”,“伊金霍洛网站推广”以来,每个客户项目都认真落实执行。
一、Worker类
1、方法介绍
(1)构造函数 new Worker(arg) :参数表示你的线程要执行的代码所在的js文件,例如‘myworker.js’,构造函数当然是返回一个Worker类的实例
(2)worker.postMessage(message):这个方法表示从主线程向子线程发送消息或者子线程向主线程发送消息,message一般是一个字符串,也可以将一个js对象转成字符串发过去
(3)worker上还有一个message事件,当有人向这个worker实例发送消息时,该事件被触发,我们可以从他的事件对象的data属性中获得post过来的值
可以看到Woker类的API是相当简洁的,只有两个最常用的方法,一个事件,下面我们来通过实际的例子看看。
//main.htmlmain //thread1.js onmessage = function(event){ var res = event.data+"帅气!"; postMessage(res); }
当我在文本框输入“大~熊”点击发送按钮就会出现如下效果
简单分析分析,我在主线程由thead1.js创建了一个Worker的实例worker,当点击按钮时会调用他的postMessage方法,将文本框中的内容发送到thread1.js,我们的thread1.js怎么做的呢?是这样,他侦听message事件,主线程发送消息过来就触发这个事件,执行回调函数,回调函数从事件对象取得发送来的值,然后将这个值加上“帅气!”,然后在发送回去。主线程呢也侦听了worker的message事件,所以有消息过去时会触发,将消息内容显示在p中,如此就看到了上面的效果。
或许你会将这有什么用呢?这里确实没什么用,这里我们大可以在主线程还总完成加“帅气!”的操作,因为他的复杂度为O(1)(哈哈,最近在学算法!),但是假如不是做这么简单的操作呢?这种方法的好处就是不过你的子线程做多么复杂的工作,都不会让主线程停下来,主线程改干嘛还干嘛,等到子线程把数据处理好了他直接拿过来就好了。
陆老师将可以在子线程中在调用new Worker()创建新的子线程,我发现这样是不可以的,会报undefined错误,也就是说子线程中是不能调用Worker构造函数的,一开始以为是自己错了,后来查阅了官方文档,发现也没有相关的描述。
下面看一个在主线程调用多个子线程的例子:
//main.htmlmain //thread1.js onmessage = function(event){ var res = event.data+"帅气!"; postMessage(res); } //thread2.js onmessage = function(event){ var res = event.data+"没骗你哟!"; postMessage(res); close(); }
主线程要完成一个任务需要两个线程,它创建了两个线程worker1,2,先向worker1请求,得到返回的数据后,再请求worker2,同时将worker1处理之后的数据交给worder2处理,然后拿到最终结果,显示在页面上。
在子线程中可以引入其他的js文件然后调用,比如下边这个例子。
//main.htmlmain //thread1.js importScripts('tools.js') onmessage = function(event){ var res = handler(event.data); postMessage(res); } //tools.js function handler(data){ return data+"加油加油!" }
可以看到我们的thread1.js并没有一个叫做tools.js的文件,但是它通过importScripts()导入了一个js文件,然后就可以调用里边暴露出来的方法了。
二、SharedWorker类
SharedWorker的实质在于share,不同的线程可以共享一个线程,他们的数据也是共享的。
直接用例子来探讨。
使用方法一:
//main.htmlShared workers: demo 1