Скомпилирование руля-образной обработки в натуральный код C# для рендеринг HTML-рендеринг с помощью Performant и Type-Safe.
Этот компилятор является результатом диссертации Jakob Demler's Bachelor, который охватывает подход, проектные решения, детали реализации и его оценку и можно найти здесь
Этот проект в настоящее время находится на бета -фазе.
Было проведено сравнение производительности с микроборенарами из репозитория на руле.
| Microbenchmark | 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 |
| глубина | 228 OPS/MS | 3693 OPS/MS | 16.20 |
| глубина 2 | 63 ОПС/МС | 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 |
Просто установите пакет VSIX из проекта CustomTool и перезапустите Visual Studio. Добавьте новый шаблон руля в свое решение (заканчивая на .hbs), а затем добавьте «Handlebarscompiler» в свойство CustomTool файла. Компилятор будет вызов каждый раз, когда шаблон руля сохраняется, и будет создавать файл {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 ; }
}
}Теперь мы должны сообщить тип на руле. В начале каждого руля-template необходимо быть социальным модулином:
Для нашего примера это было бы:
Обратите внимание, что тип внутри модулизации также может быть базовым классом или интерфейсом фактической ViewModel, которая передается в шаблон.
Остальная часть руля-Templates следует за стандартным синтаксисом и семантикой. Вот полный пример:
Частичные работы не должны быть зарегистрированы. Просто не забудьте составить частичный перед рулем-образованием, который использует это частичное. Для всего остального применяется стандартная логика.
Компилированные ручки позволяют использовать вспомогательные функции. Они должны быть статичными, вернуть строку и быть аннотированными атрибутом. Параметры проверяются, если они совпадают во время компиляции, чтобы перегрузка возможна. Кроме этого, у них нет ограничений, которые могут быть помещены в любом месте вашей кодовой базы.
[ CompiledHandlebarsHelperMethod ]
pulic static string FullName ( PersonModel model )
{
return string . Concat ( model . FirstName , " " , model . LastName ) ;
} CompiledHandlebars предлагает различную функциональность в отношении макетов: любой Handlabarstemplate может быть отображен внутри ручной кладки. Handlebarslayouts отличается от обычных ручных рулевых ударов из -за специального {{body}} токена:
Чтобы отобразить руля-образной образец в этом макете, используйте токен {{Mayout}} сразу после {{{model}} token:
Результат этого шаблона равен следующему шаблону:
Из-за различного подхода к версии руля. Эта информация сообщается компилятору специальным модули. Его синтаксис прост:
Например:
Этот токен должен быть в начале каждого руля.
Необходимы следующие предпосылки, чтобы иметь возможность создать решение: