왜 내가 RazorEngine이 100 가지 템플릿을 분석하는 데 너무 느린 이유가 무엇이겠습니까? 나는 StringTemplate을 조사해 보았고, 비교할 두 가지 테스트를 수행했다.RazorEngine 3.3 성능을 StringTemplate4와 비교
[Test]
public void TestStringTemplate()
{
CsStopwatch stopwatch = new CsStopwatch();
stopwatch.Start();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++)
{
string template = @"Hello there my name is <Name> <Surname> " + i;
TextParseTests.TestModel model = new TextParseTests.TestModel();
model.Name = "Karl";
model.Surname = "Cassar";
Template t = new Template(template);
t.Add("Name", model.Name);
t.Add("Surname", model.Surname);
var result = t.Render();
sb.AppendLine(result);
}
stopwatch.Stop();
var ms = stopwatch.ElapsedMilliseconds;
int k = 5;
//109ms
}
[Test]
public void TestRazorEngine()
{
CsStopwatch stopwatch = new CsStopwatch();
stopwatch.Start();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++)
{
string template = @"Hello there my name is @Model.Name @Model.Surname " + i;
TextParseTests.TestModel model = new TextParseTests.TestModel();
model.Name = "Karl";
model.Surname = "Cassar";
var result = Razor.Parse(template, model);
sb.AppendLine(result);
}
stopwatch.Stop();
var ms = stopwatch.ElapsedMilliseconds;
int k = 5;
//24000~ ms
}
차이점은 엄청납니다.
- StringTemplatev4에게을 : 109ms
- RazorEngine 3.3 : 24,131ms
StringTemplate에 비해 200 배 이상 느리다! RazorEngine 형식을 사용하는 많은 콘텐츠가 있고 StringTemplate을 통한 RazorEngine 방식의 구문을 선호합니다. 그러나 이것은 극단적으로 매우 느립니다.
내가 잘못된 일을하고 있다면 어떤 아이디어가 있습니까? 내가 다른 템플릿을 사용하고 있습니다. RazorEngine에 캐싱을 사용하는 것처럼 (300 - 400ms까지) 더 빠르지 만 내 웹 사이트에는 다른 작은 텍스트가 많이 있습니다. 실생활 '테스트를 할 수 있습니다.
을 Razor.Parse하지 비교. (C# 파서도 실행해야합니다.) – SLaks
그래도 StringTemplate은 여전히 조건과 표현식 리터럴을 수행합니다. 훨씬 복잡한 템플릿, 1000 회 반복은 180ms 미만에서 실행됩니다. 인상적 RazorEngine에 비해 –