【问题标题】:MVC Render SpeedupMVC 渲染加速
【发布时间】:2012-01-21 17:22:11
【问题描述】:

我刚刚在我的网站上连接了mvc-mini-profiler(谢谢!),并正在四处寻找我到目前为止的表现(这是我第一次使用 linq to entity 和 mvc 进行重大较量)。到目前为止,一切看起来都不错,但是我一直在寻找改善响应时间的方法。在这一点上,我唯一能获得的主要提升似乎是减少在每个页面上呈现单个视图所需的时间。

您可以从我的屏幕截图中看到,Blog 视图的渲染是运行时间最长的任务。我知道 30 毫秒已经非常快了,但我敢打赌,我仍然可以使用一些技巧来让这些数字更低。

所以问题是这样的:如何减少视图渲染时间?我知道将动态视图缓存到 HttpRuntime.Cache 之类的东西会有所帮助,但我什至看到了几毫秒的持续时间用于静态视图渲染。您使用什么技术来降低视图的渲染时间?

【问题讨论】:

  • 您是否在数据库的视图中构建对象?如果不知道代码中发生了什么,很难提供建议。
  • 您能否再次运行您的测试,但请确保您在 Release 下运行 MVC 应用程序。 Blog 有多复杂?它是调用多个子操作还是部分操作?
  • @TravisJ 在其中一些,是的。在其他情况下,我只是获得静态视图。
  • @Omar 我目前正在发行版中运行它。它也调用了一个局部视图。
  • 是否可以从您的控制器构建这些对象,然后将它们传入?我认为这会更快,特别是如果您只在类型化的博客模型中构建/传递相关部分。

标签: asp.net-mvc performance view


【解决方案1】:

我建议 2 件事(如果你还没有完成的话)...

  1. 删除未使用的 ViewEngines。因此,如果您的项目仅使用 razor 视图引擎,请在 Application_Start() 上的 global.asax 中执行此操作;

    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new RazorViewEngine());
    

    ViewEngines.Engines.Add(new WebFormViewEngine());
    

    如果您仅使用 WebFormsViewEngine

  2. 最大的改进是使用OutputCacheAttribute 来缓存html。我不认为你的博客在每个请求上都会改变;)

    public class BlogController : Controller
    {
        [OutputCache]
        public ActionResult Index()
        {
           // do something here
           return View();
        }
    }
    

您可以设置缓存持续时间等。查看:MSDN - OutputCacheAttribute

【讨论】:

  • 什么会导致[OutputCache] 忽略缓存?当我将持续时间设置为 60 时,看起来第一次渲染后每次都需要更长的时间(每次渲染的时间等于第一次渲染所用的时间:现在看起来每次都在重新编译)。跨度>
  • 不太清楚你的意思(也许太累了);)。在您的“return View()”上放置一个断点以检查您的 CacheAttribute 设置是否有效。没有性能提升?应该有更好的加载时间。请回复,因为这应该可以工作。
  • 我下班后会看看这个。我实际上在想它可能看起来运行起来一样慢,但实际上迷你分析器结果本身可能也被缓存了。如果是这样我会笑的。此外,我只使用剃须刀,所以我会在使用时测试您的第一个建议的影响。
  • 是的,迷你分析器正在缓存“迷你分析”结果。我还没有找到解决这个问题的方法,但看起来使用OutputCache 确实可以加快速度。
  • 您是否有任何数字说明您通过例如从每个请求节省了多少时间? 3查看引擎到1?它与数据库或服务往返相比如何?我们说的只是 1 毫秒还是 100 毫秒?
猜你喜欢
  • 2014-01-17
  • 2019-12-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-09
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
相关资源
最近更新 更多