最近在看一些关于Web Worker的数据和视频,把以下重点分享给大家 ( 推荐有基础的小伙伴收藏 )点击收藏
1.Web Worker概述
客户端JavaScript其中一个基本的特性就是单线程,比如浏览器无法同时运行两个事件处理程序,也无法在一个事件处理程序运行的时候触发定时器。之所以设置单线程的理论就是,客户端的JavaScript的函数不能运行太长时间,否则会导致循环事件,Web浏览器无法对用户输入做出响应,这也是为什么AJAX的API都是异步的,以及为什么客户端Javascript不能使用一个简单的异步load()或者require()函数来加载javascript库。
在Web Worker标准中,定义了解决客户端JavaScript无法多线程的问题,其中定义的 " Worker " 是指执行代码的并行线程,不过,Web Worker处在一个自包含的执行环境中,无法访问Window对象和Document对象,和主线程之间的通信也只能通过异步消息传递机制实现,这就意味着,并行的修改DOM是不可能的。
2.Web Worker基本使用
判断当前浏览器是否支持web worker
if (typeof (Worker) != "undefined") { //浏览器支持web worker
if (typeof (w) == "undefined") { //w是未定义的,还没有开始计数
w = new Worker("webworker.js"); //创建一个Worker对象,利用Worker的构造函数
}
//onmessage是Worker对象的properties
w.onmessage = function (event) { //事件处理函数,用来处理后端的web worker传递过来的消息
// do something
};
}
else { // 浏览器不支持web worker
// do something
}
API
①创建新的Worker
var worker = new Worker(“worker.js”)
worker.postMessage()
③接收消息
worker.onMessage = function(msg){}
④异常处理
worker.onerror = function(err){}
⑤结束worker
worker.terminate()
⑥载入工具类函数
importScripts()
Worker作用域
当我们创建一个新的worker时,该代码会运行在一个全新的javascript的环境(WorkerGlobalScope)运行,是完全和创建worker的脚本隔离,这时我们可以吧创建新worker的脚本叫做主线程,而被创建的新的worker叫做子线程。
WorkerGlobalScope是worker的全局对象,所以它包含所有核心javascript全局对象拥有的属性如JSON等,window的一些属性,也拥有类似于XMLHttpRequest()等。但是我们所开启的新的worker也就是子线程,并不支持操作页面的DOM。
web worker是在后台运行的脚本,和其它脚本是独立的,不会影响页面的执行.当web
worker在后台运行时你可以继续做你想做的:单击,选择之类的操作。
这些知识看完了之后,你get到了吗?快来测测吧。