рдардВрдб рдХреЗ рдЕрдкреНрд░реИрд▓ рдХреЗ рджрд┐рди, рдЬрдм рдЙрд░рд▓ рдореЗрдВ рдЕрднреА рддрдХ рдмрд░реНрдл рдирд╣реАрдВ рдкрд┐рдШрд▓реА рд╣реИред рдЕрдВрдзреЗрд░рд╛ рд╣реЛ рд░рд╣рд╛ рдерд╛ред рдореИрдВрдиреЗ рдорд╛рдЗрдХреНрд░реЛ-рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдЦреЗрд▓рд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: ejohn.org/blog/javascript-micro-templating рд╡реЗ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рд╕реБрдкрд░-рдЙрддреНрдкрд╛рджрдХ рдереЗ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдЙрдирдХреЗ рдкрд╛рд╕ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЧрдВрднреАрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЕрднрд╛рд╡ рдерд╛ред
рдЖрдЦрд┐рд░реА рддрд┐рдирдХрд╛ рдпрд╣ рдерд╛ рдХрд┐ рдореИрдВ js1k рд╕реЗ рдЪреВрдХ рдЧрдпрд╛ред рдПрдХ рдмрд╛рдд рдиреЗ рджреВрд╕рд░реЗ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ред рдФрд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдпрд╛ред рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЬреЗрдПрд╕ рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ? рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЬреЗрдПрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдПрд╕ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ) рдФрд░ рдЬреЗрдПрд╕ рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХрд╛рдлреА рд╕рд░рд▓ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдерд╛:
[TAG] рдХрдЪреНрдЪрд╛ (рдбреЗрдЯрд╛: рд╕реНрдЯреНрд░рд┐рдВрдЧ) | рдЪрд░ [рдЯреИрдЧ] [TAG] .b [TAG] .e [рдЯреИрдЧ] рдХрдЪреНрдЪрд╛ (рдбреЗрдЯрд╛: рд╕реНрдЯреНрд░рд┐рдВрдЧ)
рдЬреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
function _template() { div.b; span.context.value.span; span.raw(11).span; div.e; hr; raw('plain text') }
div.b -> рдУрдкрдирд┐рдВрдЧ рдЯреИрдЧ -> <div> div.e -> рд╕рдорд╛рдкрди рдЯреИрдЧ -> </ div> div.context.value.div -> <div> {{Reference.value}} </ div> рдШрдВрдЯрд╛ -> рд╕реНрд╡-рд╕рдорд╛рдкрди рдЯреИрдЧ -> <hr />
рдпрд╣ рдПрдХ рддрд░рд╣ рдХрд╛ DSL рдирд┐рдХрд▓рддрд╛ рд╣реИред
рдФрд░ рдХреНрдпрд╛ рдЖрдХрд╛рд░ рдХреЛрдб?
рдХреЛрдб рдХреА рейреж рдкрдВрдХреНрддрд┐рдпрд╛рдБ :) рдореИрдВ рдХреАрдорд╛рдзрд╛рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
рдПрдХ рдЙрджрд╛рд╣рд░рдг?
// - // JS ( ) var data = [ { name: 'STAN' }, { name: 'Ai_boy' }, { name: 'IceFrog' } ]; // function _template(){ // [ ] XML h1['class="head"'].raw('List of names').h1; for (var i = 0; i < context.length; i++) { // partial(_item, context[i]); } } // Partial - function _item(){ b[args({style: 'color: blue', class: 'test'})].raw("Name:").b; div.context.name.div; hr; } // helper // - js function args(obj){ var result = ''; for (var key in obj) { if (obj.hasOwnProperty(key)) { result += key + '="' + obj[key] + '" '; } } return result; } document.body.innerHTML = STAN.run(STAN.compile(_template), data);
рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ?
рдЖрдк рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ
aiboy.github.io/STAN/sandbox.html
рдпрд╛ GitHub рдкреЗрдЬ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ README.md рдореЗрдВ рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ
github.com/aiboy/STAN
(рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ Node.js рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)
рдкреНрд▓рд╕ рдХреНрдпрд╛ рд╣реИ?
рдЗрд╕рдХреЗ рдЪрд╛рд░ рдореБрдЦреНрдп рдлрд╛рдпрджреЗ рд╣реИрдВ:
1) рдЬреЗрдПрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдЗрд╕рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рдорд░реНрдерди (рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдХреНрд▓реЛрдЬрд╝рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ ... рдПрдХреНрдЯ)
2) рдЯреЗрдореНрдкрд▓реЗрдЯ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд╕рдордп DOM рдкрд░ рдкрд╣реБрдБрдЪрдирд╛ред
3) рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдЬреЗрдПрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рдорд░реНрдерди (рджрд░реНрдЬрдирд╛, рдЕрдВрдбрд░рд╕реНрдХреЛрд░, jquery ... ect)
4) рдХрд┐рд╕реА рднреА рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди - рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢реБрджреНрдз рдЬреЗрдПрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИрдВ
рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
jsperf.com/stan-speed-test
"рд╕рдВрдХрд▓рд┐рдд" рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рдЧрддрд┐ (рдЬреЛ рддрдм рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ) рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЧрддрд┐ рдХреЗ рд▓рдЧрднрдЧ рдмрд░рд╛рдмрд░ рд╣реЛрддреА рд╣реИ :) рдЬреЛ рдмрд╣реБрдд, рдмрд╣реБрдд рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЧрддрд┐ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЗрддрдиреА рдорд╣рд╛рди рдирд╣реАрдВ рд╣реИред
рдЬрд╝реЗрди рдХреЛрдбрд┐рдВрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ?
рдХреНрдпреЛрдВрдХрд┐ Zen Coding рдХреЛ JS syntax - рдпрд╛рдиреА Zen Coding рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - JS рдХреЛ рдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдордЬрд╛рдХ рд╣реИ?
рд╡рд┐рдЪрд╛рд░ рдХреЗ рдкрд╛рдЧрд▓рдкрди / рдореВрд░реНрдЦрддрд╛ (рдЖрд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд░реЗрдЦрд╛рдВрдХрд┐рдд) рдХреЗ рдмрд╛рд╡рдЬреВрджред рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЧрдВрднреАрд░ рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЬрд╛рдПрдЧреАред рдкрд░реАрдХреНрд╖рдг, рдЕрдзрд┐рдХ рд╕рд╣реА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдХрдИ рдЕрдиреНрдп рдЙрдкрд╣рд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЕрддрд┐рд╡реГрджреНрдзрд┐ред GitHub рдкреЗрдЬ рдкрд░ рдЬрд╛рдПрдВ - рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдУрдВ, рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреАрдбрд╝реЗ рдФрд░ рд╕рдм рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрдВред
рдкреБрдирд╢реНрдЪ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдереЛрдбрд╝рд╛ рдЖрддреНрдорд╛-рдмреАрдорд╛рд░ рд╣реВрдВ рдЬрдм рдореИрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдореЗрдВ рдХреЗрд╡рд▓ 30 рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд▓рд╛рдЗрдиреЛрдВ рдХреЛ 40-50 рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдордиреЛрд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдмрд╛рдзрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВред
рдкреАрдкреАрдПрд╕: рдореБрдЭреЗ "рдиреЛрдЯ рдХреА рд╢реБрджреНрдзрддрд╛ рдФрд░ рд╕рд╛рдХреНрд╖рд░рддрд╛" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдЦреБрд╢реА рд╣реЛрдЧреА (рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдкреАрдПрдо рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛)
PPPS: рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ, рдореИрдВ "рдирд╛рдкрд╕рдВрдж - рдкрд╛рд╕" рд╕реЗ рдирд╣реАрдВ рд╣реЛрдЧрд╛ :)