子线程使用
相关库:
comlink
worker-loader
主线程:
import Worker from 'worker-loader!./worker.js';
import { Loader } from '@/utils/CWThree/Loader/Loader';
// 子线程加载模型
export async function loadModelInWorker(data) {
return new Promise((resolve, reject) => {
const worker = new Worker(); // 创建 Worker
const loader = (a, b) => Loader(a, b);
worker.postMessage({ sceneModelUrl: data?.sceneModelUrl, method: loader.toString() }); // 向 Worker 发送模型 URL
worker.onmessage = (event) => {
resolve({ ...data, model: event.data.model }); // 接收到 Worker 返回的数据(模型)
};
worker.onerror = (error) => {
console.error('Worker encountered an error:', error);
reject(error); // 捕获 Worker 错误
};
});
}
子线程:
// import { Loader } from '@/utils/CWThree/Loader/Loader';
// 监听主线程发来的消息
onmessage = function (e) {
console.log(e, 'e');
const { sceneModelUrl, method } = e.data; // 获取主线程传递的 URL
// if (!Loader) return;
try {
postMessage({ model: 123 }); // 传回加载后的模型场景
} catch (error) {
// 如果发生错误,捕获并发送回主线程
console.error('Error loading model:', error);
postMessage({ error: error.message });
}
};
comlink库可以简化子进程与主进程通信,稍后可做研究

浙公网安备 33010602011771号