🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

workerjs

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

workerjs

Server Web Workers for node.js that work

latest
Source
npmnpm
Version
0.1.1
Version published
Weekly downloads
320
-5.33%
Maintainers
1
Weekly downloads
 
Created
Source

workerjs

Server Web Workers for node.js that work.

build status

Installation

This module is installed via npm:

$ npm install workerjs

Background

Web Workers are part of the HTML 5 spec and:

defines an API that allows Web application authors to spawn background workers running scripts in parallel to their main page. This allows for thread-like operation with message-passing as the coordination mechanism

In effect, it allows you to get the benefit of multi-talking and multi-threading in single-threaded Javascript, as well as the safety of the event loop.

You can achieve this in node.js using the child_process.fork method, but then you have to use a different API.

This module normalizes the Web Worker API for server-side javascript in node.js with the hopes that we can build more multi-tasking modules built on the Web Worker standard that will work on both the server and the client-side using browserify.

Example Usage

By using Web Workers you can do CPU-intensive operations without blocking the event-loop and incoming IO:

// app.js - run with "node app.js"
var worker = new Worker('/path/to/fibworker.js');
worker.onmessage = function (msg) {
  expect(msg.data).to.equal(1346269);
};
worker.postMessage(30);
// fibworker.js - CPU web worker code
self.onmessage = function (msg) {
  self.postMessage(fibo(msg.data));
};

function fibo (n) {
  return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;
}

Node Mode - allowing require()

I've also added a "node-friendly" option that allows the Web Worker to use require() and other node.js conventions. To use this, just pass a boolean value of true through to the second argument of the Worker contructor:

// app.js - run with "node app.js"
var worker = new Worker('/path/to/gammaworker.js', true);
worker.addEventListener('message', function (msg) {
  expect(msg.data).to.equal(87178291200.00021);
  done();
});
worker.postMessage(15);
// gammaworker.js - uses require
var gamma = require('gamma');
self.onmessage = function (msg) {
  postMessage(gamma(msg.data));
};

Also, if you provide a module.exports function it will be executed as an entry point of the web worker. This emulates the browserify transform behaviour in webworkify:

// app.js - run with "node app.js"
var worker = new Worker('/path/to/gammaworker2.js', true);
worker.addEventListener('message', function (msg) {
  expect(msg.data).to.equal(87178291200.00021);
  done();
});
worker.postMessage(15);
// gammaworker2.js - uses require
var gamma = require('gamma');

module.exports = function () {
  postMessage(gamma(msg.data));
};

Keywords

browserify

FAQs

Package last updated on 04 Jan 2014

Did you know?

Socket

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.

Install

Related posts