рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ DIRTY, рдЕрд╕реБрд░рдХреНрд╖рд┐рдд, "рдмреИрд╕рд╛рдЦреА", рдбрд░рд╛рд╡рдирд╛, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рджрд┐рд▓ рдХреА рдзрдбрдХрди рдирд╣реАрдВ рдкрдврд╝рддреА!
рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреБрдЫ рдкреНрд░рдпреЛрдЬреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛: рдЖрдк рдЙрд╕ рдХреЛрдб рдореЗрдВ рдХреНрд▓реЛрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╣рдо рд╕рднреА рдирдИ рддрдХрдиреАрдХреЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрди рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдиреЗ рдкрд░ рд╣рдо рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИред рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдореИрдВ рдХрд┐рд╕реА рднреА рдХрд╛рдо рдХреЛ рдордЬрд╝рджреВрд░ рдХреЗ рд▓рд┐рдП рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ, рди рдХрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рдпреЛрдЬрд┐рдд рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВред
рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд:
- рдХрд┐рд╕реА рднреА рд╕рдордп рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рдордирдорд╛рдирд╛ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
- рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ (рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг, рдХрд╛рд░реНрдп)
- рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╡рд╛рджрд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдФрд░ рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдВрдЪрд╛рд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗрд╡рд▓ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдФрд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕рдВрд╡рд╛рдж рдХрд░реЗрдВрдЧреЗред рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЖрдИрдбреА рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рд╣реЛрдЧрд╛ред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджреЗрд╢ рд╣реЛрдВрдЧреЗ:
- рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп / рдлрд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝рдирд╛
- рдХрд╛рдо рдХрд╛ рд╢реБрднрд╛рд░рдВрдн
рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдЕрдВрджрд░ рдлрд╛рдЗрд▓
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдПрдХ рд╢реНрд░рдорд┐рдХ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдПрдХ рдлрд╛рдЗрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧреА рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧреАред рдореБрдЭреЗ рдУрдУрдкреА рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рд╡рд░реНрдХрд░рдмреЙрдбреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдореВрд▓ рд╡рд┐рдВрдбреЛ рд╕реЗ рдИрд╡реЗрдВрдЯ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреА рдЪрд╛рд╣рд┐рдПред
self.onmessage = (message) => { this.onMessage(message.data); };
рдЕрдм рд╣рдо рдореВрд▓ рд╡рд┐рдВрдбреЛ рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдШрдЯрдирд╛рдПрдБ рд╣реИрдВ: рдЬрд┐рдирдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рдирд┐рд╣рд┐рдд рд╣реИ, рдФрд░ рдЕрдиреНрдп рд╕рднреАред рд╣рдо рдШрдЯрдирд╛рдУрдВ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВред
рд╡рд░реНрдХрд░ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдкреНрд▓рд┐рдореЗрдВрдЯрд╢рд┐рдк рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдФрд░ рд╕рдмрд╕реЗ рдмреБрд░реА рдмрд╛рдд: рд╣рдо рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП eval рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
... onMessage(message) { switch (message.type) { case MESSAGE_TYPE.ADD_LIBS: this.addLibs(message.libs); break; case MESSAGE_TYPE.WORK: this.doWork(message); break; } } doWork(message) { try { const processor = eval(message.job); const params = this._parser.parse(message.params); const result = processor(params); if (result && result.then && typeof result.then === 'function') { result.then((data) => { this.send({ id: message.id, state: true, body: data }); }, (error) => { if (error instanceof Error) { error = String(error); } this.send({ id: message.id, state: false, body: error }); }); } else { this.send({ id: message.id, state: true, body: result }); } } catch (e) { this.send({ id: message.id, state: false, body: String(e) }); } } send(data) { data.body = this._serializer.serialize(data.body); try { self.postMessage(data); } catch (e) { const toSet = { id: data.id, state: false, body: String(e) }; self.postMessage(toSet); } }
рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП onMessage
рд╡рд┐рдзрд┐ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, doWork
- рдкрд╛рд░рд┐рдд рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрднрд┐рднрд╛рд╡рдХ рд╡рд┐рдВрдбреЛ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрддрд╛ рд╣реИред
рдкрд╛рд░реНрд╕рд░ рдФрд░ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ
рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рд╣реИ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЛ рдХреНрд░рдордмрджреНрдз рдФрд░ рдкрд╛рд░реНрд╕ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдЗрд╕реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рд╕реЗред рд╣рдо рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг, рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреА рдореВрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде, рд╣рдо рдХреЗрд╡рд▓ JSON- рдЬреИрд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рд╖реНрдХрд╛рд╕рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдЬреЛ JSON рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╣рдо рдЗрд╕реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд▓рдкреЗрдЯреЗрдВрдЧреЗ рдФрд░ рджреВрд╕рд░реА рддрд░рдл рдЪрд▓реЗрдВрдЧреЗред рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рдордХреНрдЦреА рдкрд░ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрд┐рд╕реЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рддрд░реАрдХреЛрдВ рд╕реЗ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЙрд╕реЗ рд╕реЗрд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡реЗ рдмрджрд▓реЗ рдореЗрдВ, рджреВрд╕рд░реА рддрд░рдл рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рд▓реЗ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдп рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдиреБрдХрд╕рд╛рди рд╣реИрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реАрдорд╛ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рд╣реИ, рдЬреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдереЛрдбрд╝реА рдЕрд▓рдЧ рд╢реИрд▓реА рдХреЛ рд╡рд╣рди рдХрд░рддреА рд╣реИред рдЪрд▓реЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рд╕реАрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдПрдХ рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕реЗ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЪрд▓реЛ рднреЗрдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:
static isFunction(Factory){ if (!Factory.prototype) {
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдХрд╛рд░реНрдп рд╣реИред рдлрд┐рд░ рд╣рдо рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдЧреБрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдЧрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдХреЗрд╡рд▓ рдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдХреЗ рд╡рд╛рд░рд┐рд╕ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдорд╛рдирддреЗ рд╣реИрдВред
рдПрдХ рдлрдВрдХреНрд╢рди рдорд┐рд▓рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдмрд╕ рдЗрд╕реЗ __type = "serialized-function"
рдФрд░ template
рд╕рд╛рде рдПрдХ рд╕рд░реНрд╡рд┐рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде __type = "serialized-function"
, рдЬреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди ( func.toString()
) рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред
рдЕрднреА рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╛рд╕ рдЫреЛрдбрд╝реЗрдВ рдФрд░ рдХреНрд▓рд╛рд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВред рдбреЗрдЯрд╛ рдореЗрдВ рдЖрдЧреЗ рд╣рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
static isInstance(some) { const constructor = some.constructor; if (!constructor) { return false; } return !Serializer.isNative(constructor); } static isNative(data) { return /function .*?\(\) \{ \[native code\] \}/.test(data.toString()); }
рд╣рдо рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдирддреЗ рд╣реИрдВ рдпрджрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдЗрд╕рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдПрдХ рджреЗрд╢реА рдХрд╛рд░реНрдп рд╣реИред рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕реЗ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗрд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
__type
- 'рдХреНрд░рдордмрджреНрдз-рдЙрджрд╛рд╣рд░рдг'data
- рдбреЗрдЯрд╛ рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдерд╛index
- рд╡рд░реНрдЧ рд╕реЗрд╡рд╛ рд╕реВрдЪреА рдореЗрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╡рд░реНрдЧ рд╕реВрдЪрдХрд╛рдВрдХред
рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЗрд╕рдореЗрдВ рд╣рдо рдЙрди рд╕рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рд╣рд┐рд╕реНрд╕рд╛ рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдкрд░ рди рдХреЗрд╡рд▓ рдЗрд╕рдХрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓реЗрдирд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рднреА рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рднреА рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рд╣реИ - рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ "рдорд╛рддрд╛-рдкрд┐рддрд╛" рдХреЛ рдПрдХ рдмрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдкрд╛рд╕ рди рдХрд┐рдпрд╛ рдЬрд╛рдП - рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХреЛ рд╕рд╣реЗрдЬреЗрдВред рдПрдХ рдХрдХреНрд╖рд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ: рдпрд╣ рдПрдХ рдРрд╕рд╛ рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ Serializer.isFunction рдкрд░реАрдХреНрд╖рдг рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХрдХреНрд╖рд╛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рд╣рдо рдЕрдиреБрдХреНрд░рдорд┐рдд рдбреЗрдЯрд╛ рдХреА рд╕реВрдЪреА рдореЗрдВ рдРрд╕реА рдХрдХреНрд╖рд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдЕрдирдиреНрдп рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдХреЛрдб рдХреЛ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реИ ред
рдкрд╛рд░реНрд╕рд░ рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рд╕рднреА рдкрд╛рд╕ рдХреА рдЧрдИ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рд╡реЗ рдкрд╣рд▓реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕реЗрд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдФрд░ рдРрд╕рд╛ рдбреЗрдЯрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдерд╛, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рддреБрд░рдВрдд рдирд╣реАрдВ рднреЗрдЬ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдореЗрдВ рдРрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИрдВред рдПрдХ рд▓рдЧрднрдЧ рднреВрд▓реА рд╣реБрдИ рд╡рд╕реНрддреБред рд╡рд┐рдзрд┐ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддреА рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВ рдФрд░ рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдЧреБрдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдпрдХрд░реНрддрд╛
рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдЕрдВрджрд░ рдФрд░ рдмрд╛рд╣рд░ рдПрдХ рдкрд╛рд░реНрд╕рд░ рдФрд░ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ, рдкрд╛рд░реНрд╕рд░ рдФрд░ рд╢рд░реАрд░ рдХреЛ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВред рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдПрдХ рдмреВрдБрдж рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ URL.createObjectURL рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдбрд╛рдЙрдирд▓реЛрдб рд▓рд┐рдВрдХ рдмрдирд╛рддреЗ рд╣реИрдВ (рдпрд╣ рд╡рд┐рдзрд┐ рдХреБрдЫ "рд╕рд╛рдордЧреНрд░реА-рд╕реБрд░рдХреНрд╖рд╛-рдиреАрддрд┐" рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИ)ред рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдордирдорд╛рдирд╛ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреБрдХреНрдд рд╣реИред
_createWorker(customWorker) { const template = `var MyWorker = ${this._createTemplate(customWorker)};`; const blob = new Blob([template], { type: 'application/javascript' }); return new Worker(URL.createObjectURL(blob)); } _createTemplate(WorkerBody) { const Name = Serializer.getFnName(WorkerBody); if (!Name) { throw new Error('Unnamed Worker Body class! Please add name to Worker Body class!'); } return [ '(function () {', this._getFullClassTemplate(Serializer, 'Serializer'), this._getFullClassTemplate(Parser, 'Parser'), this._getFullClassTemplate(WorkerBody, 'WorkerBody'), `return new WorkerBody(Serializer, Parser)})();` ].join('\n'); }
рдкрд░рд┐рдгрд╛рдо
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдПрдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рд╛рдкреНрдд рдХреА рд╣реИ рдЬреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рдордирдорд╛рдирд╛ рдХреЛрдб рдЪрд▓рд╛ рд╕рдХрддреА рд╣реИред рдпрд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
const wrapper = workerWrapper.create(); wrapper.process((params) => {
рдЖрдЧреЗ рдХреА рдпреЛрдЬрдирд╛
рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рд╡рд░реНрдЧреЛрдВ, рд╡рд╕реНрддреБрдУрдВ, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк, рд╕реНрдерд┐рд░ рдЧреБрдгреЛрдВ рдкрд░ рдмрд╕рдиреЗ рдФрд░ рдкрд╛рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣рдо рдХреИрд╢рд┐рдВрдЧ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, URL.createObjectURL рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░рди рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рдпрджрд┐ рдирд┐рд░реНрдорд╛рдг рдордХреНрдЦреА рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ)ред рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЖрдУ!