рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред рдореЗрд░рд╛ рдирд╛рдо рдореИрдХреНрд╕ рдбрд┐рдЧрдЯрд░реЗрд╡ рд╣реИ (рдореЗрд░рд╛ рдпрд╣рд╛рдВ рдХреЛрдИ рдЦрд╛рддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдореЗрд░рд╛ рдЯреНрд╡рд┐рдЯрд░ рд╣реИ:
@suprMax рдФрд░ рд╕рд╛рдЗрдЯ
maxdegterev.name )ред рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореЛрдмрд╛рдЗрд▓ рд╕рд╛рдЗрдЯ рдХрд╛ рдПрдХ рдирдпрд╛ рд╢рд╛рдВрдд рд╕рдВрд╕реНрдХрд░рдг рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рд╣реИред рдЕрдм рдореИрдВ рдЖрдкрдХреЛ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛



рдореБрдЦреНрдп рдЖрдзрд╛рд░
рдПрдХ рдирдИ рдореЛрдмрд╛рдЗрд▓ рд╕рд╛рдЗрдЯ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП, рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреБрд░рд╛рдиреЗ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдерд╛ред рдЗрди рдкрддреНрд░реЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдпрд╣ рдЕрднреА рднреА
http://ostrovok.ru/m рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХрдм рддрдХ рдЪрд▓реЗрдЧрд╛ред рдкреБрд░рд╛рдиреА рд╕рд╛рдЗрдЯ рдиреЗ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд╛рдо рд▓рд┐рдпрд╛ред рд╡рд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдУрдЯреАрдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдПрдХ рд╣реА рдмреИрдХ-рдПрдВрдб (Django), рдПрдХ рдорд╛рдирдХ рдореАрдбрд┐рдпрд╛ рдЬрдирд░реЗрдЯрд░, рд╕рд░рд▓ HTML рдЯреЗрдореНрдкрд▓реЗрдЯ (рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб), рдЕрдВрдбрд░рд╕реНрдХреЛрд░, SCSS рдФрд░ рдирд┐рдпрдорд┐рдд JavaScipt рдкрд░ рдХреБрдЫ JavaScipt рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдо рд╕рдм рд╕реМ рдмрд╛рд░ рдЗрд╕ рд╕реЗ рдЧреБрдЬрд░реЗ, рдпрд╣ рд╕рдм рдмрд╣реБрдд рдЙрдмрд╛рдК рд╣реИред
рдирдИ рд╕рд╛рдЗрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдереЗ:
- рд╕рд╛рдЗрдЯ рдХреЛ рдПрдХ рдирдпрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдмрдирд╛рдПрдВ, рдЙрд╕реА рд╕рдордп рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдирдпрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдмрд┐рд▓реНрдХреБрд▓ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдФрд░ рдХреНрдпрд╛ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
- рд╕рд╛рдЗрдЯ рдХреЛ iPhone рдФрд░ Android 2.x, 4.x, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдХреБрдЫ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдкреБрд░рд╛рдиреЗ рдкрд░ рдирд╣реАрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реЛрдЯрд▓ рдХреЗ рдирд╛рдо рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ рдФрд░ рдкрд╕рдВрджреАрджрд╛ рдореЗрдВ рд╣реЛрдЯрд▓ рдЬреЛрдбрд╝реЗрдВред рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рдПрдХ рдмрдбрд╝реА рд╕рд╛рдЗрдЯ рдХреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдХрд▓ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
- рдЗрд╕реЗ рдордЬреЗрджрд╛рд░ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рдПрдВред
рдпрд╣ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рд╣реБрдЖ рд╣реИ рдХрд┐ рд╕рд╛рдЗрдЯ рдХреЛ рд╣рдореЗрд╢рд╛ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдЗрд╕ рдкрд░ рд░реЛрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдРрд╕рд╛ рдкреНрд░рдпреЛрдЧ рд▓рдЧрддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рдбрд┐рдЬрд╛рдЗрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдпрд╛ рдерд╛, рд╕рдкрд╛рдЯ (рдЖрдИрдУрдПрд╕ 7 рд╢реИрд▓реА, рдлреИрд╢рдиреЗрдмрд▓!)ред рдЗрд╕рд▓рд┐рдП, рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рди рд╣реЛрдВ рдХрд┐ рд░рдВрдЧ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрд╕реНрдерд┐рддрд┐, рджреНрд╡реАрдк рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИред
рдореИрдВ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдХреА рддрд░рд╣ рдУрдЯреАрдП рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд░рд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдЕрдХреЗрд▓реЗ рд╕рд╛рдЗрдЯ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ Django рдХреЛ рдкрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдУрдЯреАрдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рд╡рд┐рдЪрд▓рд┐рдд рдХрд░рдирд╛ il faut рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рд╕рдореБрджреНрд░реА рдбрд╛рдХреВ рдХреА рддрд░рд╣ рд╕реЛрдЪрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдУрд╕реНрддреНрд░реЛрд╡реЛрдХ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рд╣реИ рдЬреЛ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рд╕рд╛рдЗрдЯ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдбреЗрд╕реНрдХрдЯреЙрдк рд╕рд╛рдЗрдЯ рд╕реЗ рдПрдкреАрдЖрдИ рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╣ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЪреБрдирд╛ рд╣реИред
рдореИрдВрдиреЗ NodeJS рдХреЛ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ред рдореИрдВ рд╣рдореЗрд╢рд╛ рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд░реВрдкрд░реЗрдЦрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╕рдЬреЗрдПрд╕ рдереА, рдЬреЛ рдХрд┐ рд╕рд┐рдирд╛рддреНрд░рд╛ (рд╣рд╛рдп рд░реВрдмреА!) рдХреЗ рд╕рдорд╛рди рд╣реИред рдореБрдЭреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЗрд╕рд▓рд┐рдП рд░реЗрдбрд┐рд╕ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рдХрдо рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЬреЗрдб рд▓рд┐рдпрд╛, рдФрд░ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд▓рд┐рдП - рд╕реНрдЯрд╛рдЗрд▓рд╕ред рд╣рдореЗрдВ рдПрдХ рдлреИрд╢рди рд╕рд╛рдЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдкрд░ рдЖрдкрдХреЛ рдЧрддрд┐ рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рд▓рд╛рдн рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд┐рдВрдЧрд▓рдкреЗрдЬ рдиреЗ рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рд╕реНрдкрд╛рдЗрдирдЬреЗрдПрд╕ рд▓реЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛, рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рд╕рдореБрджрд╛рдп рдмрд╣реБрдд рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреНрд▓рд╛рд╕рд┐рдХ рдЧреБрдЪреНрдЫрд╛: рдмреИрдХрдмреЛрди, рд▓реЛ-рдбреИрд╢, рдЬрд╝реЗрдкреНрдЯреЛред

