Giter VIP home page Giter VIP logo

threadedclass's Introduction

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

threadedclass's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.