Worker对象能够实现JS的多线程编程,但JS中的多线程与大多数语言的多线程的结构不同,JS的多线程实际上更像网络编程的 C/S(客户端/服务器) 架构 Worker在构造时需要接收一个JS文件 虽然传递了一个JS文件,但是它不会立刻被执行,就想在其他语言里创建好了线程对象,还需要一个方法去启动这个线程对象 居然发送了信息,那么肯定就需要有接收信息的地方,Worker对象提供了onmessage事件使得Worker对象在调用postMessage()方法时能够接收信息并作出相应的处理 postMessage()方法传递的信息被保存在了事件对象中的data属性中,所以直接使用 event.data 就能够访问到传递的信息 如果在Worker对象的执行过程中出现了报错,那么会产生onerror事件,这个事件对象中储存着与报错有关的信息 从上面的讲述中可以知道,如果使用Worker就能够有两个作用域,一个是原生的Window对象,另一个是你在构造Worker对象是传递的文件中产生的Worker对象 如果还有不懂的可以加QQ群 : 921998494
Worker 对象
var worker = new Worker('JsFilePath.js');
Worker对象想要启动线程必须需要发送一条信息,Worker对象提供了postMessage()方法进行信息的传递 worker.postMessage('启动线程'); // 其中可以传递任何对象(不包含BOM,DOM等)
onmessage 事件
构建Worker对象后,在构建对象时传输的文件的作用域就不再是Window对象了,而是Worker对象 self.onmessage = function(event){}; // 这里的作用域不再是Window对象,而是Worker对象
onerror 事件
self.onerror = function(event){ event.filename // 发生错误的文件名 event.lineon // 错误代码行号 event.message // 错误信息 }
终止线程
终止线程在两个作用域中都提供了方法,Window中可以使用Worker.terminate()方法终止线程,在Worker中可以使用close()方法终止线程(说到底两者好像都差不多,反正都是Worker对象的方法,这个我也不做过多的研究了,接着往下看吧)
实例
// File: mian.js var workerObj = new Worker('javascriptFile.js'); workerObj.postMessage(123); workerObj.onmessage = function(event){ alert(evert.data.doubleNum); }; // File: javascriptFile.js self.onmessage = function(event){ self.postMessage({doubleNum:event.data*2}}); // 为了让 main.js 接收到处理的数据,所以再发送一条信息给 main.js } // Output: 246
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算