рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реВрдВред рдЗрд╕ рдмрд╛рд░, HTML5 рдХреИрдирд╡рд╛рд╕ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдПрдХ HTML5Rocks рд▓реЗрдЦред рд▓реЗрдЦрдХ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рджреАрд╡рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рддреЗ рд╕рдордп рдЖрд░рд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, рдореИрдВ рдПрдХ рдкреБрд░рд╛рдиреЗ рдЦреЗрд▓ рдХреЛ рдХреИрдирд╡рд╕ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╕рдордп рднреА рдЙрд╕рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рдерд╛ред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореВрд▓ рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдПрдХ iframe рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЪрд┐рддреНрд░ рд▓реЗ рд╕рдХрддрд╛ рдерд╛ рдФрд░ рдЙрдирдХреА рдЫрд╡рд┐рдпрд╛рдВ рд░рдЦ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд▓реЗрдЦрдХ рд╕реНрд╡рдпрдВ рд╣реА рдЧреНрд░рд╛рдлрд╝ рдХреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдЙрдирдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдкреЛрд╕реНрдЯ рдХрд┐рдП рд╣реИрдВред рдЕрдЪреНрдЫрд╛ рдкрдврд╝ рд▓реЛ!
- рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
- рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг
- рд╡рд░реНрдЪреБрдЕрд▓ рдХреИрдирд╡рд╛рд╕ рдореЗрдВ рдкреНрд░реА-рд░реЗрдВрдбрд░
- рд╕рдореВрд╣ рдХреЙрд▓
- рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЕрд╡рд╕реНрдерд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдмрдЪреЗрдВ
- рдХреЗрд╡рд▓ рдЕрдВрддрд░ рдХреЛ рдбреНрд░рд╛ рдХрд░реЗрдВ, рд╕рдВрдкреВрд░реНрдг рдХреИрдирд╡рд╛рд╕ рдХреЛ рдирд╣реАрдВ
- рдЬрдЯрд┐рд▓ рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрддрд░рд┐рдд рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
- рдЫрд╛рдпрд╛рд╡рд╛рдж рд╕реЗ рдмрдЪреЗрдВ
- рд╕реНрдХреНрд░реАрди рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ
- рдЧреИрд░-рдкреВрд░реНрдгрд╛рдВрдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реЗ рдмрдЪреЗрдВ
- 'RequestAnimationFrame' рдХреЗ рд╕рд╛рде рдПрдирд┐рдореЗрд╢рди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░реЗрдВ
- рдЕрдзрд┐рдХрд╛рдВрд╢ рдореЛрдмрд╛рдЗрд▓ рдХреИрдирд╡рд╛рд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдзреАрдорд╛ рд╣реИрдВ
- рдирд┐рд╖реНрдХрд░реНрд╖
- рд╕рдВрджрд░реНрдн
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
HTML5 рдХреИрдирд╡рд╛рд╕, рдЬреЛ рдПрдХ Apple рдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ, рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ 2D
рдкреНрд░рддреНрдпрдХреНрд╖ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕реНрд╡реАрдХреГрдд рдорд╛рдирдХ рд╣реИред рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕реЗ рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕, рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдЧреЗрдореНрд╕ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдмрдврд╝рддреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рд╛рде, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреА рджреАрд╡рд╛рд░ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдПрдВред
рдХреИрдирд╡рд╛рд╕ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдХрдИ рдмрд┐рдЦрд░реЗ рд╣реБрдП "рдЯреНрд░рд┐рдХреНрд╕" рд╣реИрдВред рдпрд╣ рд▓реЗрдЦ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рд▓рд╛рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рд░рдЦрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рджреЛрдиреЛрдВ рдореВрд▓рднреВрдд рдЕрдиреБрдХреВрд▓рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рдХреИрдирд╡рд╛рд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрдХрдиреАрдХреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХреИрдирд╡рд╛рд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЬреИрд╕рд╛ рдХрд┐ GPU рддреНрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд░реНрдгрд┐рдд рддрдХрдиреАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрдо рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдпрд╣ рд▓реЗрдЦ HTML5 рдХреИрдирд╡рд╛рд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк HTML5Rocks рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд
рд▓реЗрдЦреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдЕрдзреНрдпрд╛рдп
рдХреЛ HTML5 рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдПрдБ рдФрд░
MDN рдкрд░ рдкрд╛рдаред
рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг
рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдХреИрдирд╡рд╛рд╕ рдХреА рддреЗрдЬреА рд╕реЗ рдкреБрд╕реНрддрдХ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ,
JSPerf (
jsperf.com ) рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рднреА рдЕрдиреБрдХреВрд▓рди рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред JSPerf рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдЙрд╕ рдкрд░рд┐рдгрд╛рдо рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреИрдирд╡рд╛рд╕ рдХреА рд╕рдлрд╛рдИ) рдФрд░ рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВред JSPerf рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдХрдо рд╕рдордп рдореЗрдВ рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╣рдореЗрд╢рд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ!
JSPerf рдкреГрд╖реНрда рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ JSPerf рдХреЛ
Browserscope (browsercope.org) рдкрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЕрдиреБрдХреВрд▓рди рддрдХрдиреАрдХ JSPerf рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ, рдЖрдк рд╣рдореЗрд╢рд╛ рд╡рд╛рдкрд╕ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирд╡реАрдирддрдо рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдпрд╛ рд╡рд╣ рддрдХрдиреАрдХ рдЕрднреА рднреА рд▓рд╛рдЧреВ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╣рд╛рдпрдХ
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓рд┐рдЦрд╛ рдЬреЛ рдЗрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд▓реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рд╕рднреА рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдгрд╛рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдмрдВрдзреЗ рд╣реИрдВред рдпрд╣ рд╕реАрдорд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдУрдПрд╕ рдХрд┐рд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рддрд╣рдд рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдХреИрдирд╡рд╛рд╕ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддреНрд╡рд░рдг рдЪрд╛рд▓реВ рдерд╛ рдпрд╛ рдирд╣реАрдВред рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ
about:gpu
рд▓рд┐рдЦрдХрд░ рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд░реЛрдо рдореЗрдВ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддреНрд╡рд░рдг рд╕рдХреНрд╖рдо рд╣реИ рдпрд╛ рдирд╣реАрдВред
рд╡рд░реНрдЪреБрдЕрд▓ рдХреИрдирд╡рд╛рд╕ рдореЗрдВ рдкреНрд░реА-рд░реЗрдВрдбрд░
рдпрджрд┐ рдЖрдк рдХрдИ рдлрд╝реНрд░реЗрдореЛрдВ рдкрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕рдорд╛рди рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡реНрд╕ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдЧреЗрдо рд▓рд┐рдЦрддреЗ рд╕рдордп рдЕрдХреНрд╕рд░ рд╣реЛрддрд╛ рд╣реИ), рддреЛ рдЖрдк рдмрдбрд╝реЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдСрдлрд╝-рд╕реНрдЯреЗрдЬ рдЦреАрдВрдЪрдХрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЗрдВ рдЖрднрд╛рд╕реА (рдпрд╛ рдЖрднрд╛рд╕реА) рдХреИрдирд╡рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдЕрд╕реНрдерд╛рдпреА рдЪрд┐рддреНрд░ рдЦреАрдВрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╡рд░реНрдЪреБрдЕрд▓ рдХреИрдирд╡рд╕ рдХреЛ рджреГрд╢реНрдпрдорд╛рди рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдВрдкреНрдпреВрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ
рдкреНрд░рджрд░реНрд╢рди рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдиреЗ рдорд╛рд░рд┐рдпреЛ рдХреЛ 60 рдлреНрд░реЗрдо рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдВрдб рдкрд░ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдореЗрдВ рдЙрд╕рдХреА рдЯреЛрдкреА, рдореВрдВрдЫреЗрдВ рдФрд░ "рдПрдо" рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдПрдиреАрдореЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред
рдмрд┐рдирд╛ рдкреВрд░реНрд╡-рдкреНрд░рддрд┐рдкрд╛рджрди:
рдкреВрд░реНрд╡ рдкреНрд░рддрд┐рдкрд╛рджрди:
var m_canvas = document.createElement('canvas'); m_canvas.width = 64; m_canvas.height = 64; var m_context = m_canvas.getContext('2d'); drawMario(m_context); function render() { context.drawImage(m_canvas, 0, 0); requestAnimationFrame(render); }
RequestAnimationFrame рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЬрд┐рд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдирд┐рдореНрди рдЧреНрд░рд╛рдлрд╝ рдкреВрд░реНрд╡-рдкреНрд░рддрд┐рдкрд╛рджрди (
jsperf ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рднреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:
рдЧреНрд░рд╛рдлрд╝ ред
рдпрд╣ рддрдХрдиреАрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡реА рд╣реИ рдЬрдм рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ (рдбреНрд░рд╛рдореЗрд░рд┐рдпреЛ)ред рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рдкрд╛рда рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдПрдХ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реИред рдкреНрд░реА-рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЯреЗрдХреНрд╕реНрдЯ (
jsperf ):
рдЧреНрд░рд╛рдлрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рд╡реГрджреНрдзрд┐ рдХреИрд╕реЗ рд╣реЛрддреА рд╣реИ
рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рдвреАрд▓реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдХрдо рдкреНрд░рджрд░реНрд╢рди рд╕реЗ рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░реА-рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЕрд╕реНрдерд╛рдпреА рдХреИрдирд╡рд╛рд╕ рдореЗрдВ рдЖрдкрдХреА рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП "рддрдВрдЧ" рдЖрдХрд╛рд░ рд╣реЛ, рдЕрдиреНрдпрдерд╛ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рдПрдХ рдмрдбрд╝реЗ рдХреИрдирд╡рд╛рд╕ рдХреЛ рджреВрд╕рд░реЗ рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╕рдордп (рдЬреЛ рдХрд┐ рд▓рдХреНрд╖реНрдп рдХреИрдирд╡рд╛рд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ) рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рдХреИрдирд╡рд╛рд╕ рдХрдо рд╣реИ:
can2.width = 100; can2.height = 40;
рдмрдбрд╝реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ:
can3.width = 300; can3.height = 100;
рд╕рдореВрд╣ рдХреЙрд▓
рдЪреВрдВрдХрд┐ рдкреНрд░рддрд┐рдкрд╛рджрди рдПрдХ рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбреНрд░реЙрдЗрдВрдЧ рд╕реНрдЯреЗрдЯ рдорд╢реАрди рдХреЛ рдЖрджреЗрд╢реЛрдВ рдХреА рд▓рдВрдмреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд╡реАрдбрд┐рдпреЛ рдмрдлрд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ рд░реЗрдЦрд╛рдПрдБ рдЦреАрдВрдЪрддреЗ рд╕рдордп, рд╕рднреА рд░реЗрдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкрде рдмрдирд╛рдирд╛ рдФрд░ рдПрдХ рдХреЙрд▓ рдореЗрдВ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реЗрдЦрд╛рдПрдБ рдЦреАрдВрдЪрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ:
for (var i = 0; i < points.length - 1; i++) { var p1 = points[i]; var p2 = points[i+1]; context.beginPath(); context.moveTo(p1.x, p1.y); context.lineTo(p2.x, p2.y); context.stroke(); }
рдПрдХ рдкреЙрд▓реАрд▓рд╛рдЗрди рдбреНрд░рд╛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ:
context.beginPath(); for (var i = 0; i < points.length - 1; i++) { var p1 = points[i]; var p2 = points[i+1]; context.moveTo(p1.x, p1.y); context.lineTo(p2.x, p2.y); } context.stroke();
рдпрд╣ рдХреИрдирд╡рд╛рд╕ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЬрдЯрд┐рд▓ рд░рд╛рд╕реНрддрд╛
рдмрдирд╛рддреЗ рд╕рдордп, рдЦрдВрдбреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдЙрд╕ рдкрд░ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд░рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ (
jsperf :
graph )ред
рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдХреИрдирд╡рд╕ рдХреЗ рд╕рд╛рде рдЗрд╕ рдирд┐рдпрдо рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдкрд╡рд╛рдж рд╣реИ: рдпрджрд┐ рдЦреАрдВрдЪреА рдЬрд╛ рд░рд╣реА рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рдХреНрд╕ рдХреЗ рдкрд╛рд╕ рдЫреЛрдЯреЗ рдЖрдпрддрд╛рдХрд╛рд░ (рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕) рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╕реЗ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (
jsperf ) -
рдЧреНрд░рд╛рдл ред
рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЕрд╡рд╕реНрдерд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдмрдЪреЗрдВ
рдХреИрдирд╡рд╕ рдХреЛ рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рднрд░рдг рдФрд░ рд╕реНрдЯреНрд░реЛрдХ рд╢реИрд▓рд┐рдпреЛрдВ рдЬреИрд╕реА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдкрд┐рдЫрд▓реЗ рдмрд┐рдВрджреБ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдкрде рдмрдирд╛рддреЗ рд╣реИрдВред рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп, рдбреНрд░рд╛рдЗрдВрдЧ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд▓реЛрднрди рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░рдиреЗ рд╕реЗ рд▓рд╛рдЧрдд рднреА рдЖрддреА рд╣реИред
рдпрджрд┐ рдЖрдк рдПрдХ рджреГрд╢реНрдп рдореЗрдВ рдХрдИ рдлрд┐рд▓ рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреИрдирд╡рд╛рд╕ рдкрд░ рд╕реНрдерд╛рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░рдВрдЧ рд╕реЗ рдкреЗрдВрдЯ рдХрд░рдирд╛ рд╕рд╕реНрддрд╛ рд╣реИред рдПрдХ рдЙрдерд▓реЗ рдкрдЯреНрдЯреА рдореЗрдВ рдПрдХ рдмрдирд╛рд╡рдЯ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд░реЗрдЦрд╛ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рд░рдВрдЧ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд▓реЗ рдФрд░ рдЗрддрдиреЗ рдкрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
for (var i = 0; i < STRIPES; i++) { context.fillStyle = (i % 2 ? COLOR1 : COLOR2); context.fillRect(i * GAP, 0, GAP, 480); }
рдпрд╛ рд╕рднреА рд╕рдо рдФрд░ рд╡рд┐рд╖рдо рдмреИрдВрдб рдмрдирд╛рдПрдВ:
context.fillStyle = COLOR1; for (var i = 0; i < STRIPES/2; i++) { context.fillRect((i*2) * GAP, 0, GAP, 480); } context.fillStyle = COLOR2; for (var i = 0; i < STRIPES/2; i++) { context.fillRect((i*2+1) * GAP, 0, GAP, 480); }
рдЗрди рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рдг (
jsperf ) рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИ:
рдЧреНрд░рд╛рдлрд╝ ред
рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рд╕рдбрд╝рдХ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХреЗ рдмрд╛рдж рд╕реЗ рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдзреАрдорд╛ рд╣реИред
рдХреЗрд╡рд▓ рдЕрдВрддрд░ рдХреЛ рдбреНрд░рд╛ рдХрд░реЗрдВ, рд╕рдВрдкреВрд░реНрдг рдХреИрдирд╡рд╛рд╕ рдХреЛ рдирд╣реАрдВ
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЬрд┐рддрдирд╛ рдЫреЛрдЯрд╛ рд╕реНрдХреНрд░реАрди рдЦреАрдВрдЪреЗрдВрдЧреЗ, рд╡рд╣ рдЙрддрдирд╛ рд╣реА рд╕рд╕реНрддрд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд░рд┐рдбрд░реНрд╡реНрд╕ рдХреЗ рдмреАрдЪ рдХреЗрд╡рд▓ рдорд╛рдореВрд▓реА рдЕрдВрддрд░ рд╣реИ, рддреЛ рдЖрдк рдХреЗрд╡рд▓ рдЕрдВрддрд░ рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рдХреЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреВрд░реА рд╕реНрдХреНрд░реАрди рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ:
context.fillRect(0, 0, canvas.width, canvas.height);
рдбреНрд░рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХреЗ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рдХреЗрд╡рд▓ рдЗрд╕реЗ рд╕рд╛рдлрд╝ рдХрд░реЗрдВред
context.fillRect(last.x, last.y, last.width, last.height);
рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдХреНрд░реАрди рдХреЗ рдкрд╛рд░ рдПрдХ рд╕рдлреЗрдж рдмрд┐рдВрджреБ (
jsperf ):
рдЧреНрд░рд╛рдл рд╢рд╛рдорд┐рд▓ рд╣реИ ред
рдпрджрд┐ рдЖрдк рдХрдВрдкреНрдпреВрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдореЗрдВ рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ "рд░рд┐рдбреНрд░рд╛ рд░реАрдЬрди" рдирд╛рдордХ рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ рдХреЛ рдмрдЪрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╣рд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХреНрд▓рд┐рдпрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирд┐рдВрдЯреЗрдВрдбреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдореБрд▓реЗрдЯрд░ рдХреА рдЗрд╕ рдЪрд░реНрдЪрд╛
рдореЗрдВ рдпрд╣ рддрдХрдиреАрдХ рдкрд┐рдХреНрд╕реЗрд▓-рджрд░-рдкрд┐рдХреНрд╕реЗрд▓ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред
рдЬрдЯрд┐рд▓ рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрддрд░рд┐рдд рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмрдбрд╝реА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдорд╣рдВрдЧрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЯрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдСрдл-рд╕реНрдХреНрд░реАрди рдмрдлрд░ (рдкреНрд░реА-рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕реЗрдХреНрд╢рди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдКрдкрд░ рдЦрдбрд╝реА рдХреИрдирд╡рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╢реАрд░реНрд╖ рдкрд░рдд рдХреА рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GPU рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдКрдкрд░ рджреЛ рдмрд┐рд▓реНрдХреБрд▓ рддреИрдирд╛рдд рдХреИрдирд╡рд╕ рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣рд╛рдБ:
<canvas id="bg" width="640" height="480" style="position: absolute; z-index: 0"> </canvas> <canvas id="fg" width="640" height="480" style="position: absolute; z-index: 1"> </canvas>
рдПрдХ рдПрдХрд▓ рдХреИрдирд╡рд╛рд╕ рдкрд░ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╢реАрд░реНрд╖ рдХреЛ рд░реЗрдВрдбрд░ рдпрд╛ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЧреЗрдо рдпрд╛ рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ 2 рдкрд░рддреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╡рд┐рднрд┐рдиреНрди рдХреИрдирд╡рд╕ рдореЗрдВ рдЦреАрдВрдЪрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рдирд┐рдореНрди рдЧреНрд░рд╛рдлрд╝ рдПрдХ рдХреИрдирд╡рд╛рд╕ рдФрд░ рдПрдХ рдХреЗ рд╕рд╛рде рднреЛрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрд╣рд╛рдБ рдЖрдк рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рд╢реАрд░реНрд╖ рдкрд░рдд (
jsperf ) рдХреЛ рдлрд┐рд░ рд╕реЗ
рдмрдирд╛рддреЗ рд╣реИрдВ рдпрд╛ рд╕рд╛рдлрд╝ рдХрд░рддреЗ рд╣реИрдВ:
рдЧреНрд░рд╛рдлрд╝ ред
рдЕрдХреНрд╕рд░ рдЖрдк рдПрдХ рджреЛрд╖рдкреВрд░реНрдг рдорд╛рдирд╡реАрдп рдзрд╛рд░рдгрд╛ рд╕реЗ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдпрд╛ рд╢реАрд░реНрд╖ рдкрд░рдд рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдмрд╛рд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреЛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рдХреЗрд╡рд▓ 1 рдмрд╛рд░ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖ рдкрд░рдд рдХреЛ рд░реЗрдВрдбрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдкрд░рддреЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред
рдЫрд╛рдпрд╛рд╡рд╛рдж рд╕реЗ рдмрдЪреЗрдВ
рдЕрдиреНрдп рдЪрд┐рддреНрд░рдордп рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдХреА рддрд░рд╣, HTML5 рдХреИрдирд╡рд╛рд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЖрджрд┐рдо рдзреБрдВрдзрд▓рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдСрдкрд░реЗрд╢рди рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИ:
context.shadowOffsetX = 5; context.shadowOffsetY = 5; context.shadowBlur = 4; context.shadowColor = 'rgba(255, 0, 0, 0.5)'; context.fillRect(20, 20, 150, 100);
рдкрд░реАрдХреНрд╖рдг рдЫрд╛рдпрд╛ рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдПрдХ рд╣реА рджреГрд╢реНрдп рдФрд░ рдкреНрд░рджрд░реНрд╢рди (
рдирд┐рд░реНрдгрд╛рдпрдХ ) рдореЗрдВ рдПрдХ рдирд┐рд░реНрдгрд╛рдпрдХ рдЕрдВрддрд░
рджрд┐рдЦрд╛рддрд╛ рд╣реИ :
рдЧреНрд░рд╛рдл ред
рд╕реНрдХреНрд░реАрди рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ
рдЪреВрдВрдХрд┐ рдХреИрдирд╡рд╛рд╕
рддрддреНрдХрд╛рд▓ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдореЛрдб рдХрд╛ рдкреНрд░рддрд┐рдорд╛рди
рд╣реИ , рдЗрд╕рд▓рд┐рдП рджреГрд╢реНрдп рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдореЗрдВ рдкреБрдирдГ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдХреИрдирд╡рд╛рд╕ рдХреА рд╕рдлрд╛рдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдЦреЗрд▓реЛрдВ рдореЗрдВ рдореВрд▓рднреВрдд рдорд╣рддреНрд╡ рдХрд╛ рдПрдХ рдСрдкрд░реЗрд╢рди рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдмрдЪреЗрдВ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рд╕рдВрдкреВрд░реНрдг рдХреИрдирд╡рд╛рд╕ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рдЕрдХреНрд╕рд░ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ: рдХреЙрд▓ рд╕рдВрджрд░реНрдн редclearRect (0, 0, рдЪреМрдбрд╝рд╛рдИ, рдКрдВрдЪрд╛рдИ) рдпрд╛ рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдХреИрдирд╡рд╕ = рдХреИрдирд╡рд╛рд╕ рдЗрдирд╡реЙрдЗрд╕ред
рд▓реЗрдЦрди рдХреЗ рд╕рдордп, ClearRect рдЪреМрдбрд╝рд╛рдИ рд░реАрд╕реЗрдЯ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, Chrome 14 (
jsperf ):
рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ рдЪреМрдбрд╝рд╛рдИ рд░реАрд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рддреЗрдЬрд╝ рд╣реИред
рдЗрди рдЪрд╛рд▓реЛрдВ рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреИрдирд╡рд╛рд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рдирд┐рд░реНрднрд░ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП,
рдХреИрдирд╡рд╕ рдХреА рд╕рдлрд╛рдИ рдкрд░ рд╕рд╛рдЗрдорди рд╕рд░рд┐рд╕ рдХрд╛ рд▓реЗрдЦ рджреЗрдЦреЗрдВред
рдЧреИрд░-рдкреВрд░реНрдгрд╛рдВрдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реЗ рдмрдЪреЗрдВ
рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдХреИрдирд╡рд╛рд╕ рдЙрдк-рдкрд┐рдХреНрд╕реЗрд▓ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдЧреИрд░-рдкреВрд░реНрдгрд╛рдВрдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рде рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕реБрдЪрд╛рд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЙрдк-рдкрд┐рдХреНрд╕реЗрд▓ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рджреГрд╢реНрдп
рд╕реЗрдмреА рд▓реА-рдбреЗрд▓рд┐рд╕рд▓ рдХреЗ
рд▓реЗрдЦ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ :

рдпрджрд┐ рдПрдХ рдЪрд┐рдХрдирд╛ рд╕реНрдкреНрд░рд╛рдЗрдЯ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ Math.floor рдпрд╛
Math.round (
jsperf ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдЕрдзрд┐рдХ рддреЗрдЬрд╝ рд╣реЛрдЧрд╛: рдПрдХ
рдЧреНрд░рд╛рдлрд╝ ред
рдЧреИрд░-рдкреВрд░реНрдгрд╛рдВрдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд╛рд▓реЗ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдИ рдордЬрд╛рдХрд┐рдпрд╛ рддрдХрдиреАрдХреЗрдВ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдореЗрдВ рдЖрдзрд╛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдмрд┐рдЯреНрд╕ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред
рдпрд╣рд╛рдБ (
jsperf ) рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкреВрд░реНрдг
рд╡рд┐рд░рд╛рдо :
рдЧреНрд░рд╛рдлрд╝ ред
рдпрд╣ рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдзрд┐ рдЕрдм рдЙрд╕ рд╕рдордп рд╕реЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдПрдЧреА рдЬрдм рдХреИрдирд╡рд╛рд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреАрдкреАрдпреВ-рддреНрд╡рд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдЧреИрд░-рдкреВрд░реНрдгрд╛рдВрдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЬрд▓реНрджреА рд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
'RequestAnimationFrame' рдХреЗ рд╕рд╛рде рдПрдирд┐рдореЗрд╢рди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░реЗрдВ
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдпрд╛ рдЕрдиреБрд░реЛрдзрдПрдиреАрдореЗрд╢рдирдлрд╝реНрд░реЗрдо рдПрдкреАрдЖрдИ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рд╡рд┐рдирдореНрд░рддрд╛ рд╕реЗ рдЗрд╕реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЕрдЪреНрдЫрд╛ рдЬреЛрдбрд╝ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдкреЗрдЬ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реИ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛рдлреА рд╕реНрдорд╛рд░реНрдЯ рд╣реИ рдЬреЛ рдЖрдХрд░реНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
RequestAnimationFrame рдХреЙрд▓ 60 рдПрдлрдкреАрдПрд╕ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдВрддрд┐рдо рд░реЗрдВрдбрд░ рдХреЗ рдмрд╛рдж рдХрд┐рддрдирд╛ рд╕рдордп рдмреАрдд рдЪреБрдХрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:
var x = 100; var y = 100; var lastRender = new Date(); function render() { var delta = new Date() - lastRender; x += delta; y += delta; context.fillRect(x, y, W, H); requestAnimationFrame(render); } render();
рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ requestAnimationFrame рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрдирд╡рд╛рд╕ рдФрд░ рд╡реЗрдмрд▓реЙрдЧ рдЬреИрд╕реА рдЕрдиреНрдп рддрдХрдиреАрдХреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдПрдкреАрдЖрдИ рдХреЗрд╡рд▓ рдХреНрд░реЛрдо, рд╕рдлрд╛рд░реА рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдерд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ
рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЪрд╛рд╣рд┐рдП ред
рдЕрдзрд┐рдХрд╛рдВрд╢ рдореЛрдмрд╛рдЗрд▓ рдХреИрдирд╡рд╛рд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдзреАрдорд╛ рд╣реИрдВ
рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреА рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рд╕рдлрд╛рд░реА 5.1 рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдЖрдИрдУрдПрд╕ 5.0 рдмреАрдЯрд╛ рдореЗрдВ рдХреИрдирд╡рд╛рд╕ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддреНрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдореЛрдмрд╛рдЗрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЖрдзреБрдирд┐рдХ рдХреИрдирд╡рд╛рд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕реАрдкреАрдпреВ рдирд╣реАрдВ рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдЙрд╕ рдХреНрд░рдо рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдбреЗрд╕реНрдХрдЯреЙрдк рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкреНрд░рджрд░реНрд╢рди рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдХрд╛рдлреА рд╕реАрдорд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╕рдлрд▓ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдЕрдиреБрдХреВрд▓рди рдХреЗ рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕реЗрдЯ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЙрддреНрдкрд╛рджрдХ HTML5 рдХреИрдирд╡рд╛рд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдЕрдм рдЬрдм рдЖрдкрдиреЗ рдпрд╣рд╛рдВ рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрд╛ рд╣реИ, рддреЛ рдЖрдЧреЗ рдмрдврд╝реЗрдВ рдФрд░ рдЕрдкрдиреА рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХреГрддрд┐рдпреЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░реЗрдВред рдпрд╛, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдХреЛрдИ рдЧреЗрдо рдпрд╛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдРрдк рдирд╣реАрдВ рд╣реИ, рддреЛ рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рд▓рд┐рдП
Chrome рдкреНрд░рдпреЛрдЧ рдпрд╛
рдХреНрд░рд┐рдПрдЯрд┐рд╡ JS рджреЗрдЦреЗрдВ ред
рд╕рдВрджрд░реНрдн
рдкрд╕рдВрджреАрджрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
Mikenerevarin #рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░, рд╕реНрдерд┐рддрд┐ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рдкрд░реАрдд рд╣реИ - рдмрд╣реБрдкрд░рдд рдХреИрдирд╡рд╛рд╕ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ, рдЖрдкрдХреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд▓рд┐рдП 1 + рджреГрд╢реНрдп рдкреВрд░реНрд╡реЗрдВрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдФрд░ div рдХреЗ рдкреАрдЫреЗ рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдиреАрдЪреЗ рд╕реНрдерд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдХреИрдирд╡рд╛рд╕ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рднреА рдмрд╣реБрдд рдзреАрдореА рд╣реИ)ред
рдХрдИ рдФрд░ рдореБрд╢реНрдХрд┐рд▓ рддрд░реАрдХреЛрдВ рд╕реЗ, рдЖрдк рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдкрд░ рдХреИрдирд╡рд╛рд╕ рдХреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╢реЙрдХ #...
рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд┐рдХ рдкреНрд░рд┐рдорд┐рдЯрд┐рд╡реНрд╕ рдХреЛ рдбреНрд░реЙ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЙрдиреНрд╣реЗрдВ рдмрдлрд░ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЦреАрдВрдЪрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ рдлрд┐рд░ рдмрдлрд░ рд╕реЗ рдбреНрд░рд╛ рдХрд░реЗрдВ, рдФрд░ рдЧрдгрд┐рддреАрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрд░рдПрдЖрд░рд╕реА рдпрд╛ рдХрд░реНрд╡ рдореЗрдВ рдХрд┐рдП рдЧрдП рдЧрдгрд┐рддреАрдп рдЧрдгрдирд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рд╕рд░реНрдХрд▓ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рд╕рд╣реА рд╣реИред bezierCurveTo рдореЗрдВ рдХреА рдЧрдИ рдЧрдгрдирд╛ рдХреЗрд╡рд▓ рдЙрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреА рддрд╕реНрд╡реАрд░ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдзреАрдореА рд╣реИред
рд▓реЗрдХрд┐рди рдЕрд╕рд▓реА "рдбрдмрд▓ рдмрдлрд░рд┐рдВрдЧ" рдмрд╣реБрдд рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ - рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЕрдкрдирд╛ рдмреИрдХ рдмрдлрд░ рд╣реИ, рдФрд░ рдмреИрдХ рдмрдлрд░ рдХреЛ рдореБрдЦреНрдп рд▓реЗрдпрд░ рдореЗрдВ рдбреНрд░реЙ рдХрд░рдирд╛ рд╣реИ:
1. рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ
2. рдЗрд╕рд╕реЗ рдЕрдбрд╝рдЪрдиреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
...