有谁知道Razor,Spark和NVelocity视图引擎之间的性能差异?

时间:2011-07-29 17:23:56

标签: asp.net performance asp.net-mvc-3 razor

有没有人有任何性能数字可以比较ASP.NET MVC3的各种viewengine实现?具体来说,我对Razor,Spark和NVelocity之间的性能差异感兴趣。我意识到最后一点有点过时,但我们用它来生成电子邮件,并想用RazorEngine替换它。

NVelocity曾经在当时很快,但与其他更现代的视觉引擎相比,我现在对它的性能表示怀疑。

任何见解都将受到赞赏。

2 个答案:

答案 0 :(得分:3)

RazorEngine的作者之一。视图的第一次编译总是很慢。之后它被缓存并且应该相当快。最终会出现一个新版本,这将是一个基本的重写。另外,在Sam Saffron的帮助下,我已经写了一个更小/更简单/希望更快的版本。 (来自这个网站)那就是说,我没有对RazorEngine与任何其他引擎进行任何性能测试。

Razor本身被编译(在第一次调用之后)。如果Spark和其他人也被编译,他们可能同样快。但乍看之下,由于本机代码与每次调用时解析文件,我会假设 * Razor在第一次调用后更快。

最简单的测试方法是对每个人进行分析并为自己做出决定。每个人的环境都会有所不同,可能产生不同的结果。

* 我们都知道假设是什么

答案 1 :(得分:1)

我知道这是一个老问题,但在寻找剃刀的更好替代品后,我仍然认为它们都不比nvelocity快。 Razor为您提供智能感知,并且更容易编码。但是nvelocity要快得多。在下面的示例中,您会发现剃刀需要2秒才能解析一行文本。 NVelocity立即解析。我也用模板文件对此进行了测试,结果相同。对于商业Web应用程序,解析2秒太慢。因此,尽管我更喜欢剃刀,但我别无选择,只能坚持使用NVelocity。

我不太确定缓存。但是在字符串解析的情况下(与基于文件的解析相反),如下例所示,剃刀没有缓存。

简单的asp.net示例:

protected void Page_Load(object sender, EventArgs e)
{
    string toParseText = "bladiebla $Model.SomeProperty";
    dynamic model = new ExpandoObject();
    model.SomeProperty = "hello";
    string result = Razor.Parse(toParseText, model);


    var _templateEngine = new VelocityEngine();
    _templateEngine.Init();
    var context = new VelocityContext();
    context.Put("Model", model);
    using (StringWriter writer = new StringWriter())
    {
        _templateEngine.Evaluate(context, writer, "", toParseText);
        string result2 = writer.ToString();
    }
}

的NuGet:

  • install-package RazorEngine
  • install-package nvelocity