ハンドルバーテンプレートをパフォーマンスおよびタイプセーフサーバーサイドHTMLレンダリングのネイティブC#コードにコンパイルします。
このコンパイラは、アプローチ、設計の決定、実装の詳細、およびその評価をカバーするJakob Demlerの学士論文の結果であり、ここにあります。
このプロジェクトは現在、ベータ段階にあります。
ハンドルバーからのマイクロバンチマークに対してパフォーマンスの比較が行われました。
| マイクロベンチマーク | HandleBars.js | コンパイルされたハンドルバー | スピードアップ |
|---|---|---|---|
| arrayeach | 391 OPS/MS | 3039 OPS/MS | 7.77 |
| 複雑な | 120 OPS/MS | 1180 ops/ms | 9.83 |
| データ | 295 OPS/MS | 1333 OPS/MS | 4.51 |
| 深さ1 | 228 OPS/MS | 3693 OPS/MS | 16.20 |
| 深さ2 | 63 OPS/MS | 1515 OPS/MS | 24.04 |
| 部分回復 | 125 OPS/MS | 1895 OPS/MS | 15.16 |
| 部分的 | 211 OPS/MS | 905 OPS/MS | 4.29 |
| パス | 2060 OPS/MS | 4646 OPS/MS | 2.25 |
| 弦 | 5563 OPS/MS | 13964 OPS/MS | 2.51 |
| 変数 | 1991 OPS/MS | 4027 OPS/MS | 2.02 |
CustomToolプロジェクトからVSIXパッケージをインストールし、Visual Studioを再起動するだけです。ソリューションに新しいハンドルバーテンプレートを追加し(.hbsで終了)、ファイルのCustomToolプロパティに「HandleBarsCompiler」を追加します。コンパイラは、ハンドルバーテンプレートが保存されるたびに呼び出され、生成されたコードを含む{templatename} .hbs.csファイルを作成します。
すべてのハンドルバーテンプレートには、レンダリングするタイプが必要です。例として、「PersonModel」という名前のクラスが役立ちます。
namespace ViewModels
{
public class PersonModel
{
public string FirstName { get ; set ; }
public string LastName { get ; set ; }
public int Age { get ; set ; }
public List < string > EMailAddresses { get ; set ; }
}
}これで、HandleBarsCompilerにタイプを通信する必要があります。各ハンドルバーテンプレートの開始時には、socledモデルが描かれている必要があります。
私たちの例は次のとおりです。
ModelToken内のタイプは、テンプレートに渡される実際のViewModelの基本クラスまたはインターフェイスでもあることに注意してください。
残りのハンドルバーテンプレートは、標準のハンドルバーの構文とセマンティクスに従います。これが完全な例です:
部分的なものを登録する必要はありません。その部分的なものを使用するハンドルバーテンプレートの前に、必ず部分的にコンパイルしてください。他のすべての標準ハンドルバーには、JSロジックが適用されます。
CompiledHandleBarsにより、ヘルパー関数の使用が可能になります。これらは静的で、文字列を返し、属性によって注釈を付けなければなりません。コンパイル時に一致する場合、パラメーターがチェックされるため、オーバーロードが可能です。それ以外は、コードベースのどこにでも配置できる制限はありません。
[ CompiledHandlebarsHelperMethod ]
pulic static string FullName ( PersonModel model )
{
return string . Concat ( model . FirstName , " " , model . LastName ) ;
} CompiledHandleBarsは、レイアウトに関して異なる機能を提供します。ハンドラバルシステムプレートは、ハンドルバーレイアウト内でレンダリングできます。 HandleBarslayoutsは、特別な{{body}}トークンのために、通常のハンドルバルシステムとは異なります。
そのレイアウトでハンドルバーテンプレートをレンダリングするには、{{model}}トークンの直後に{{レイアウト}}トークンを使用します。
そのテンプレートの結果は、次のテンプレートに等しくなります。
HandleBars.jsバージョン(静的にタイプされたハンドルバーテンプレートなど)へのアプローチが異なるため、コンパイラはハンドルバーテンプレートがどのタイプであるかを知る必要があります。この情報は、特別なモデルが伸びることによってコンパイラに伝えられます。その構文は簡単です:
例えば:
このトークンは、すべてのハンドルバーテンプレートの先頭にある必要があります。
解決策を構築できるようにするには、前提条件に従う必要があります。