Skip to content
This repository has been archived by the owner on Jul 17, 2024. It is now read-only.

gpgkd906/threads.js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

Releases

No releases published

Packages

No packages published