рдореИрдВ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдЦрдмреНрд░реЛрд╕реЛрдХреЛрдореБрдирд┐рдЯреА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕ рд╕рд╛рдореВрд╣рд┐рдХ рдЦреБрдлрд┐рдпрд╛ рдмреИрдВрдХ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ
- рдореИрдВ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рд╢реНрд░рдорд┐рдХ (рд╡реЗрдм-рд╢реНрд░рдорд┐рдХ), рдПрдХ рддрдХрдиреАрдХ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдХреЛрдб рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдХреЛрдб GUI рдХреЛ рдзреАрдорд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкреГрд╖реНрда рдкрд░ рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ, рдЬреЛ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рдбреНрд░рд╛рдЗрдВрдЧ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдпрд╛ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдЬреИрд╕реЗ рдЧрдгрдирд╛ рдХреА рдорд╛рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрдХрд░реНрд╖рдХ рдмрдирд╛рддрд╛ рд╣реИред
рдХреМрди рдЕрднреА рддрдХ рдЗрд╕ рддрдХрдиреАрдХ рд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ -
рдпрд╣рд╛рдВ рдЖрдк рдЗрд╕рдХреЗ рдореВрд▓ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдиреАрдЪреЗ, рдПрдХ рдЫреЛрдЯреА рд╕реА рдЬреАрд╡рди рд╣реИрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрдорддреМрд░ рдкрд░, рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдп рд╣реИ, рддреЛ рд╣рдо рдмрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
рдмрд╛рд╣рд░ (рдкреЗрдЬ рдХреЛрдб рдореЗрдВ):
var worker = new Worker("myscript.js"); worker.onmessage (event.data){workerallback(event.data);} function workerallback(data){ } worker.postMessage({some:"some"});
рдЕрдВрджрд░ (рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВ):
onmessage = function (event) {postMessage(mySingleFunction(event.data));}
рдЕрдм рддрдХ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрд╕ рд╡рд░реНрдХрд░ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдмрд╛рд╣рд░ рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдмрдврд╝ рдЬрд╛рдПрдЧреА, рдФрд░ рдпрд╣ рдЗрддрдирд╛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛:
рдмрд╛рд╣рд░:
function firstFunctionallback(data){ } function secondFunctionallback(data){ } worker.onmessage (msg){ if(msg.data.callback == "firstFunctionallback"){ firstFunctionallback(msg.data.result); } if(msg.data.callback == "secondFunctionallback"){ firstFunctionallback(msg.data.result); } } worker.postMessage({functionName: "firstFunction", data: data);
рдЕрдВрджрд░:
onmessage = function (event) { var functionName = event.data.functionName; if(functionName == "firstFinction"){ postMessage({callback: "firstFunctionallback", result: firstFinction(event.data.data)}); } if(functionName == "secondFunction"){ postMessage({callback: "secondFunctionallback", result: secondFunction(event.data.data)}); } ... }
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдХреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░, рдмрд╛рд╣рд░ рдФрд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдЕрдВрджрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдХрд╛рдо рдХреЛ рдХрд░реЗрдЧрд╛ред
рд╣рдо рдРрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреНрд░рдорд╢рдГ рдкрд░рдлреЙрд░реНрдорд░ рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдмрд╛рд╣рд░реА рдХреЛрдб рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ:
function Performer(scriptSource) { var worker = new Worker(scriptSource), callbacks = {}, nextRequestId = 0; this.perform = function(functionName, params, callback) { callbacks["request_" + (++nextRequestId)] = callback; worker.postMessage( {functionName: functionName, params: params, requestId: nextRequestId} ); } worker.onmessage = function(msg) { callbacks["request_" + msg.data.requestId](msg.data.result); delete callbacks["request_" + msg.data.requestId]; } }
рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХреЛрдб рдореЗрдВ, рдмрд╛рд╣рд░реА рд╕рдВрджреЗрд╢ рд╣реИрдВрдбрд▓рд░ рдмрджрд▓реЗрдВ:
onmessage = function (event) { var requestId = event.data.requestId; var workerFunction = eval(event.data.functionName); var params = event.data.params; var result = workerFunction(params); postMessage({result: result, requestId: requestId}); }
рдЕрдм, рдЖрдк рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдХреЛрдИ рднреА рдХрд╛рд░реНрдп рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрд╛рд╣рд░ рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╣рд╛рдпрдХ рдХреЛрдб рд▓рд┐рдЦреЗ рдмрд┐рдирд╛, рдФрд░ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдЕрдирд╛рдо рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
var performer = new Performer("myscript.js"); performer.perform("firstFunction", {some: "some"}, function(result){console.log("result1="+result);}); performer.perform("secondFunction", {some: "some"}, function(result){console.log("result2="+result);});
рдпрджрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдПрдХ рдЕрд▓рдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкреГрд╖реНрда рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд╣реИ,
рдЙрд╕рдХреЗ рдмрд╛рдж рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд░ рдЕрдВрддрд░реЛрдВ рдХреЛ рдХрд▓рд╛рдХрд╛рд░ рдХреЛрдб рдореЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрдирдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ, рдХрд░реНрддрд╛ рдХреЛ рдЖрд░рдореНрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдХрд░реНрддрд╛ рдХрд╛ рднрд╛рдЧ рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
function Performer(scriptText) { var worker = null; try {
рдФрд░ рдирд┐рд░реНрдорд╛рдг, рдХреНрд░рдорд╢рдГ, рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
var performer = new Performer($('#myscript').text());
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рднреА рдЬреЛ рд╢реНрд░рдорд┐рдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛрдб рдЕрднреА рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛, рдмрд╕ рдзреАрдорд╛ред
UPD: рдПрдХ рдЖрдордВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рд▓рд╛рднрд╛рд░реНрдереА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж)ред