HTML5 рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИред рдЗрд╕рдХрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рд╡реЗрдм рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рддрдХрдиреАрдХ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ, рдЬреЛ рдХреБрдЫ рд╣рдж рддрдХ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрджрд┐ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЗрд╕рдХреА рд╕рдорд╛рдирддрд╛ рд╣реИред
рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХрд╛ рд╕рд╛рд░ рд╕рд░рд▓ рд╣реИ - рдлрд╝рдВрдХреНрд╢рди рдЬреЛ AJAX рдХреЗ рдХрд╛рдордХрд╛рдЬ рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди, рдЬреЛ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдПрдХ рдкреГрд╖реНрда рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЧрддрд┐ рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВ, рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдлрд╛рдЗрд▓реЗрдВ рдЬрд░реВрд░рдд рд╕реЗ рдЬреНрдпрд╛рджрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЬрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рд╛рдЗрдб рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдХрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдХрдИ рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм рд╢реНрд░рдорд┐рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
if (!!window.Worker) {
рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
var worker = new Worker( );
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ:
рдкреЛрд╕реНрдЯрдорд╛рд╕реЗрдЬ (); // рдкреНрд░рдореБрдЦ рд╡рд┐рдзрд┐ рдЬреЛ рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рддреА рд╣реИ
onmessage (); // рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдЬрдм рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реНрдордЪрд╛рд░реА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред
рдУрдирд░ (); // рд╡рд┐рдзрд┐ рдЬрдм рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ
рдЕрдм рд╣рдо рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдЦреБрдж рдлрд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдХрд╛ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВред рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ред рдЕрдВрджрд░ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдбрд╛рд▓рддреЗ рд╣реИрдВ:
onmessage = function(ev) { var answ = ev.data; };
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
var worker = new Worker('worker.js'); worker.postMessage('Hello World');
Ev рд╡реИрд░рд┐рдПрдмрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░реЙрдкрд░реНрдЯреА рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рд╣рдорд╛рд░реЗ рдлрдВрдХреНрд╢рди 'рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд░реНрд▓реНрдб' рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬреЛ рд╣рдо рдлрдВрдХреНрд╢рди рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рд╣реЛрдЧрд╛ред рдЖрдк рдЬрдЯрд┐рд▓ рд╡рд╕реНрддреБрдУрдВ рд╕рд╣рд┐рдд рдХреБрдЫ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдХрд░реНрдордЪрд╛рд░реА рдХреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд▓реМрдЯрд╛рдПрдВрдЧреЗред рдХрд░реНрдордЪрд╛рд░реА рдХреЛрдб рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдХреЛ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
postMessage(answ);
рдФрд░ рдореБрдЦреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рд╣рдо рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдПрдХ рдХрд░реНрдордЪрд╛рд░реА рджреНрд╡рд╛рд░рд╛ рд╕рдВрджреЗрд╢ рдЖрдиреЗ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:
worker.onmessage = function (event) { alert(event.data); };
рдпреБрдкреАрдбреА:рдбреАрдорд╛рд░реНрдХ рд╕реЗ рдЬреЛрдбрд╝реЗрдВ:
рдореБрдЭреЗ рдпрд╣ рднреА рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ HTML5 рдЖрдкрдХреЛ рдмрд╛рд╣рд░реА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╡реЗрдм рд╡рд░реНрдХрд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
blobBuilder'a:
var worker = new Worker( window.URL.createObjectURL( new BlobBuilder().append( "onmessage = function(e) { postMessage('hello habrahabr'); }" ).getBlob() ) ); worker.postMessage();
рдмрд╕ рдЗрддрдирд╛ рд╣реА! рдХреЛрдИ рднреА рдХрд░реНрдордЪрд╛рд░реА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд░реНрдордЪрд╛рд░реА рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдпрд╣ рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЬреИрд╕реЗ:
1. рдПрдХ рдХрд░реНрдордЪрд╛рд░реА рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ DOM рддрдХ рдирд╣реАрдВ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ред DOM рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХрд░реНрдордЪрд╛рд░реА рдХреЗ рднреАрддрд░ рдЕрдкреНрд░рд╛рдкреНрдп рд╣реИред рдЬрд┐рд╕рдореЗрдВ рдЕрд▓рд░реНрдЯ () рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
2. рдХрд░реНрдордЪрд╛рд░реА рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреА рдкрд╣реБрдВрдЪ рд╣реИ:
2.1 рдирд╛рд╡рд┐рдХ
2.2 рд╕реНрдерд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ (рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП)
2.3 рдЖрдпрд╛рдд () рд╡рд┐рдзрд┐ (рдПрдХ рд╣реА рдбреЛрдореЗрди рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)
2.4 рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреИрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ, рдПрд░реЗ, рдбреЗрдЯ, рдореИрде, рд╕реНрдЯреНрд░рд┐рдВрдЧ
2.5 XMLHttpRequest
2.6 setTimeout () рдФрд░ setInterval () рд╡рд┐рдзрд┐рдпрд╛рдБ
рддреЛ рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рд╣реИ? рдФрд░ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рд╡рд╕реНрддреБрдПрдВ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдкреГрд╖реНрда рдХреЗ рдЧрдарди рдХреЛ рд░реЛрдХрд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛, рдЬрдмрдХрд┐ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдФрд░ рдЕрдм рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЬреЛ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рд▓реЗрдЦ рдореЗрдВ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: AJAX рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкрд░реНрдпрд╛рдкреНрдд рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, POST рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ SYNCHRONOUS рдЕрдиреБрд░реЛрдз рднреЗрдЬрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ ред рдХрд╛рд░рдг рд╕рд░рд▓ рд╣реИ: рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕рд░реНрд╡рд░ рдХреЗ рдЬрд╡рд╛рдм рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рддрд╛рд░реНрдХрд┐рдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛ рдХрд┐ рдЗрд╕реЗ GET рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЙрдареЗрдЧрд╛, рдЪреВрдВрдХрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧреЗ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореБрдЦреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд┐рдирд╛ рд╕реНрдЯреЙрдк рдХреЗ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред
рд╕рд░рд▓ рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЧрддрд┐ рдореЗрдВ рд▓рд╛рдн рдиреНрдпреВрдирддрдо рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдЯрд┐рд▓ рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде, рдЖрдк рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХрд╛рдлреА рддреЗрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреВрдВрдЧрд╛:
1ред
рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╡рд╕реНрддреБ:
function AJAXprov() { var xmlhttp; var answServ; this.provXmlHttp = function() { var xmlhttp; try { xmlhttp = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { try { xmlhttp = new ActiveXObject('Microsoft.XMLHTTP'); } catch (E) { xmlhttp = false; } } if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp = new XMLHttpRequest(); } return xmlhttp; }
2ред
рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛
onmessage = function (obj) { importScripts("/JS/classes/AjaxClass.js "); var ajObj = new AJAXprov(); httpP = ajObj.provXmlHttp(); obj = obj.data; answ = ajObj.sendAnsServ(objEx.mode, objEx.type, objEx.adress, objEx.parametrs, objEx.ID); postMessage(answ); }
рдлреЛрди:
function crWorkerAjax(param, id, cb) { var workerAjax = new Worker("/JS/workers/ajaxWorker.js"); var objEx = { mode:false, type:'P', adress:'/router.php', parametrs:param, ID:id, }; workerAjax.onmessage = function (obj) { var res = eval(obj['data']); cb.call(this, res, id); } workerAjax.onerror = function(err) { alert(err.message); } workerAjax.postMessage(objEx); }
UPD2:
Yui_room9 рдХреЗ рдЖрдЧреНрд░рд╣рдкреВрд░реНрдг рдЕрдиреБрд░реЛрдз рдкрд░
, рдореИрдВ рд╡реЗрдмрдХрд┐рдЯ рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдЙрдирдХрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ
рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВрдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП:
if (!!window.Worker){ var worker = new Worker('worker.js'); worker.postMessage('Hellow World'); worker.onmessage = function (e){ alert(e.data); }; } worker: onmessage = function(e){ transport = new XMLHttpRequest(); transport.open('GET', 'data.txt', true); transport.onreadystatechange = function(){ if(transport.readyState == 4){ postMessage(transport.response); } }; transport.send(); };
рдЦреИрд░, data.txt рдореЗрдВ рд╣рдо рд╕рд┐рд░реНрдл рдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдЯреЗрдХреНрд╕реНрдЯ рд╢реЗрд╡ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ "рдЯреЗрд╕реНрдЯрд┐рдВрдЧ123" рдХреЛ рджреЗрдЦрд╛ред
рдЖрдк рд╕рднреА рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред