Web Workers 是在浏览器中运行 JavaScript 代码的一种机制,它们在主线程之外运行,可以在后台执行一些任务而不阻塞用户界面。Web Workers 使得在浏览器中执行多线程操作成为可能,这有助于提高性能和响应性。
以下是关于 Web Workers 的一些关键概念和用法:
postMessage
方法发送消息,并在两者之间建立双向通信。消息传递是通过拷贝而不是共享对象来完成的,确保数据的安全性。onmessage
和 onerror
)来捕获相关事件。当不再需要一个 Web Worker 时,可以通过调用 terminate
方法来终止它。Web Worker 在处理一些耗时的计算、大量数据的处理和其他计算密集型任务方面表现出色,可以提高整体的性能和用户体验。但要注意,它们并不适用于所有的场景,特别是涉及到直接操作 DOM 的情况。
文件目录
创建一个webworker 文件夹,下边有三个文件:index.html、index.js、worker.js
<!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>
用来引入index.js
<script src="./index.js"></script>
</body>
</html>
// idnex.js
// 创建一个新的 Worker
var worker = new Worker('worker.js');
// 向 Worker 发送消息
worker.postMessage(30); // 传递数据,例如计算斐波那契数列的第 30 项
// 监听从 Worker 返回的消息
worker.onmessage = function(event) {
var result = event.data;
console.log('Worker 返回的结果:', result);
// 关闭 Worker
worker.terminate();
};
// 监听 Worker 的错误信息
worker.onerror = function(error) {
console.error('Worker 发生错误:', error);
};
self.onmessage = function (event){
let data = event.data
// 计算斐波那契额数列的结果
let result = fibonacci(data)
// 将结果发送回主线程
self.postMessage(result)
}
// 斐波那契数列
function fibonacci(n){
return n <= 2 ? n : fibonacci(n-1) + fibonacci(n-2)
}
在本地直接打开的时候会违反同源策略;
Failed to construct 'Worker': Script at 'file:///E:/study/1.base_study/webworker/worker.js' cannot be accessed from origin 'null'.
at file:///E:/study/1.base_study/webworker/index.js:4:14
"Script at 'file:///E:/study/1.base_study/webworker/worker.js' cannot be accessed from origin 'null'",这说明 Worker 脚本的来源是 'file://',而主线程的来源是 'null'。这是由于在本地文件系统(file://)上运行时会遇到的问题。
在本地该文件目录下起了一个本地服务器,解决同源策略的问题
执行过大的斐波那契数列,时间比较长哦