【问题标题】:Performance cost of using Partials in Razor views在 Razor 视图中使用 Partials 的性能成本
【发布时间】:2011-04-26 01:42:18
【问题描述】:

我喜欢在我的 Razor 视图中使用局部视图。它使代码干净整洁。但是使用 partials 是否有任何显着的性能成本?我创建了一个简单的测试。它表明使用分部要慢得多

test.cshtml:

@{
   var stopwatch = new System.Diagnostics.Stopwatch(); 
   stopwatch.Start();         
   for(var i=0; i<1000; i++) {
      var str = "my string #" + i;        
      @Html.Partial("_MyPartial",str)  // replace with @str on second test
      <br />        
   }
   stopwatch.Stop();
   <br />
   @: Time elapsed (ms): @(stopwatch.ElapsedMilliseconds)
}

_MyPartial.cshtml:

@Model

部分代码在 340 毫秒内执行,而内联 @str 代码显示为 0 或 1 毫秒。这对我来说真的很令人震惊,因为这意味着我应该摆脱所有可爱的部分,至少是那些在循环中的部分。

如果有人想确认或批评我的实验,非常欢迎。

【问题讨论】:

  • 您为什么担心?你没有达到你的性能要求吗?或者这纯粹是过期?如果是这种情况,是的,使用局部变量会降低性能。
  • 我有一个包含客户表格的页面,我使用部分表格为每个客户显示一些时髦的 html。我需要尽快成为输出——这就是我决定进行测试的原因。此外,替换 Html.ActionLink 有助于大大提高渲染速度。经过所有优化 - 这个特定页面的速度提高了大约 10 倍。

标签: c# asp.net-mvc-3 razor


【解决方案1】:
  1. 确保您没有在调试模式下运行您的站点,并且 MVC 项目正在发布配置中进行编译。在调试模式下运行站点会使 MVC 跳过一堆缓存
  2. 您没有提供基线代码,因此很难确定您的结论是否合理。
  3. 您认为对 Partial 进行 1000 次调用很常见吗?似乎您正在衡量一个不现实的场景。在任何相当复杂的网站中,数据库调用的成本通常会使任何视图代码相形见绌。
  4. 请观看此视频:http://channel9.msdn.com/Series/mvcConf/mvcConf-2-Steven-Smith-Improving-ASPNET-MVC-Application-Performance

【讨论】:

  • 谢谢,好点。是的,我在发布模式下进行了测试,仅出于测试目的设置了 1000。我同意你的观点,在我的真实页面上只有 50 次循环迭代,但是当我使用内联 html 时它仍然有很大的不同。
【解决方案2】:

在此操作中,您有一个秒表,它正在循环 1000 次,并访问该部分。该部分位于单独的内存位置,甚至可能需要磁盘 i/o 访问才能加载。这显然不如将代码放在页面本身上。

但不要到处拒绝部分。如果您处于没有在页面上多次加载的代码的情况(与您展示的此代码不同),那么部分非常有用,并且它们造成的性能损失不是那么严重,您应该麻烦了。

【讨论】:

  • 同意,我当然不会停止在非循环情况下使用 partial。这是一个非常方便的功能 - 有时拥有干净且可维护的代码比赢得 10 毫秒更重要。
【解决方案3】:

是的,使用 partials 确实会造成性能损失;必须打开和读取一个新文件,而且 IO 总是很慢/很贵。

【讨论】:

  • 投反对票,因为您在没有检查/知道 MVC 如何处理部分内容的情况下陈述了显而易见的内容。您的答案没有考虑缓存,这是这里的决定因素,因为 OP 要求重复调用相同的局部视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多