JavaScript多线程--Worker对象基础

   日期:2020-06-01     浏览:119    评论:0    
核心提示:Worker 对象Worker对象能够实现JS的多线程编程,但JS中的多线程与大多数语言的多线程的结构不同,JS的多线程实际上更像网络编程的 C/S(客户端/服务器) 架构Worker在构造时需要接收一个JS文件 var worker = new Worker(JsFilePath.js);虽然传递了一个JS文件,但是它不会立刻被执行,就想在其他语言里创建好了线程对象,还需要一个方法去启动这个线程对象Worker对象想要启动线程必须需要发送一条信息,Worker对象提供了postMessjavascrip

Worker 对象

Worker对象能够实现JS的多线程编程,但JS中的多线程与大多数语言的多线程的结构不同,JS的多线程实际上更像网络编程的 C/S(客户端/服务器) 架构

Worker在构造时需要接收一个JS文件

	var worker = new Worker('JsFilePath.js');

虽然传递了一个JS文件,但是它不会立刻被执行,就想在其他语言里创建好了线程对象,还需要一个方法去启动这个线程对象
Worker对象想要启动线程必须需要发送一条信息,Worker对象提供了postMessage()方法进行信息的传递

	worker.postMessage('启动线程');
	// 其中可以传递任何对象(不包含BOM,DOM等)

onmessage 事件

居然发送了信息,那么肯定就需要有接收信息的地方,Worker对象提供了onmessage事件使得Worker对象在调用postMessage()方法时能够接收信息并作出相应的处理
构建Worker对象后,在构建对象时传输的文件的作用域就不再是Window对象了,而是Worker对象

	self.onmessage = function(event){};
	// 这里的作用域不再是Window对象,而是Worker对象

postMessage()方法传递的信息被保存在了事件对象中的data属性中,所以直接使用 event.data 就能够访问到传递的信息

onerror 事件

如果在Worker对象的执行过程中出现了报错,那么会产生onerror事件,这个事件对象中储存着与报错有关的信息

	self.onerror = function(event){
		event.filename		// 发生错误的文件名
    	event.lineon		// 错误代码行号
    	event.message		// 错误信息
	}

终止线程

从上面的讲述中可以知道,如果使用Worker就能够有两个作用域,一个是原生的Window对象,另一个是你在构造Worker对象是传递的文件中产生的Worker对象
终止线程在两个作用域中都提供了方法,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

如果还有不懂的可以加QQ群 : 921998494

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服