JSPM

threadedclass

0.0.3
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 4675
  • Score
    100M100P100Q175814F
  • License MIT

Package Exports

  • threadedclass

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (threadedclass) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Threaded class

Fork instances of classes with one line of code

Getting started

Let's say you have a class that has several computational-heavy methods:

// Old, single thread way:
import { Professor } from './professor'

function getStory() {
  let mrSmith = new Professor('maths', 'greek')
  let story = mrSmith.talkAboutAncientGreece() // takes a loong time
  return story
}

This library helps you create an asynchronous version of the instance of that Class. The instance will have (almost) the same API as the original one, but will run its computations in a separate thread.

// New, multi thread, async way
import { threadedClass} from  'threadedclass'
import { Professor } from './professor'

async function getStory() {
  let mrSmith = await threadedClass<Professor>('./professor', Professor, ['maths', 'greek'])
  let story = await mrSmith.talkAboutAncientGreece() // still takes a loong time, but now runs in a separate process
  return story
}

The instance returned by makeThreaded() has methods equivalent to the original, but all return values will instead be Promises.

API

Typescript

import { threadedClass} from  'threadedclass'
import { Professor } from './professor'

threadedClass<Professor>(
    './professor',     // Path to imported module (this should be the same path as is in require('XX') or import {class} from 'XX'} )
    Professor ,        // The class to be forked
    ['maths', 'greek'] // An array of arguments to be fed into the class constructor
)
.then((instance) => {
    return mrSmith.talkAboutAncientGreece() // All methods returns a Promise
})
.then((story) => {
    console.log(story)
})

Javascript

var threadedClass = require('threadedclass').threadedClass
var Professor = require('./professor')

threadedClass('./professor', Professor, ['maths', 'greek'])
.then((instance) => {
    return mrSmith.talkAboutAncientGreece() // All methods returns a Promise
})
.then((story) => {
    console.log(story)
})

Features

  • Supports classes imported from your own modules, external dependencies & native Node modules
  • When calling methods of instances, supported argument types are: numbers, strings, JSON-able objects, Buffers & callback functions (more to come)
  • Supports EventEmitters

Known limitations

  • The classes referenced must not be referencing any global variables, as they run in their own sandbox
  • Remember that a new Node-process is spawned for every instance created (a few MBs of memory, so don't create too many)

Todo

  • Browser support, using web-workers instead of child_process
  • Testing