Web Worker
JavaScript是一门单线程语言, 我们可以通过浏览器的
Work
, 启动多线程来提高性能来处理io密集型计算, 大数据处理等; 但是主进程和子线程是隔离的, 只能通过监听事件和postMessage的方式进行传递消息
1 | //在主线程启动线程 注意有跨域问题 而且必须是js可执行脚本 |
Work 中可以使用如下全局变量
- navigator
- location
- JSON
- importScripts //同步阻塞引入其他脚本
Shared Workers
通浏览器同时打开多个tab(同一个页面), 就会同时打开多个work, 此时我们可以用共享work来减少性能资源消耗1
2
3
4
5
6
7
8var w1 = new SharedWorker( "http://127.0.0.1:8080/mySharedWorker.js" );
// 通过port对象作为唯一标识
w1.port.addEventListener( "message", handleMessages );
w1.port.postMessage( "something cool" );
//port connect initialized
w1.port.start();
在shared worker 内部给来的请求分配一个端口1
2
3
4
5
6
7
8
9
10
11
12
13// inside the mySharedWorker.js
addEventListener("connect", function (event) {
//分配端口给这个链接
var port = event.ports[0];
port.addEventListener("message", function (event) {
// ....
port.postMessage( .. );
})
// initialize the port connection
port.start();
})
SIMD
SIMD 打算把 CPU 级的并行数学运算映射到 JavaScript API,以获得高性能的数据并行运 算,比如在大数据集上的数字处理。 现在还在研发中, 也许会在es7出现
asm.js
asm.js 优化了垃圾收集和强制类型转换等部分, 所以适合数学运算(如游戏中的图形处理)
asm 代码风格1
2
3
4
5
6
7function test() {
var a = 45;
var b = a | 0; //因为js是32位的, 但现在的计算机一般都是64位的, 通过`| 0`后, 计算机知道这是32位的变量, 减少了对高位的追踪计算
var heap = new ArrayBuffer( 0x10000 ); // 从堆里申请64k内存
}