Security News
JavaScript Leaders Demand Oracle Release the JavaScript Trademark
In an open letter, JavaScript community leaders urge Oracle to give up the JavaScript trademark, arguing that it has been effectively abandoned through nonuse.
tiny-worker
Advanced tools
The tiny-worker npm package is a lightweight implementation of Web Workers for Node.js. It allows you to run JavaScript code in parallel threads, which can help improve the performance of CPU-intensive operations by offloading them to separate worker threads.
Creating a Worker
This feature allows you to create a new worker thread. The worker can execute code independently of the main thread and communicate back using messages.
const Worker = require('tiny-worker');
const worker = new Worker(function() {
postMessage('Hello from the worker!');
});
worker.onmessage = function(event) {
console.log(event.data); // 'Hello from the worker!'
};
Sending Messages to Worker
This feature allows the main thread to send messages to the worker thread. The worker can then process the message and send a response back to the main thread.
const Worker = require('tiny-worker');
const worker = new Worker(function() {
onmessage = function(event) {
postMessage('Received: ' + event.data);
};
});
worker.onmessage = function(event) {
console.log(event.data); // 'Received: Hello'
};
worker.postMessage('Hello');
Handling Errors in Worker
This feature allows you to handle errors that occur within the worker thread. You can set an error handler to catch and process any errors that are thrown in the worker.
const Worker = require('tiny-worker');
const worker = new Worker(function() {
throw new Error('Something went wrong');
});
worker.onerror = function(error) {
console.error('Worker error:', error.message); // 'Worker error: Something went wrong'
};
The threads package is another library for managing worker threads in Node.js. It provides a higher-level API compared to worker_threads and includes features like thread pools and TypeScript support. It is more feature-rich but also more complex than tiny-worker.
The node-worker-threads-pool package is a library that builds on top of the worker_threads module to provide a pool of worker threads. This can be useful for managing multiple worker threads efficiently. It offers more advanced thread management capabilities compared to tiny-worker.
Tiny WebWorker for Server
require()
is available for flexible inline Worker scripts. Optional parameters args
Array & options
Object; see child_process.fork()
documentation.
The worker script:
onmessage = function (ev) {
postMessage(ev.data);
};
The core script:
var Worker = require("tiny-worker");
var worker = new Worker("repeat.js");
worker.onmessage = function (ev) {
console.log(ev.data);
worker.terminate();
};
worker.postMessage("Hello World!");
The worker helper script (helper.js):
export const dataFormatter = (data) => {
return `${data} World!`;
};
The worker script (repeat.js):
import { dataFormatter } from "./helper";
onmessage = function (ev) {
const data = dataFormatter(ev.data);
postMessage(data);
};
The core script:
var Worker = require("tiny-worker");
var worker = new Worker("repeat.js", [], {esm: true});
worker.onmessage = function (ev) {
console.log(ev.data);
worker.terminate();
};
worker.postMessage("Hello");
var Worker = require("tiny-worker");
var worker = new Worker(function () {
self.onmessage = function (ev) {
postMessage(ev.data);
};
});
worker.onmessage = function (ev) {
console.log(ev.data);
worker.terminate();
};
worker.postMessage("Hello World!");
To be able to debug a child process, it must have a differnt debug port than the parent.
Tiny worker does this by adding a random port within a range to the parents debug port.
The default Range is [1, 300]
, it can be changed with the setRange(min, max)
method.
To disable any automatic port redirection set options.noDebugRedirection = true
.
//parent is started with '--debug=1234'
var Worker = require("tiny-worker");
Worker.setRange(2, 20);
var worker = new Worker(function () {
postMessage(process.debugPort);
});
worker.onmessage = function (ev) {
console.log(ev.data); //prints any number between 1236 and 1254
worker.terminate();
}
//parent is started with '--debug=1234'
var Worker = require("tiny-worker");
var worker = new Worker(function () {
postMessage(process.debugPort);
}, [], {noDebugRedirection: true, execArgv: ["--debug=1235"]});
worker.onmessage = function (ev) {
console.log(ev.data); //prints 1235
worker.terminate();
}
Message handler, accepts an Event
Error handler, accepts an Event
Adds an event listener
Broadcasts a message to the Worker
Terminates the Worker
Sets range for debug ports, only affects current process. Returns true if successful.
SIGTERM
or SIGINT
is not reaching the child processSIGTERM
or SIGINT
via process.on()
which terminates (all) worker process(es) and then gracefully shutdowns via process.exit(0);
SIGTERM
or SIGINT
?SIGTERM
, but if you also need to support Windows use SIGINT
Copyright (c) 2019 Jason Mulligan Licensed under the BSD-3 license
FAQs
Tiny WebWorker for Server
The npm package tiny-worker receives a total of 91,985 weekly downloads. As such, tiny-worker popularity was classified as popular.
We found that tiny-worker demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
In an open letter, JavaScript community leaders urge Oracle to give up the JavaScript trademark, arguing that it has been effectively abandoned through nonuse.
Security News
The initial version of the Socket Python SDK is now on PyPI, enabling developers to more easily interact with the Socket REST API in Python projects.
Security News
Floating dependency ranges in npm can introduce instability and security risks into your project by allowing unverified or incompatible versions to be installed automatically, leading to unpredictable behavior and potential conflicts.