Giter Site home page Giter Site logo

easyworker's Introduction

EasyWorker

Make web worker easy to use.
让 Web Worker 更易用.

例子在这里

EasyWorker 是什么

由于js单线程执行的特性,在需要js做大量的运算时,页面会卡死,Web worker提供了一个不错的并行执行的方案,让复杂运算的js可以在新的环境中运行,但是不能支持函数的调用等,只能使用onmessage和postMessage方法来进行主程序和Worker之间的通讯。EasyWorker就是为了解决这样的问题而编写的,它可以实现Worker直接执行函数,并且可以通过回调进行通讯。

EasyWorker 怎么用

var worker = new EasyWorker(); // 初始化一个EasyWorker

function say(msg) {
    console.log(msg);
}

worker.run(function(callback, to) {
    /*** 这里是Worker运行环境 ***/
    callback("Hello " + to);
    return "Done";
    /*** Worker 运行环境结束 ***/
}, say, "world") // 在Worker环境中执行函数, 并传入参数
.done(function(err, ret) { // 设置执行完成后的回调函数
    if (err) throw err;
    console.log("return value :" + ret);
    worker.end();
});

console 支持

由于在有些浏览器的 Web Worker 作用域中没有console支持,无法方便的调试,所以Web Worker也封装了console的函数,方便在worker中调用。

var worker = new EasyWorker();
	worker.run(function(){
		console.log("hello world.");
	});

常见错误

由于浏览器实现不能支持作用域之间的调用,所以在Web Worker中执行的函数只能通过参数的形式与主作用域通讯。
另外,除了函数外,也不能传递其他不能无法串行化的数据。(EasyWorker 封装了函数的调用和传递)

var worker = new EasyWorker(),
	data = "Some data";

	worker.run(function(){
		return data; //不能取到主作用域的数据
	});
	
	worker.run(function(data){
		return data; //可以通过参数的形式进行传递
	}, data);

	worker.run(function(element){
		element.innerHTML = "hello";
	}, document.getElementById("id")); // Element不能通过参数传递
	
	worker.run(function(callback){
		callback("hello");
	}, function(html){
		document.getElementById("id").innerHTML = html; // 可以通过回调的方式来实现
	});

跨域问题

由于在浏览器环境中EasyWorker默认使用Blob来创建Web Worker中的代码,所以当在Worker执行的函数中使用AJAX或者importScripts时,会产生跨域问题,您可以通过指定Web worker脚本地址来解决

var worker = new EasyWorker();
	worker.run(function(){
		importScripts("somescript.js"); //会产生跨域问题
	});
	
	worker = new EasyWorker("EasyWorker.js"); //指定EasyWorker库地址
	worker.run(function(){
		importScripts("somescript.js"); //这样就不会有问题了
	});

easyworker's People

Stargazers

 avatar Sun Qun avatar Kan Xu avatar 唐霜 avatar 吕晟 avatar Jet.Fine avatar 陈材华 avatar  avatar HuangYi avatar

Watchers

 avatar James Cloos avatar 荣威 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.