threads.js

lightweight thread api implementation with es6 api

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
threads.js
200.6.18 years ago8 years agoMinified + gzip package size for threads.js in KB

Readme

thread.js

What is thread.js

threads is a lightweight thread api with es6 syntax.
and when you with the latest Chrome/Firefox/Edge, it use WebWorker to free boost your application with extra processor.
(safari do not support let/const syntax yet so it throw errors, but you can rewrite it to use var syntax--just a little work, if you want.)

How to use it

you could not to be confusion.
there is only one api: Thread.spawn
Thread.spawn receives only one parameter, an object like
{
	data: data,
	move: [tansferable],
	fn: function (data) {},
}
and returns a Promise object.

Notice

which fn you give will be run in an Standalone environment, so you can not refer to your main context inside the fn.

with chrome/firefox

<script src="lib/Thread.js"></script>
Thread.spawn({
	data: data,
	fn: function(data) {
		 "use strict";
		 let result = data;
	    return result;
	}
}).then(function(result) {
	console.log(result);
});

with nodejs

var Thread = require("threads.js").Thread;

Thread.spawn({
	data: data,
	fn: function(data) {
		"use strict";
		let result = data;
   		return result;
	}
}).then(function(result) {
	console.log(result);
});

run example from node
$ node --harmony_destructuring example.js

get it faster with browser

use move option to transfer big data without copy-cost.
Transferable
"use strict";
let count = 10;
let startTime = Date.now();
for(let i = 0; i < count; i++) {
    let data = new Uint8Array(10*1024*1024);
    Thread.spawn({
		data: data,
		move: [data.buffer],
		fn: function(data, move) {
			"use strict";
			for(let i in data) {
				//do something
			}
			move(data.buffer);
			let result = data;
	 	  	return result;
		}
    }).then(function(result) {
		console.log((Date.now() - startTime) + " ms");
    }).catch(error => {
    	console.log(error);
    });
}
What is next?
I will replace prototype to Class when Chrome/Firefox/Safari/Edge is ready.
and other es6(or es7?) syntax when at least 2 browser support it.
Issue
Anything will be receive, please tell me.
License
Licensed under the MIT License.