Worker是什么?
Workers 使得一个Web应用程序可以在与主执行线程分离的后台线程中运行一个脚本操作。这样做的好处是可以在一个单独的线程中执行费时的处理任务,从而允许主线程运行而不被阻塞/放慢(异步性)。
Worker主要的API
- onmessage
这是一个继承自Event的句柄对象,它是在后台线程被调用或者是后台线程返回一条消息给主线程的时候调用。使用语法如下:
// 主线程内调用
worker.onmessage = function(e) {
console.log(e.data); //输出传递的消息
}
// worker脚本内部调用
onmessage = function(e) {
console.log(e.data); //输出传递的消息
}
- postmessage
这也是一个继承自Event的句柄对象,它是在主线程或者子线程接收message时被调用:
// 主线程内调用
worker.postmessage = function(e) {
console.log(e.data); //输出传递的消息
}
// worker脚本内部调用
postmessage = function(e) {
console.log(e.data); //输出传递的消息
}
- onmessageerror
这也是一个继承自Event的句柄对象,它是在主线程或者子线程传递的message无法被序列化时被调用:
// 主线程内调用
worker.onmessageerror = function() {
fn(); //异常处理
}
// worker脚本内部调用
onmessageerror = function() {
fn(); //异常处理
}
- close
worker内部可以通过调用这个方法终结子线程的工作,而外部主线程要杀死子线程可以调用terminate()
// 主线程内调用
worker.terminate()
// worker脚本内部调用
close()
- self
只读属性,类似于主线程中的window对象,表示任意worker的通用作用域