1.前言 what
web worker 是运行在后台的 JavaScript,不会影响页面的性能。
JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。随着电脑计算能力的增强,尤其是多核 CPU 的出现,单线程带来很大的不便,无法充分发挥计算机的计算能力
2.页面监听worker
页面类似主人一样 会受到worker/机器人的信息
var w = new Worker("./index.js") w.onmessage = function(e){ box.innerHTML = e.data }
3. worker
机器人帮我们/主人 干活的
var total = 0; for (var i = 1; i < 10000; i++){ total+=1 } //告知主人 活干完了 postMessage(total)
4. 主人发任务
主人可以主动个机器人发布任务指令
var worker= new Worker("./workers.js"); // 主线程传给worker数据,各种数据类型,包括二进制 worker.postMessage({ type: "start", msg: "start work" })
5.机器人接收主人的任务
//// self代表线程自身,即子线程的全局对象 self this 也可以省略 console.log("worker 文件", self) self.addEventListener('message', function(e) { var data = e.data; if(data.type==="start"){ self.postMessage("收到主人,我已经开始工作"); } }, false);
6.worker 关闭
worker内部关闭自身
self.close(); // Terminates the worker.
页面关闭
w.terminate();
导入其他模块
importScripts('script1.js', 'script2.js');
钩子
message 监听发回来的消息
error 监听worker错误处理
7.worker的不同
由于 web worker 位于外部文件中,它们无法访问下例 JavaScript 对象:
window 对象
document 对象
parent 对象
Worker 线程可以
navigator对象
location对象。