Ja sam wypróbowałem wszystkie 3 biblioteki i znalazłem kilka różnic.
- RazorEngine - najprostszy jeden i działa najlepiej spośród wszystkich z nich obsługuje buforowanie domyślnie.
- RazorTemplates - nie obsługuje niektórych dyrektyw Razor (na przykład @model) i używa wielu typów
dynamic
. Może korzystać z prekompilowanych szablonów.
- RazorMachine - bardzo nieprzewidywalny i o dziwnym projekcie, który wymaga użycia globalnej pojedynczej instancji zamiast klasy statycznej.
Co do mnie, wybrałem RazorEngine. Również tutaj jest kod, jak korzystać z tych bibliotek:
RazorEngine
string html = Razor.Parse(templateContent, model, templatePath);
RazorTemplates
if (!_templatesCache.ContainsKey(templatePath))
{
var compiledTemplate = Template.Compile(templateContent);
_templatesCache.Add(templatePath, compiledTemplate);
}
string html = _templatesCache[templatePath].Render(model);
RazorMachine
private readonly Lazy<RazorMachine> _lazyRazorMachine =
new Lazy<RazorMachine>(() => new RazorMachine());
//...
var rm = _lazyRazorMachine.Value;
string html = rm.ExecuteContent(templateContent, model, null, true).Result;
Oraz niektóre testy wydajności, testowane każdej biblioteki 2 razy na tym samym szablonie, wszystkie z nich mają podobną wydajność bez wielkiej różnicy:
RazorEngine - 1731 ms, 0,1 ms
RazorTemplates - 1753 ms , 0,1 ms
RazorMachine - 1608 ms, 0,1 ms
Czy używałeś tej samej instancji obiektu RazorMachine w wielu testach? To ma być singleton na poziomie aplikacji, który zarządza wszystkimi buforowaniem i prekompilacją: https://github.com/jlamfers/RazorMachine/wiki/Examples –
@Chris Hynes Tak, okazało się, że problem został spowodowany utworzeniem nowej instancji za każdym razem, teraz naprawiłem kod. Choć fakt pozostaje, biblioteka działa w bardzo nieoczekiwany sposób. – vorrtex
W jaki sposób RazorEngine współpracuje z zaawansowanymi materiałami, takimi jak modele, niestandardowe klasy widoku, układy, widoki itd.? RazorMachine, tak zawiłe, to jedyna rzecz, jaką odkryłem, że działa z pełną gamą cech maszynki Razor. Przygotowałem kilka klas, które współpracują z RazorMachine, aby zapewnić pełne środowisko przypominające maszynkę Razor z układami, widokami itp., Ale działające w oparciu o osadzone pliki zasobów. To pozwala mi korzystać z tych samych szablonów z projektu internetowego, projektu usługi lub tego, co ty. –