STAN-最短のテンプレートエンジン

画像



寒い4月1日、ウラル山脈ではまだ雪が溶けていません。 暗くなってきました。 私はマイクロパターンで遊んだ。 例: ejohn.org/blog/javascript-micro-templatingそれらはすべてのテストですべて非常に生産的でしたが、同時に少なくとも多少の深刻な機能が欠けていました。



最後のストローは、js1kを見逃したことです。 あることが別のことにつながった。 そして、面白いアイデアが思いつきました。 JSを最大限に活用してみませんか? テンプレートでJS構文(JSエンジンを使用してテンプレートを解析できる)を使用し、JSのすべての機能を使用します。



その結果、非常に単純な構文のテンプレートエンジンが作成されました。



  [TAG] raw(データ:文字列)| 変数[TAG] 
 [タグ] .b
 [タグ] .e
 [TAG]
 raw(データ:文字列) 




これは次のようになります。



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> {{context.value}} </ div>

 hr->自己終了タグ-> <hr />




一種のDSLになります。



そして、どのサイズのコードですか?



30行のコード:)縮小版の話ではありません。



例?



 //  -        //  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の両方でテンプレートエンジンを使用できます)



プラスとは何ですか?



主に次の4つの利点があります。



1)JS構文とそのすべての機能(CoffeeScript、ClosureScript、TypeScript ... ect)の完全サポート



2)テンプレートのレンダリング時のDOMへのアクセス。



3)テンプレート内のすべてのJSライブラリ(lodash、アンダースコア、jquery ... ect)の完全サポート



4)任意のテキストエディターでのテンプレートのサポート-実際には純粋なJS構文であるため



速度はどうですか?



jsperf.com/stan-speed-test

画像



「コンパイル済み」テンプレートの速度(手動または自動で通常のjsファイルに変換される)は、JavaScriptの速度とほぼ同じです:)これは非常に悪くありません。 テンプレートを動的にコンパイルする場合、残念ながら速度はそれほど速くありません。



なぜZenコーディングをしないのですか?



Zen CodingをJS構文、つまりZen Codingで表現できないため、有効なJSにすることはできません。



これは冗談ですか?



アイデアの狂気/愚かさ(必要に応じて下線)にもかかわらず。 すべてが非常に深刻です。 プロジェクトが開発されます。 テスト、より正確な構文、および他の多くの利点で大きくなりすぎています。 GitHubページにアクセスしてください-あなたの願い、発見されたバグ、その他すべてを残してください。



PS:実際、このテンプレートエンジンはわずか30行で構成されていると書いているとき、私は少し心酔いしています。 正直に言うと、行40〜50をフォーマットします。 しかし、私にとってそれは、私が固守しようとする心理的な障壁です。



PPS:「メモの正確さとリテラシー」に関するコメントを歓迎します(ただし、これらすべてがPMで記述されている方が良いでしょう)



PPPS:気軽にコメントしてください。私は「嫌いな人-通り過ぎる人」ではありません:)



All Articles