рдореБрдЭреЗ рд╕рдВрдкрддреНрддрд┐ рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХрд░рдиреА рдкрдбрд╝реАред рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рд╢рд╛рдВрдд рд╣реЛ рдЬрд╛рдП, рдЬреИрд╕реЗ рд░реЗрд▓ рдкрд░ред рдПрд╕реЗрдЯ-рд░реИрдХ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд▓рд╛, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреЗрдПрд╕, рд╕реАрдПрд╕рдПрд╕ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬреЗрдб рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рдХрд╛рдо рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рддреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдореИрдВрдиреЗ app.templates рдЪреБрдирд╛)ред рд╡рд╣ рдкреВрд░реНрд╡-рд╕рдВрдХрд▓рди рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд┐рд░рджрд░реНрдж рдХреЛ рднреА рд▓реЗрддрд╛ рд╣реИ, 2 рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рд╕реНрдиреИрдХреНрд╕ (Sprockets) рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рд╕рд┐рдХ NodeJS рд╕рдВрд╕реНрдХрд░рдг (Browserify)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, NodeJS рдПрдХ рдирдИ рдмрд╛рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ:
- рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рд╕рдордп рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ - рдХреГрдкрдпрд╛ рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред рдЙрддреНрдкрд╛рджрди рдкрд░ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдиреЛрдбрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЖрдЧреЗ рдпрд╣ рдХреЗрдХрдлрд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдирд┐рд░реНрджреЗрд╢ рд▓рд┐рдЦрдиреЗ рдФрд░ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣: `рдХреЗрдХ рджреЗрд╡`ред рдФрд░ рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВред
- рд╕реНрдЯреЗрдЯрд┐рдХреНрд╕ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рд╕реНрдХ рдкрд░ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдПрд╕реЗрдЯ-рд░реИрдХ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ (рдЕрдореЗрдЬрди S3 рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЦреБрдж рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, nginx рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рддреЛ рдЖрдкрдХреЛ рд░рдЪрдирд╛рддреНрдордХ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛:
compressAsset = (filename, contents)-> console.log("[#{(new Date()).toUTCString()}] #{logPrefix} Compressing asset #{filename}.gz") zlib.gzip(contents, (e, buffer) -> fs.writeFile(filename + '.gz', buffer)) generateAssets = -> for asset in assets.assets filename = __dirname + '/public' + asset.url.replace('.', "-#{asset.md5}.") if not fs.existsSync(filename) console.log("[#{(new Date()).toUTCString()}] #{logPrefix} Saving asset #{filename}") fs.writeFileSync(filename, asset.contents, encoding: 'utf-8') compressAsset(filename, asset.contents) assets.on('complete', -> generateAssets() unless config.is_dev
рдЙрдк-рдпреЛрдЧ:
- рдмреИрдХ-рдПрдВрдб рдФрд░ рдлреНрд░рдВрдЯ-рдПрдВрдб рдПрдХ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдПрдХ рдХреЛрдбрд╕реНрдЯрд╛рдЗрд▓, рдФрд░ рдЖрдк рдПрдХ рд╣реА рдлрд╛рдЗрд▓ рдХреЛ рднреА рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдФрд░ рд╕рд╣рд╛рдпрдХ рдЯреЗрдореНрдкрд▓реЗрдЯред рдЦреИрд░, рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ - рдлреНрд░рдВрдЯ-рдПрдВрдб рд╡рд┐рдХреНрд░реЗрддрд╛ рдмреИрдХ-рдПрдВрдб рдХреЛрдб рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИред
- рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рдмрд╛рдд рд╣реЛ рд░рд╣реА рд╣реИред рдЬреЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЗрдЖрдЙрдЯред рдЬреЗрдб рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЪрд╛рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдмреИрдХ-рдПрдВрдб рдкрд░ рдЬреЗрдирд░реЗрдЯ рдХрд░рдХреЗ рдХреЛрдИ рднреА рдкреЗрдЬ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред рдмреЗрд╢рдХ рд╕рд╣реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реБрд╡рд┐рдзрд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИред
- рд╕реНрдЯрд╛рдЗрд▓рд╕ рдмрд╕ рдкрд░рдорд╛рддреНрдорд╛ рд╣реИред рдЖрдк рдЬреЗрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдЯрд╛рдЗрд▓рд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдВ рд╕реЗ рд╕рдм рдХреБрдЫ рд╢рд╛рдирджрд╛рд░ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡реЗрдм рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рд╕рд░рд▓, рд╕реНрдкрд╖реНрдЯ JSON рдмреИрдХ-рдПрдВрдб, рдлреНрд░рдВрдЯ-рдПрдВрдб, рдХрд╣реАрдВ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред
рдХрд╛рд░реНрдп рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлреИрд╢рдиреЗрдмрд▓, рдпреБрд╡рд╛ рдФрд░ рдордЬрд╝реЗрджрд╛рд░ рдерд╛, рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреИрд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ред рдПрдХ рддрд╕реНрд╡реАрд░ рдПрдХ рд╣рдЬрд╛рд░ рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ:


рдореИрдВ рдмреИрдХрдмреЛрди рдФрд░ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдЬрд╛рд░реЛрдВ рд▓реЗрдЦ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдореИрдВ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд┐рдпрд╛, рддрд╛рдХрд┐ рдкрд╛рдЧрд▓ рди рд╣реЛред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдмреИрдХрдмреЛрди рдХреЗ рдкрд╛рд╕ рд╕рдВрдЧреНрд░рд╣, рдореЙрдбрд▓ рдФрд░ рджреГрд╢реНрдп рд╣реИрдВред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рд░рдЦрд╛ред рдореБрдЭреЗ рдореЙрдбреНрдпреВрд▓реНрд╕ рдХреА рднреА рдЬрд░реВрд░рдд рдереАред рдпреЗ рд╡реЗ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рд░ рд╕рдордп рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ, рдЪрд╛рд╣реЗ рдореИрдВ рдХрд┐рд╕реА рднреА рдкреЗрдЬ рдкрд░ рд╣реВрдВред рд╡реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЬрдм рджреГрд╢реНрдп рдХрд┐рд╕реА рдЕрдиреНрдп рдкреГрд╖реНрда рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдкрд░ рддреБрд░рдВрдд рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдЕрдирд▓реЛрдб рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ рдХреБрдЫ рдореЙрдбрд▓ / рд╕рдВрдЧреНрд░рд╣ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреБрдХрд┐рдВрдЧ рдХреА рдПрдХ рд╕реВрдЪреА рдЬрдм рдЖрдк "рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ)ред рдореЗрд░реЗ рдореЙрдбреНрдпреВрд▓ рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ, рд╕рд╛рдЗрдбрдмрд╛рд░, рдлреЛрди рдХреЗ рднреМрддрд┐рдХ рд╕реНрдерд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЖрджрд┐ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдореЗрд░реА рдореБрдЦреНрдп app.cfi рдлрд╝рд╛рдЗрд▓ рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИ:
#= require ../../data/app.config.js #= require ../helpers.js #= require app.utils.js #= require_tree modules #= require router.coffee #= require_tree models #= require_tree collections #= require_tree views app = _.extend(@app, Backbone.Events) # ... # Layout modules app.size = new app.modules.Size() # Data modules app.geo = new app.modules.Geo() app.user = new app.modules.User() app.analytics = new app.modules.Analytics() # Modals and extra views app.overlay = new app.modules.Overlay() app.modal = new app.modules.Modal() # Router relies heavily on stuff above app.router = new app.Router() # ... Backbone.history.start(pushState: true, hashChange: false)
рдпрд╣рд╛рдБ helpers.js рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреИрдХ-рдПрдВрдб рдкрд░ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЛрдбрд┐рдВрдЧ рдСрд░реНрдбрд░ рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреГрд╢реНрдп) рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдИ рдХрд╛рдо рдирд╣реАрдВ рдерд╛, рдФрд░ рдЬрдм рддрдХ рдореИрдВрдиреЗ Backbone.history.start рдХреЛ рдлреЛрди рдХрд┐рдпрд╛, рддрдм рддрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдФрд░ рдШрдЯрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрдореЛрд░реА рдореЗрдВ рдереЗ, рдЗрд╕рд▓рд┐рдП рд░рд╛рдЙрдЯрд░ рдЕрдкрдирд╛ рдХрд╛рдо, рдХреЙрд▓ рд╡реНрдпреВ рдЖрджрд┐ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред
рдЕрдм рдереЛрдбрд╝рд╛ рд╕реНрдЯрд╛рдЗрд▓рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдпрд╣ SASS рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдкрд╣рдЪрд╛рди рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдХреЗ рдЪреМрд░рд╛рд╣реЗ рдХреЗ рд╕рд╛рде рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдордиреЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдпрд╣ рд╕рдм рджреЗрдЦрд╛ рд╣реИ, рдпрд╣ рдЙрдмрд╛рдК рд╣реИред рдПрдХ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реАрдПрд╕рдПрд╕ рдирд┐рдпрдо рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ?
.my-awesome-block width: 100px height: 100px margin: (@width / 2) auto line-height: @height
рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рд╡рд┐рдХреНрд░реЗрддрд╛ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ? рд╣рдо рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХреА рдПрдХ рднрдпрд╛рдирдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
.my-awesome-block box-sizing: border-box transition: all .2s ease
рд╕реНрдЯрд╛рдЗрд▓рд╕ рд╕реНрд╡рдпрдВ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд╢реНрд░рдг рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рд╕рдорд╛рди рдирд╛рдо рдХреЗ рд╕рд╛рде рдЧреБрдг рдкрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдм рд╡рд┐рдХреНрд░реЗрддрд╛ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреЛ рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реАрдорд╛-рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рд▓рд┐рдП (рдЬреЛ, рд╡реИрд╕реЗ, рд╕рдЪ рд╣реИ), рддреЛ рдЖрдк рдмрд╕ рдПрдХ рдорд┐рдХреНрд╕рд┐рди рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рднреА рдирд╣реАрдВ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд▓рдЧрднрдЧ рд╕реМ рдмрд╛рд░ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред рдЦреИрд░, рдореЗрд░рд╛ app.styl рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг:
@import 'config' @import 'includes/reset.css' @import 'includes/fonts.css' @import 'includes/mixins' @import 'plugins/iswipe' @import 'plugins/zepto.sidebarify' @import 'plugins/zepto.calendar.css' @import 'plugins/zepto.input.numselect.css' @import 'plugins/zepto.listselect.css' @import 'plugins/zepto.textarea_autogrow' @import 'partials/partial_date' @import 'partials/partial_spinner'
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдорд┐рд╢реНрд░рд┐рдд рдЖрдпрд╛рдд рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕рдордп рдПрдХрдорд╛рддреНрд░ рджреЛрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдорд┐рдХреНрд╕рд┐рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдХреЙрд▓ рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рд╣реИ:
html, body // lol! noselect plz body, select, input, button, textarea color: #4b5c66 font: normal 14px Helvetica, Arial, sans-serif line-height: 1.4em //...
рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╣рдореЗрд╢рд╛
рд╕рд┐рде рдХреА рдмреБрд░реА
рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЛ рд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ
ред 146% рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрдХреНрд╖рд╛рдПрдВ рдХрднреА рднреА рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдВрдЧреА, рдореИрдВрдиреЗ SMACSS рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдареАрдХ рд╣реИ, рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИред рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬреЛ рдкреГрд╖реНрда рдХреА рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░ рд╕рдВрдХреНрд░рдордг рдХреЗ рджреМрд░рд╛рди рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЙрдкрд╕рд░реНрдЧ l (рд▓реЗрдЖрдЙрдЯ) рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореЗрд░реЗ рдкрд╛рд╕ p (рдкреЗрдЬ), b рдХреЗ рдЕрдВрджрд░ рдмреНрд▓реЙрдХ (рдмреНрд▓реЙрдХ) рдкреЗрдЬ рдЖрджрд┐ рд╣реИрдВред рдпрджрд┐ рдХрд┐рд╕реА рддрддреНрд╡ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдирд┐рд╣рд┐рдд рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рд╡рд░реНрдЧ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдирд╛рдо рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджреЗрдЧрд╛ред рдпрд╣ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓ рд╡рд░реНрдЧ рд╣рдореЗрд╢рд╛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдпрд╣рд╛рдБ рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
.p-awesomepage .pa-header // styles .pah-soopermenulink color: hotpink .pa-content // styles .pa-loading // styles .pa-title // styles
рдЗрд╕ рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд▓рд┐рдП:
.p-awesomepage header.pa-header wow, header! .pa-content .pa-title my awesome title .pa-loading .pa-title loading is being loaded
рдпрджрд┐ рдЖрдк рд╕реНрдЯрд╛рдЗрд▓рд╕ рдореЗрдВ рдирд┐рдпрдореЛрдВ рдХреЗ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╢рд┐рдлреНрдЯ рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ рдирд┐рдХрд╛рд╕ рдкрд░ рдПрдХ рд╕реЙрд╕реЗрдЬ рдорд┐рд▓реЗрдЧрд╛), рддреЛ рдХреЛрдИ рдЪреМрд░рд╛рд╣рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬреЗрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рдирд╛ рд╣реИред рдпрд╣ рдПрдХ рдЦрд╛рдХрд╛ рдЗрдВрдЬрди рд╣реИред рдЬрд┐рд╕рдиреЗ рд╕реНрд▓рд┐рдо рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╡рд╣реА рд╣реИред рд╕рдорд░реНрдерди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдЖрдВрд╢рд┐рдХ рд╣реИред рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рд╣реЗрд▓реНрдкрд░реНрд╕ рдХреЛ рдЬрдирд░рд▓ рд╣реЗрд▓реНрдкрд░реНрд╕.рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ред рдпрджреНрдпрдкрд┐ рдЖрдк рдЕрдкрдирд╛ рдкрдВрдЬреАрдХрд░рдг рдХрд░рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА: рдорд╛рд░реНрдХрдбрд╛рдЙрдиред
рдереЛрдбрд╝рд╛ рддреИрдирд╛рддреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдпрджрд┐ рдХрд┐рд╕реА рд╡рд┐рдХрд╛рд╕ рдХреЛ рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рдЧрднрдЧ рддреБрд░рдВрдд рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рддреИрдирд╛рддреА рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛ред рд░реЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП, 9999999 рд╕рдорд╛рдзрд╛рди рдЬреИрд╕реЗ рдХрд┐ рдХреИрдкрд┐рд╕реНрдЯреНрд░рд╛рдиреЛ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдкрд╣рд▓реЗ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдореИрдВ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рдкрд╛ рд╕рдХрд╛ рд╣реВрдВред
рдореИрдВрдиреЗ рдХреЗрдХ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╡реАрдкреАрдПрд╕ рдкрд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛: `рдХреЗрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди`, рдЬреЛ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:
task 'update', '[VPS]: Update current state with new from repo', -> console.log('[Cake]: Pulling updates from repo') exec('git pull', (error, stdout, stderr) -> unless error console.log('[Cake]: Installing npm packages') exec('npm install', (error, stdout, stderr) -> unless error console.log('[Cake]: Restarting forever') # exec('forever restartall') exec('killall forever') exec('killall nodejs') console.log('[Cake]: Cleaning up old assets') exec('find ./public/assets -regextype posix-egrep -regex ".*\.(js|css|gz|gzip)$" -delete') exec('cake forever') sendMail() else console.warn("[Cake]: Installation failed with error: #{error}") ) else console.warn("[Cake]: Update failed with error: #{error}") ) task 'deploy', '[DEV]: Deploy current repo state to dev VPS', -> console.log('[Cake]: Connecting to VPS mobota@mobota-dev.ostrovok.ru && running update') exec('ssh mobota@mobota-dev.ostrovok.ru \'cd /var/www/mobota && cake update\'', (error, stdout, stderr) -> if error console.warn("[Cake]: Deploy failed with error: #{error}") else console.log('[Cake]: Deployed!') )
рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЗрдирд┐рд╕ рдУрд░рд▓рд┐рд╣рд┐рди рдиреЗ рдПрдХ рдбреЗрдмрд┐рдпрди рдкреИрдХреЗрдЬ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреАред рдЯреАрдорд╕рд┐рдЯреА рдХреА рдЦреЛрдкрдбрд╝реА рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗ рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреА рд╣реИред рдмрд╣реБрдд рдорд╕реНрддред рдореИрдВрдиреЗ рдЖрдкрдХреЛ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рдмрддрд╛рдпрд╛, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рд╡рд╣ рдХрд┐рд╕реА рддрд░рд╣ рдмрддрд╛рдПред
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рд╛рд╣рд╛-рд╕рд╛рдордиреЗ рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдмрд╣реБрдд рдЖрд▓рд╕реАред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдереЗ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдПрдкреАрдЖрдИ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдореЛрдЪрд╛ + рдЪреЗрдЬ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗред рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рд░рд┐рдкреЛрд░реНрдЯрд░:

(рдореИрдВ рдкрд╛рд░реНрдХ рдореЗрдВ рдмреИрдард╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реБрдкрд░ рдлрд╛рд╕реНрдЯ рдирд╣реАрдВ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЧрд┐рд░ рдЧрдП рд╣реИрдВ)
рдпрд╣ рд╕рдм рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЛрдмрд╛рдЗрд▓ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛рдВ рд╣реИред
рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдХреЗ рд▓рд┐рдП рд╕рдордп рд╣реЛрдЧрд╛ред рдкреВрд░реНрдг-рдмреНрд░рд╛рдЙрдЬрд╝ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдореБрдЭреЗ рдХреНрдпрд╛ рдЕрдВрддрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рде рдХрдИ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдордВрдЪ рдХреА рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ, рдпрд╣ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐, рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рд╕реЗ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрд╣реБрдд рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдЖрдпрд╛ рд╣реИред рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ 2 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдлреЛрди рд╣реИрдВ, рдФрд░ рд╢реБрд░реБрдЖрддреА 4 рдЬреА рд╣реИрдВред рдЖрдИрдУрдПрд╕ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдЪрдорддреНрдХрд╛рд░ рднреА рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реАред рдХреБрдЫ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВред рдХреБрдЫ рдореЗрд░реЗ рд▓рд┐рдП рдирдП рдереЗ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
- рдмреНрд░реЗрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рд╣рд░ рдХреЛрдИ 300ms рд╡рд┐рд▓рдВрдм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИред рд╕рд╛рдЗрдЯ рдкрд░ рдирд┐рдпрдорд┐рдд рд▓рд┐рдВрдХ рдкрд░ рдХрд┐рд╕реА рднреА рдХреНрд▓рд┐рдХ рдХреЛ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд▓рдЧрднрдЧ 300ms рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХреНрд▓рд┐рдХ рд╣реИ, рди рдХрд┐ рдХреБрдЫ рдФрд░ рдЗрд╢рд╛рд░рд╛ред рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрджрд┐ рд╣рдо рд▓рд┐рдВрдХ рдкрд░ рдПрдХ рдЯрдЪрд╕реНрдЯрд╛рд░реНрдЯ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рддрдерд╛рдХрдерд┐рдд рджреЗрдЦреЗрдВрдЧреЗ рднреВрдд рдареАрдХ 300ms рдХреЗ рдмрд╛рдж рдЙрд╕реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рднрд▓реЗ рд╣реА рдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реА рдкрд╣рд▓реЗ рд╕реЗ рдмрджрд▓ рдЧрдИ рд╣реЛред рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб 2 рдкрд░ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдкреЗрдЬ рдкрд░ рднреА рд╣реЛрддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрдИ рд╕рдорд╛рдзрд╛рди рд╣реИрдВред рдЖрдк рдЗрди рднреВрдд-рдХреНрд▓рд┐рдХ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ Google рдХрд░рддрд╛ рд╣реИред рдпрд╛ рдЖрдк рдХреЗрд╡рд▓ рд▓рд┐рдВрдХ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдШрдЯрдирд╛ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛ред Zepto рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдЯреИрдк рдЗрд╡реЗрдВрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рд▓рд┐рдЦрд╛, рдФрд░ рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕реЗ GitHub рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░реВрдБрдЧрд╛ред
- рд░реЗрдЯрд┐рдирд╛ рдкрд░ рдзреБрдВрдзрд▓реА рддрд╕реНрд╡реАрд░реЗрдВред рдЕрдм рдкрд┐рдХреНрд╕реЗрд▓-рдЕрдиреБрдкрд╛рдд> 1.5 рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдХрдИ рднреМрддрд┐рдХ рдкрд┐рдХреНрд╕реЗрд▓ рд╣реИрдВред рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдРрд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдзреБрдВрдзрд▓реА рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдХрдИ рдмрд╛рд░ рдмрдбрд╝рд╛ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдХреЗрд▓ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЖрд▓рд╕реА рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдореЗрд╢рд╛ рдмрдбрд╝реА рдЫрд╡рд┐рдпрд╛рдВ рдФрд░ рдкреИрдорд╛рдиреЗ (рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ FTW) рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╣реИред
- рд╕рдВрдХреНрд░рдордг / рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рд╣рд╛рд░реНрдбрд╡реЗрдпрд░-рддреНрд╡рд░рд┐рдд рдПрдирд┐рдореЗрд╢рдиред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд╣рд░ рдЬрдЧрд╣ рдЕрдиреБрд╡рд╛рдж рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди 3 рдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЖрдк рдЦреБрд╢ рд╣реЛрдВрдЧреЗред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рднреА рдЧреБрдгреЛрдВ рдХреЛ GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд╡рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреЗрд╡рд▓ рдХреБрдЫ рд╣реА рд╣реИрдВред рд╕реНрдерд┐рддрд┐, рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛, рдЖрджрд┐ред рджреВрд╕рд░реЗ, рдПрдВрдбреНрд░реЙрдЗрдб 2 рдореЗрдВ рдПрдХ рдПрдирд┐рдореЗрдЯреЗрдб рдмреНрд▓реЙрдХ рдХреА рдЖрд╡рдзрд┐рдХ рдЭрд┐рд▓рдорд┐рд▓рд╛рд╣рдЯ, "рдХреНрд░рд┐рд╕рдорд╕ рдкреЗрдбрд╝реЛрдВ" рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐, рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдмреНрд░реЗрдХ рдХреЗ рд░реВрдк рдореЗрдВ Translate3d рдХреЗ рд╕рд╛рде рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдпрджрд┐ iOS рдмреНрд▓реЙрдХ рдЬреАрдкреАрдпреВ рд▓реЗрдпрд░ рдкрд░ рд░реА-рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ iOS рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реА рд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рд╕рд╛рдЗрдбрдмрд╛рд░ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЦреАрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдпрд╣ рдПрдирд┐рдореЗрдЯреЗрдб рд░реВрдк рд╕реЗ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ, рдХреБрдЫ рдЬрдЧрд╣ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдиреАрдореЗрд╢рди рдХреЗ рд╕рд╛рде рдореИрдВрдиреЗ рдХрд╣реАрдВ рдФрд░ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЬреАрдкреАрдпреВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рдЖрдк рдХреБрдЫ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЭрд┐рд▓рдорд┐рд▓рд╛рд╣рдЯ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рд╕реНрдХреНрд░реАрди рд╕реЗ рдЖрдзреЗ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрд╕реЗ рдЦреАрдВрдЪрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ GPU рдкрд░ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдмрд╛рдПрдВ / рд╢реАрд░реНрд╖ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рдкрд╕ рд▓реМрдЯрдирд╛ рдкрдбрд╝рд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдмреНрд▓реЙрдХ рдкрд░ рджреЗрд╢реА рдЪреБрдирд┐рдВрджрд╛ рддрддреНрд╡ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╣реАрдВ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдПрдВрдбреНрд░реЙрдЗрдб 2 рдкрд░ рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдзреНрдпрд╛рди рд░рдЦреЗрдВ (рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдмреНрд▓реЙрдХ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд╣рд╛рдВ рдерд╛, рдФрд░ рдпрд╣ рд╕реНрдХреНрд░реАрди рдкрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╣рд╛рдВ рдирд╣реАрдВ рд╣реИ)ред
- рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ред рдореИрдВ рдХреЛрд╢рд┐рд╢ рднреА рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рд╕рд╛рде: рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ, рд╕реНрдерд┐рддрд┐ рдмреЗрд╣рддрд░ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЪрд╛рд▓рд╛рдХ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдирд┐рд╢реНрдЪрд┐рдд рддрддреНрд╡реЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬрдм рдореИрдВрдиреЗ рдЖрдЦрд┐рд░реА рдмрд╛рд░ рджреЗрдЦрд╛, рддреЛ iOS рдкрд░ рдПрдХ рдЦреБрд▓реЗ рдХреАрдмреЛрд░реНрдб рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред
- Android 2 рд╕рд┐рд░реНрдл JSON.parse (null) рдХреЗ рд╕рд╛рде рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдФрд░ рд╡рд╣ рдкрд╛рда-рдЫрд╛рдпрд╛ рдХреЗ рд╕рд╛рде рдкрд╛рда рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред рд╣рд╛рдЗрдлрд╝рдиреЗрд╢рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреБрдЫ рдЕрдХреНрд╖рд░ рдЙрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рд╣рдореЗрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдВ:
.android2 * text-shadow: none !important;
рдмрд╣реБрдд рд╕рдордп рдФрд░ рдирд╕реЛрдВ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИред
- рдЦрд┐рдбрд╝рдХреА рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреБрдЫ рдЕрдВрддрд░ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рдкреИрдорд╛рдиреЗ рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдмрдбрд╝реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдкрд░ рд▓рдЧрднрдЧ рдХрднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдкреИрдорд╛рдиреЗ рдХреЛ рдорд╛рдкрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЬреАрд╡рди рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no")
рдЖрдкрдХреЛ рдореЛрдмрд╛рдЗрд▓ html5boilerplate рдкрджреНрдзрддрд┐ preventZoom () рдХреЛ рднреА рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИред рд╡реИрд╕реЗ рднреА, рд╡рд╣рд╛рдБ рд╕реЗ рдЖрдк рдмрд╣реБрдд рд╕рд╛рд░реА рдардВрдбреА рдЪреАрдЬреЗрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реНрдХреНрд░реАрди рдХреА рдКрдВрдЪрд╛рдИ / рдЪреМрдбрд╝рд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред Android / iOS рдЙрдирдХреЗ рдЙрддреНрддрд░реЛрдВ рдореЗрдВ рдЕрд╕рдВрдЧрдд рд╣реИрдВред рдПрдВрдбреНрд░реЙрдЗрдб, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдорддреМрд░ рдкрд░ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 2 рдЧреБрдирд╛ рд╡реНрдпрд╛рдкрдХ рдФрд░ рдЕрдзрд┐рдХ рд╣реИред рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ, рдореИрдВ рд╕реАрдПрд╕рдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:
class Size _min_width: 320 _min_height: 416 _iOS_toolbar_height: 44 _android_delay: 300 constructor: -> @width = null @height = null if $.os.ios app.dom.win.on('orientationchange load', @orientationChange) else app.dom.win.on('orientationchange resize load', => window.setTimeout(@orientationChange, @_android_delay) ) @orientationChange() orientationChange: => prevWidth = @width prevHeight = @height if $.os.ios and not window.orientation @width = window.screen.availWidth @height = window.screen.availHeight - @_iOS_toolbar_height else @width = app.dom.win.width() @height = app.dom.win.height() @width = Math.max(@_min_width, @width) @height = Math.max(@_min_height, @height) if @width isnt prevWidth or @height isnt prevHeight app.trigger('size:resize', width: @width height: @height )
рд╕рд╛рдордЧреНрд░реА / рдЦрд┐рдбрд╝рдХреА рдХреА рдКрдВрдЪрд╛рдИ рдХреЗ рдирд┐рд░реНрдзрд╛рд░рдг рдХреЗ рд╕рд╛рде, рдмрд╣реБрдд рд╕рд╛рд░реЗ рд░реЛрдорд╛рдВрдЪ рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдВ, рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдореЛрдмрд╛рдЗрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрд╣реБрдд рд╢рд╛рдВрдд рд╣реИрдВ рдФрд░ рдкреВрд░реНрдг рд╕реНрдХреНрд░реАрди рдореЗрдВ рдХреБрдЫ рдХрд░рдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдФрд░ рдУрд╡рд░рд▓реЗ / рдореЛрдбрд▓ рдХреЗ рд╕рд╛рде рдпрд╣ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
- рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдз рдмрд╣реБрдд рдзреАрдореЗ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдХреБрдЫ рднреА рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рд╢реНрди рднреА рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпрд╣ рддреЗрдЬ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдорд╣рд╛рди рдЬрд╡рд╛рдм рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВред (рдмрдбрд╝реЗ 500kb-1mb рдЕрдзрд┐рдХрддрдо, рдЕрднреА рднреА рдореЛрдмрд╛рдЗрд▓ рд╕рдВрдЪрд╛рд░ рд╣реИ)ред рдпрд╣ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред рдбреЛрдо рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде - рдПрдХ рд╣реА рдХрд╣рд╛рдиреАред рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдмрд╣реБрдд рдЧреВрдВрдЧрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Android, рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЙрдирдХреА рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдирдП 4 рдЬреА рд╕рдорд╛рди iPhone 4S рдЦреЛ рджреЗрддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо рдпрд╣рд╛рдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рдХрдо рдЕрдиреБрд░реЛрдз рдФрд░ рд╕рдореВрд╣ рд▓рд┐рдЦрдирд╛ / рдкрдврд╝рдирд╛ред
- Android 4 рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдЗрддрд┐рд╣рд╛рд╕ API рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдмреИрдХрдмреЛрди рдореЗрдВ рдЖрдкрдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдЯреЗрдЯ рдЕрдкрдбреЗрдЯ рдХреЗ рдмрдЬрд╛рдп рд╣реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдм рдХреБрдЫ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб 2 рдиреЗ рд╣рдореЗрд╢рд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ред
- рдпрджрд┐ рдЖрдкрдХрд╛ рдкреГрд╖реНрда рдиреАрдЪреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдк рд╕рд╛рдордЧреНрд░реА рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдХреНрд░реЙрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЙрд╕рдХреА рдореВрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рд▓реМрдЯрд╛рдПрдЧрд╛ред рдирдИ рд╕рд╛рдордЧреНрд░реА рдХреА рдКрдВрдЪрд╛рдИ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рджреГрд╢реНрдпрдорд╛рди рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
- рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд▓реЙрдХ рд╣реИ: рдирд┐рд░рдкреЗрдХреНрд╖ рдЬреЛ рд╕реНрдХреНрд░реАрди рд╕реЗ рдХрд╣реАрдВ рджреВрд░ рдмрд╣ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдКрдВрдЪрд╛рдИ рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИред рдЕрдиреНрдпрдерд╛, "рдЫреЗрдж" рдкреГрд╖реНрда рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдХреБрдЫ рдКрдВрдЪрд╛рдИ рдкрд░ рд╣реИред IOS рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХред
- рдпрджрд┐ рдЖрдк iOS рдореЗрдВ рдХреБрдЫ рдкреВрд░реНрдг-рд╕реНрдХреНрд░реАрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕реНрдХреНрд░реАрди рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдКрдВрдЪрд╛рдИ рдХреЗ рдмрд░рд╛рдмрд░ рд░реВрдЯ рддрддреНрд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреА рдКрдВрдЪрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рд╕реНрдерд┐рддрд┐ рдкрдЯреНрдЯреА рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдЬрд╛рдПрдЧреА рдЪрд╛рд╣реЗ рдЖрдк рдХрд┐рддрдиреА рднреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд▓реЗрдВред рдКрдВрдЪрд╛рдИ: 100% рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
- рдпрджрд┐ рдкреЗрд░реЗрдВрдЯ рдмреНрд▓реЙрдХ рдореЗрдВ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╣реИ: рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ, рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрдЪреНрдЪреЗ: рдирд┐рд░рдкреЗрдХреНрд╖, рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рд░реЗрдВрдбрд░ рдХрд░рддреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдпрд╣ рдХреЗрд╡рд▓ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╕реНрдХреНрд░реЙрд▓ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡рд┐рдХрд╛рд╕ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрд╣реБрдд рдХрдордЬреЛрд░ рдорд╢реАрдиреЛрдВ рдкрд░ рдмрдбрд╝реА рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред рд╣рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдмреИрдЯрд░реА рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ / рдореЗрдореЛрд░реА рд╕рдВрд╕рд╛рдзрди рдмрд╣реБрдд рд╕реАрдорд┐рдд рд╣реИрдВ, рдФрд░ рд╣рдореЗрд╢рд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдпрд╣ рд╕рд┐рд░реНрдл рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдореЗрд░рд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рд╣реИ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдереЗред рдореИрдВ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВред
рдбреЗрд╕реНрдХрдЯреЙрдк, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╡рд┐рдкрд░реАрдд рдореЛрдмрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдмреЛрдирд╕:
- рд╣рд╛рд▓рд╛рдВрдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдмреНрд░реЗрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡реЗ рдЕрднреА рднреА рдЖрдзреБрдирд┐рдХ рд╣реИрдВ рдФрд░ рдмрд╣реБрдд рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐рдлрд╝реНрд░реЗрдо / рд╕рдВрдХреНрд░рдордг рдФрд░ рдЖрдзреБрдирд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрджрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдирд┐рдореЗрд╢рдиред
- рдХреЗрд╡рд▓ 3 рдкреНрд▓реЗрдЯрдлреЙрд░реНрдоред iOS рдЕрдкрдиреЗ рдЖрдк рд╣реА рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Safari рдореЗрдВ Developer Tools рд╣реИрдВ, рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рд╛рде, рдмрджрддрд░, рдХреБрдЫ рд▓реЛрдЧ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ adb рдХрдВрд╕реЛрд▓ рдореЗрдВ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдХреЗрд╡рд▓ 2 рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдФрд░ рдПрдХ рд╕рдорд╛рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрдВрдЬрди рд╣реИрдВред рдЖрдк рдХрдИ рд╡рд┐рдХреНрд░реЗрддрд╛ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред
- рдирдП рдЦрд┐рд▓реМрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рд╣рдореЗрд╢рд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдореЛрдмрд╛рдЗрд▓ рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рдореВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рд╣реЛрдорд╕реНрдХреНрд░реАрди рдкрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреВрд▓ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдбреЗрд╡рд▓рдкрд░ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдорд╣рд╛рди рд╕рдордп рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВред рдЖрдкрдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛, рдФрд░ рдЖрдк рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╛рдХреА рд▓реЛрдЧ рдЙрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд░рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдирдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдФрд░ NodeJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - рдЬрд▓реНрджреА, рдЖрд╕рд╛рдиреА рд╕реЗ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ, рдФрд░ рдпреБрд╡рд╛ред рдФрд░ рдЕрдзрд┐рдХ рд╕рдордп рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ GitHub рдкрд░ рд╕рд╛рдЗрдЯ рд╕реЗ рдХреБрдЫ рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛, рдЗрд╕реЗ рдЕрдкрдиреЗ рджрдо рдкрд░ рджреЗрдЦрдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рд╕рднреА рдХреЛ рд╢реБрднрдХрд╛рдордирд╛рдПрдБред