Integrate worker to offload main thread from heavy tasks
This commit is contained in:
31
wwwroot/core/namecards/workerLauncher.js
Normal file
31
wwwroot/core/namecards/workerLauncher.js
Normal file
@@ -0,0 +1,31 @@
|
||||
import path from "path";
|
||||
import { Worker } from 'worker_threads';
|
||||
import {Logger} from "../logging/logger.js";
|
||||
|
||||
function launchWorker({templatePath, avatarURL, username}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const workerFile = path.resolve('./wwwroot/core/namecards/nameCardWorker.js');
|
||||
const worker = new Worker(workerFile);
|
||||
|
||||
worker.postMessage({templatePath, avatarURL, username});
|
||||
|
||||
worker.on('message', (result) => {
|
||||
resolve(result);
|
||||
worker.terminate()
|
||||
.catch(err => Logger.error("Unable to terminate worker", err.message));
|
||||
});
|
||||
|
||||
worker.on('error', (err) => {
|
||||
reject(err);
|
||||
worker.terminate()
|
||||
.catch(err => Logger.error("Unable to terminate worker", err.message));
|
||||
});
|
||||
|
||||
worker.on('exit', (code) => {
|
||||
if (code !== 0) reject(new Error(`Worker stopped with code ${code}`));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export {launchWorker}
|
||||
|
||||
Reference in New Issue
Block a user