h5-worker多线程js
时间:2022-07-25
本文章向大家介绍h5-worker多线程js,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
h5-worker多线程js
worker阐述
在我们的印象当中,js都是单线程的,或者更多的是类似ajax这种异步加载的伪多线程(这里的伪多线程指的ajax发送请求,采用回调的方法,回调成功以后还是在主线程的队列中去执行回调)
h5提供的worker构造器提供的是另外一个线程,也就是另外的一个队列,真正的达到多线程的情况。
经过刚才的描述,有木有觉得这是一个很牛逼的东西,然而,暂时来说,毫无卵用。
先看看worker有那些缺点
- worker不能操作dom(一棒子打死的节奏)
- 没有window对象(也很坑了)
- 不能读取文件
- 兼容性不好
那总有使用的地方把
- 可以发送ajax(ajax本来就是异步,也不用worker来搞)
- 做一些复杂的计算
我们来看一个使用worker优化计算的案例 这是常规情况下的
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的情况下
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
//接收主线程发送过来的数据
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协议会报错
- 谁能拯救我糟心的出行?
- Python常见数据结构整理 Python常见数据结构整理
- “共享洗车机”落户咸阳,你怎么看?
- 蒋涛——软件是一个非常特殊的产业,一旦进入就再难挣脱
- Pechkin:html -> pdf 利器
- C#执行XSL转换
- javascript:算法笔记
- spring boot 登录注册 demo (一)
- linux学习:CentOS、Mac上SSH的设置以及SceureCRT中的文件上传下载
- 中关村成为北京“高精尖”产业发展主阵地
- jquery-barcode:js实现的条码打印
- 页面json 格式化+颜色高亮
- Python 里 and、or 的计算规则
- Python中赋值、浅拷贝与深拷贝
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP使用反向Ajax技术实现在线客服系统详解
- PHP设计模式之适配器模式(Adapter)原理与用法详解
- laravel5.5框架的上传图片功能实例分析【仅传到服务器端】
- Laravel5.1框架自带权限控制系统 ACL用法分析
- php使用filter_var函数判断邮箱,url,ip格式示例
- Python json格式化打印实现过程解析
- PHP使用DOM对XML解析处理操作示例
- OpenCV Python实现图像指定区域裁剪
- Laravel框架实现多个视图共享相同数据的方法详解
- python如何快速生成时间戳
- 从python读取sql的实例方法
- PHP+iframe模拟Ajax上传文件功能示例
- Centos7 Yum安装PHP7.2流程教程详解
- PHP session垃圾回收机制实例分析
- thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例