рд╢реНрд░рдорд┐рдХреЛрдВ (рд╡реЗрдм-рд╢реНрд░рдорд┐рдХреЛрдВ) рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд╛ рдЕрдиреБрдХреВрд▓рди

рдореИрдВ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдЦрдмреНрд░реЛрд╕реЛрдХреЛрдореБрдирд┐рдЯреА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕ рд╕рд╛рдореВрд╣рд┐рдХ рдЦреБрдлрд┐рдпрд╛ рдмреИрдВрдХ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ
- рдореИрдВ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рд╢реНрд░рдорд┐рдХ (рд╡реЗрдм-рд╢реНрд░рдорд┐рдХ), рдПрдХ рддрдХрдиреАрдХ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдХреЛрдб рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдХреЛрдб GUI рдХреЛ рдзреАрдорд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкреГрд╖реНрда рдкрд░ рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ, рдЬреЛ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рдбреНрд░рд╛рдЗрдВрдЧ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдпрд╛ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдЬреИрд╕реЗ рдЧрдгрдирд╛ рдХреА рдорд╛рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрдХрд░реНрд╖рдХ рдмрдирд╛рддрд╛ рд╣реИред

рдХреМрди рдЕрднреА рддрдХ рдЗрд╕ рддрдХрдиреАрдХ рд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ - рдпрд╣рд╛рдВ рдЖрдк рдЗрд╕рдХреЗ рдореВрд▓ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдиреАрдЪреЗ, рдПрдХ рдЫреЛрдЯреА рд╕реА рдЬреАрд╡рди рд╣реИрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрдорддреМрд░ рдкрд░, рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдп рд╣реИ, рддреЛ рд╣рдо рдмрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

рдмрд╛рд╣рд░ (рдкреЗрдЬ рдХреЛрдб рдореЗрдВ):

var worker = new Worker("myscript.js"); worker.onmessage (event.data){workerallback(event.data);} function workerallback(data){ /*do something with data object;*/} worker.postMessage({some:"some"}); 


рдЕрдВрджрд░ (рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВ):

 onmessage = function (event) {postMessage(mySingleFunction(event.data));} 


рдЕрдм рддрдХ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрд╕ рд╡рд░реНрдХрд░ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдмрд╛рд╣рд░ рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдмрдврд╝ рдЬрд╛рдПрдЧреА, рдФрд░ рдпрд╣ рдЗрддрдирд╛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛:

рдмрд╛рд╣рд░:

 function firstFunctionallback(data){ /*do something with data object;*/} 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 {// Firefox var Url = window.webkitURL || window.URL; worker = new Worker(Url.createObjectURL(new Blob([ scriptText ]))); } catch (browserNotSupportWindowUrl) { try {// Chrome worker = new Worker('data:application/javascript,' + encodeURIComponent(scriptText)); } catch (browserNotSupportWorkers) {// Opera eval(scriptText); worker = { postMessage : function(data) { var workerFunction = eval(data.functionName); worker.onmessage({ data : { result : workerFunction(data.params), requestId : data.requestId } }); } }; } } ... } 


рдФрд░ рдирд┐рд░реНрдорд╛рдг, рдХреНрд░рдорд╢рдГ, рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

 var performer = new Performer($('#myscript').text()); 


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рднреА рдЬреЛ рд╢реНрд░рдорд┐рдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛрдб рдЕрднреА рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛, рдмрд╕ рдзреАрдорд╛ред

UPD: рдПрдХ рдЖрдордВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рд▓рд╛рднрд╛рд░реНрдереА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж)ред

Source: https://habr.com/ru/post/In207890/


All Articles