Web Worker
Web Workder是HTML5 提供的一个JavaScript多线程解决方案,可以将一些需要大量计算的代码交给Web Worker 运行,而不会造成界面的卡顿。
但是子线程完全受主线程控制,并且子线程不得操作DOM。
web worker 的使用
首先需要创建在分线程执行的js文件,并在主线程中的js中发消息并设置回调。
主线程代码如下:
// 主线程代码
// 创建一个Worker 对象,并向它传递需要在子线程中执行的脚本URL
var worker = new Worker('worker.js');
// 接受不了worker传过来的数据函数
worker.onmessage = function(event) {
console.log(event.data);
}
// 向worker发送数据
worker.postMessage('post message');
分线程代码如下:
// worker.js
var onmessage = function(event) {
// 这里执行或者调用耗时操作
...
// 下面将子线程的数据返回
postMessage('return message')
}
这里需要注意的是,在分线程中的this指向的全局Worker对象,不指向Window,所以不能在子线程执行alert方法,不能更新UI。
不足
- 无法跨域加载js
- 有的浏览器不兼容