STAN - рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди

рдЫрд╡рд┐



рдардВрдб рдХреЗ рдЕрдкреНрд░реИрд▓ рдХреЗ рджрд┐рди, рдЬрдм рдЙрд░рд▓ рдореЗрдВ рдЕрднреА рддрдХ рдмрд░реНрдл рдирд╣реАрдВ рдкрд┐рдШрд▓реА рд╣реИред рдЕрдВрдзреЗрд░рд╛ рд╣реЛ рд░рд╣рд╛ рдерд╛ред рдореИрдВрдиреЗ рдорд╛рдЗрдХреНрд░реЛ-рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдЦреЗрд▓рд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: 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: рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ, рдореИрдВ "рдирд╛рдкрд╕рдВрдж - рдкрд╛рд╕" рд╕реЗ рдирд╣реАрдВ рд╣реЛрдЧрд╛ :)



All Articles