ASP.NET MVC之如何看待内置配置来提升性能优化(四)

前言

前几篇咱们比较基础的讲了下MVC中的知识,这一节咱们穿插点知识,讲讲MVC中咱们能够提升性能的办法。jquery

Razor视图引擎优化(优化一)

咱们知道默认状况下配置MVC去解析一个视图会首先约定经过查找全部的匹配Web Form视图引擎的名称。例如当咱们查找一个不存在的视图时,会出现以下错误:缓存

从上面咱们能够很明显的知道,若是咱们MVC应用程序中没有使用ASPX视图时,当咱们在Action方法中经过 return View() 返回视图或者 Html.RenderPartial 等查找视图时每次都会检查上述四个未使用的位置,此时这是至关的耗时并且性能十分低下尤为是当视图比较庞大时,这样形成的后果简直没法想象。咱们有没有什么解决的办法呢?以下:性能优化

移除Web Form视图引擎

在MVC中移除Web Form视图引擎很是简单,咱们须要移除全部的Web Form视图引擎仅仅留下Razor视图引擎,咱们在Global.asax.cs的Application_Start事件中添加以下代码:mvc

            //移除全部视图引擎
            ViewEngines.Engines.Clear();
             
           //添加Razor视图引擎
            ViewEngines.Engines.Add(new RazorViewEngine());                        

此时咱们再来运行下程序:asp.net

咱们成功的移除了ASPX视图引擎。性能

注意 :经过上述移除Web Form视图引擎,此时咱们基于Razor视图引擎查找匹配的第一个视图就是正确的,因此此时Razor视图引擎的性能较比以前接近将提高两倍,固然这样使用必需要有前提,确保咱们的MVC应用程序中不会用到Web Form,若是咱们既想使用Razor视图引擎又想使用ASPX视图引擎则不能那么作。优化

设置Debug = false(优化二) 

在MVC中调试模式和发布模式对MVC应用程序究竟有什么不一样呢?网站

Debug Mode (调试模式)

在调试模式下,视图解析有利于开发中进行优化,经过视图解析一次又一次请求咱们的代码最终渲染成一个有名称的视图被称为视图迭代,这种做用是很显而易见的,当咱们在进行实际开发时对代码进行了更改咱们须要环境当即作出响应。spa

Release Mode(发布模式)

在发布模式下,MVC的视图解析有利于性能的优化,当一个视图在发布模式下被正确解析了,此时会缓存该搜索的结果,当再次遇到以该视图命名的引用时不须要在另一个文件系统中进行搜索。.net

经过上述描述咱们可以理解若是模式是在发布模式下在第一次被解析后,其结果是可以被缓存的,虽然在视图引擎中Web Form视图引擎优先于Razor视图引擎执行,可是主要在第一次被解析后其结果会被缓存,因此其带来的影响能够忽略不计。只要咱们的生产环境不是在调试模式下,这个视图解析问题能够彻底被消除

那么问题来了,设置Debug = false仅仅是为了视图引擎? 显然不是,咱们接着往下看。

视图解析缓存只是一个为了确保咱们的网站没有运行在调试模式下众多中的一个理由,其实还有其余严重缺点。

(1)超时问题(Timeouts)

不知道你是否注意到,咱们曾花大量的时间在没有暂停的请求超时问题下进行着调试,这是由于咱们设置【debug="true"】彻底禁止了请求超时,很显然这在一个已上线的网站上这样作不是一个好主意。

(2)捆绑和压缩(Bundling and  Minification)

貌似听到这两个词感受很陌生对吧,咱们一一来看你就恍然大悟了。

在建立项目App_Start文件夹下有个 BundleConfig 配置,这个就是用来捆绑脚本和压缩脚本以及样式的配置文件。例如咱们如今将jquery脚本进行捆绑,以下:

   bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-{version}.js"));

此时咱们来看看结果:

此时咱们将配置文件中模式进行以下更改:

咱们再来看看结果:

这就验证了咱们的观点,若是是在发布模式下它将会自动进行捆绑和压缩,可是当咱们在配置文件中将【debug="true"】此时将不会缩小、也不会绑定脚本组合从而达不到缩短请求时间的目的。很显然在开发中调试时这是很是重要的,可是其违背了咱们在生产环境进行了性能优化的基本准则,这一点咱们须要注意。

对于上述对于捆绑和压缩脚本或者样式的问题,有人就会想了,咱们能够经过代码来进行显示启动,以下在BundleConfig配置文件中进行设置也是能够的:

 BundleTable.EnableOptimizations = true;

经过上述代码即便在Web.Config文件中将模式设置为了【Debug="true"】此时也会启动压缩和捆绑脚本或者样式,由于其显式覆盖了在Web.Config环境中的设置。

 (3)WebResource.axd缓存

对于客户端资源优化,服务资源只有在发布模式下才会包括在缓存头中,在调试模式下根本不会去进行缓存。

参考

A harsh reminder about the importance of debug=”false”

Bundling and Minification

结语

这节咱们大概经过对内置默认的一些配置进行修改来提升MVC应用程序性能,但愿对阅读本文的你有所帮助,下节咱们继续进行MVC系列讲解。

相关文章
相关标签/搜索