【问题标题】:Html.RenderPartial slowHtml.RenderPartial 慢
【发布时间】:2015-04-21 14:22:08
【问题描述】:

我们的网络应用包含数十个局部视图,其中一些是其他视图的子视图。我们注意到应用程序在第一次加载时速度很慢,初始化它第一次调用的每个视图需要 0.5 到 1 秒。我跟踪了时间并发现:

Html.RenderPartial("~/Full/Relative/Path/To/View.cshtml", null);  

即使视图完全是空的,也可能需要大约 1 秒。同时:

var view = ViewEngines.Engines.FindPartialView(
ViewContext.Controller.ControllerContext, "~/Full/Relative/Path/To/View.cshtml");

需要 1 毫秒,因此无需花费时间查找文件。
问题:
1. 视图编译器需要这么长时间是正常的吗?
2. 有没有其他方法可以使第一次调用快速但不使用 csproj 中的指令预编译视图?

ps:奇怪的是,相同的视图在应用开发初期加载速度更快。

【问题讨论】:

  • @DZL 谢谢,我知道,这只会加快进一步的通话,而不是最初的通话。
  • 赞成(如果只是因为您选择的用户名很酷):)

标签: .net asp.net-mvc razor


【解决方案1】:

您看到的延迟完全取决于首次使用时视图的初始编译。速度将取决于服务器(处理器和驱动器速度、内存、使用情况等)。

您要么接受它,要么将项目设置为预编译视图以避免在运行时编译。

【讨论】:

  • 谢谢,投了赞成票。也许你知道为什么一开始加载速度更快?
  • @LINQ2Vodka:当时你的项目可能更小?它必须首先查找/检查并可能编译所有代码依赖项,而不仅仅是视图。与构建解决方案没有太大区别(只是不是全部)。
  • 在新评论中添加了一些信息,可能有用
【解决方案2】:

嗯,TrueBlueAussie 的回答是正确的,但我有一些要补充的。
在编译视图时(在应用程序编译期间或之后,取决于项目配置),编译器会创建 *.dll,每个包含视图的文件夹一个。当应用程序第一次显示视图时,包含该视图的整个 DLL 将由 IIS 服务器加载。在这个过程中,你可以很容易地发现它在 VS 中观察输出窗口,这可能需要一秒钟甚至更长的时间。加载 DLL 后,同一文件夹中的所有其他视图都会快速呈现。因此,您拥有的视图文件夹越多,IIS 加载它们并花费的时间就越多。希望这会有所帮助。

【讨论】:

    【解决方案3】:

    我还要补充一点:

    Html.RenderPartial("~/Full/Relative/Path/To/View.cshtml", null);  
    

    实际上是将 html 渲染到流中。其中:

    var view = ViewEngines.Engines.FindPartialView(
      ViewContext.Controller.ControllerContext, "~/Full/Relative/Path/To/View.cshtml");
    

    只返回一个IView,它没有执行视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-15
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      相关资源
      最近更新 更多