JavaScript是单线程的,就不能像多线程一样把工作委托给独立的线程。

工作者线程的价值就是允许把主线程的工作转嫁到独立的实体,而不会改变现有的单线程模型。

JavaScript环境实际上是运行在托管操作系统中的虚拟环境。在浏览器中打开一个页面,就会分配一个自己的环境,这样每一个页面都有自己的内存、事件循环、DOM等等。每一个页面相当于一个沙盒,不会干扰其他的页面。

使用工作者线程,浏览器可以在原始页面环境之外再分配一个完全独立的二级子环境,这个子环境不能和依赖单线程交互的API互操作。

Web工作者线程规范定义了三种主要的工作者线程:专用工作者线程、共享工作者线程和服务工作者线程。

专用工作者线程

也就是Web Worker或者Worker,可以让脚本单独创建一个JavaScript线程,可以执行委托任务。只能被创建它的页面使用。

这样的线程可以和父页面交换信息、发送网络请求、执行文件输入、输出,进行密集计算、处理大量数据,完成一些不合适在页面执行线程里面做的任务。

可以把专用工作者线程称为“后台脚本”,创建专用工作者线程:

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>

<body>
<script>
const worker = new Worker("./emptyWorker.js");
console.log("worker", worker)
</script>
</body>

</html>

工作者线程_前端

工作者线程脚本文件只能从和父页面相同的额源加载,也就是不能跨域加载,否则加载文件报错。