但是随着前端的高速发展,前端负担着越来越多的功能,偶然需要执行一些复杂的计算任务,但是JavaScript的单线程一旦执行某个耗时的任务,后面的任务都会阻塞,如果在前端可以或许做多线程的操作,那不就办理这个题目啦,于是,于是Web Worker就应运而生了。
1.2 Web Worker的概念
Web Worker可以创建别的的线程去做一些操作(比如执行一些耗时的操作),这个操作不影响js主线程(比如UI渲染)的执行 。Web Worker为 Web 内容在配景线程中运行脚本提供了一种简朴的方法。线程可以执行任务而不干扰用户界面。此外,他们可以利用XMLHttpRequest执行 I/O (尽管responseXML和channel属性总是为空)。一旦创建,一个 worker 可以将消息发送到创建它的 JavaScript 代码,通过将消息发布到该代码指定的事件处置惩罚步伐(反之亦然)......
利用 Web Workers - Web API 接口参考 | MDN
1.3 Web Worker的价值
Web Worker创建的一些辅助线程,分别去帮主线程分担一些复杂的、耗时的js运算,如许的话,主线程后续的代码执行就不会阻塞,当辅助线程计算出复杂耗时运算结果后,再与主线程通信,将计算出的结果告知主线程。
Web Worker新技能价值,简而言之:提升前端代码运算执行效率
1.4 Web Worker的限制
在Web Worker内, worker 运行在另一个全局上下文中, 有它本身的执行上下文
不能利用 window 对象的默认方法和属性,不能直接操作 DOM 节点。
1.5 Web Worker 和主线程之间的通信方式
workers 和主线程间的数据传递,双方都利用 postMessage() 方法发送各自的消息,利用 onmessage 事件处置惩罚函数来响应消息(消息被包罗在 message 事件的 data 属性中)。这个过程中数据并不是被共享而是被复制。