2013-08-15 14 views

Odpowiedz

17

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

+0

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 –

+1

@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

+3

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. –

0

Używam RazorEngine do generowania wiadomości e-mail i działa dobrze. Patrząc na pozostałe 2 projekty wydaje się, że robią to samo, co RazorEngine - hosting MS Razor. W każdym razie, może polecić to drugie dla twojego celu.

0

Użycie, https://github.com/smsohan/MvcMailer to naprawdę pomaga w tworzeniu e-maili opartych na maszynach Razer MVC.

+4

** ** ale tylko jeśli wysyłasz e-maile z aplikacji Asp.net MVC. Niestety nie jest możliwe użycie MvcMailer z biblioteki klas.A w aplikacji dla przedsiębiorstw wiadomości e-mail są zwykle wysyłane z warstwy biznesowej ... Ale jest to fajna biblioteka ...;) –