前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >h5-worker多线程js

h5-worker多线程js

作者头像
envoke
发布2020-09-17 11:28:36
1.4K0
发布2020-09-17 11:28:36
举报

h5-worker多线程js

worker阐述

在我们的印象当中,js都是单线程的,或者更多的是类似ajax这种异步加载的伪多线程(这里的伪多线程指的ajax发送请求,采用回调的方法,回调成功以后还是在主线程的队列中去执行回调)

h5提供的worker构造器提供的是另外一个线程,也就是另外的一个队列,真正的达到多线程的情况。

经过刚才的描述,有木有觉得这是一个很牛逼的东西,然而,暂时来说,毫无卵用。

先看看worker有那些缺点

  • worker不能操作dom(一棒子打死的节奏)
  • 没有window对象(也很坑了)
  • 不能读取文件
  • 兼容性不好

那总有使用的地方把

  • 可以发送ajax(ajax本来就是异步,也不用worker来搞)
  • 做一些复杂的计算

我们来看一个使用worker优化计算的案例 这是常规情况下的

代码语言:javascript
复制
	var beginTime = Date.now();
	console.log("====================");
	console.log("====================");
	var a = 999999;
	var result = 0;
	for(var i = 0; i < a; i++){
		result += i;
	}
	console.log(result);
	console.log("====================");
	console.log("====================");
	var endTime = Date.now();
	console.log("总共用时:" + (endTime - startTime) +"毫秒");
在这里插入图片描述
在这里插入图片描述

再来看看使用worker的情况下

代码语言:javascript
复制
	var beginTime = Date.now();
	console.log("====================");
	console.log("====================");
	var a = 999999;
	var worker = new Worker("./worker.js");
	//发送数据
	worker.postMessage({
		num: a
	});
	//接收worker的返回的数据
	worker.onmessage = function(e){
		console.log(e.data.result);
	}
	console.log("====================");
	console.log("====================");
	var endTime = Date.now();
	console.log("总共用时:" + (endTime - startTime) +"毫秒");

新建worker.js

代码语言:javascript
复制
	//接收主线程发送过来的数据
	this.onmessage = function(e){
		var result = 0;
		//主线程发送过来的对象中的属性值
		var num = e.data.num;
		for(var i = 0; i < num; i++){
			result += i;
		}
		//往主线程中发送数据
		this.postMessage({
			result: result
		});
	}	

我们来测试一下效果

在这里插入图片描述
在这里插入图片描述

确实少用了很多时间

  • 主线程和子线程通信都是通过postMessage和onmessage两个方法来实现的
  • 还需要注意一点,Worker必须在服务器协议下才能使用,file协议会报错
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • h5-worker多线程js
  • worker阐述
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档