webworker运行在独立的线程中,不会阻塞主线程,这是浏览器的特性而不是js的。webworker内的代码是独立的,不能访问外部变量,并且只能使用ajax、navigator、location、JSON、applicationCache这些全局变量。
```
//这个js内的代码会在独立的线程中运行
var w1 = new Worker("xxx.js"); //只能通过js文件的方式启动一个worker
//内部与外部之间只能用message这个key
w1.addEventListener('message', function(evt) { evt.data... });
w1.postMessage('something else');
//js内部
addEventListener('message', function(evt) { evt.data... });
postMessage('a really cool reply');
w1.terminate(); //终止worker 相当于直接关闭浏览器
//js内部
//你还可以加载其他js文件并执行,加载的过程是同步的,worker会等加载完成后在继续执行
importScripts('foo.js', 'bar.js');
```
webworker适用场景:
处理密集型数学计算、大数据集排序、数据处理(压缩、音频分析、音像处理)、高流量网络通信。
#### 测试
Benchmark.js测试库
- 你不知道的JS上
- 第一部分 第三章 函数作用域和块作用域
- 第一部分 第四章 提升
- 第一部分 第五章 闭包
- 第二部分 第一章 关于this
- 第二部分 第二章 this全面解析
- 第二部分 第三章 对象
- 第二部分 第五章 原型
- 第二部分 第六章 行为委托
- 你不知道的JS中
- 第一部分 第二章 值
- 第一部分 第三章 原生函数
- 第一部分 第四章 强制类型转换
- 第一部分 第五章 语法
- 第二部分 第一章 异步
- 第二部分 第三章 Promise
- 第二部分 第四章 生成器
- 第二部分 第五章 性能
- 你不知道的JS下
- 第一部分 总结
- 第二部分 第二章 语法
- 第二部分 第三章 代码组织
- 第二部分 第四章 Promise
- 第二部分 第五章 集合
- 第二部分 第六章 新增API
- 第二部分 第七章 元编程
- 第二部分 第八章 ES6之后