worker.postMessage(JSON.stringify(intArray));
这一行生成的json字符串是发给主线程还是发给worker.js?
这一行是发给 worker.js(子线程)的!
让我通过完整的代码结构来说明:
代码定位
// script.js 文件内容
onmessage = function(event) {
var intArray = new Array(100); // 随机数组
// 生成100个随机数
for(var i = 0; i < 100; i++)
intArray[i] = parseInt(Math.random() * 100);
var worker;
// 创建子线程
worker = new Worker("worker.js"); // ← 创建worker.js线程
// 把随机数组提交给子线程进行挑选工作
worker.postMessage(JSON.stringify(intArray)); // ← 这里是发给worker.js
worker.onmessage = function(event) {
// 把挑选结果返回主页面
postMessage(event.data); // ← 这里是发给主线程
}
}消息传递路径
主线程 (HTML页面) ↑ │ postMessage(event.data) ← 这是script.js中最后一行代码发送的 │ script.js (中间层Worker) │ │ worker.postMessage(JSON.stringify(intArray)) ← 这是您问的这一行,发给worker.js ↓ worker.js (最内层Worker)
关键区别
worker.postMessage() vs postMessage()
// 1. worker.postMessage() - 发送给特定的Worker实例 worker.postMessage(JSON.stringify(intArray)); // 这是发给worker变量引用的Worker线程(即worker.js) // 2. postMessage() - 发送给父线程(创建自己的线程) postMessage(event.data); // 这是在script.js中,发送给创建它的主线程
实际执行流程
// 在script.js中:
worker.postMessage(JSON.stringify(intArray));
// 这条消息的接收者是:
// ↓
// 在worker.js中:
onmessage = function(event) {
// event.data 就是上面发送的JSON字符串
var intArray = JSON.parse(event.data); // 还原数组
// ... 处理数据
}可以这样理解
postMessage():发给"我爸"(创建我的线程)worker.postMessage():发给"我儿子"(我创建的线程)
所以在这段代码中:
worker.postMessage(JSON.stringify(intArray))→ 发给worker.js(儿子)postMessage(event.data)→ 发给主线程(爸爸)