最近在进行 YbSoftwareFactory 的流程功能升级,目前已经基本完成,现将用到的一些关于 Web Api 及 MVC 性能提高的一些小技巧进行了总结,这些技巧在使用、配置上也至关的简单,但一般都能大大提升应用程序的性能,但愿对你们有用。css
1、缓存前端
为了不每次请求都去访问后台的资源,咱们通常会考虑将一些更新不是很频繁的,能够重用的数据,经过必定的方式临时地保存起来,后续的请求根据状况能够直接访问这些保存起来的数据,这种机制就是所谓的缓存机制。缓存分为页面输出缓存,内存数据缓存和缓存依赖等。从设计原则来讲,易变性、敏感性的信息不适合进行缓存,同时缓存的内容也是易丢失的,在代码中不能彻底依赖于缓存的数据,须要保证在缓存的数据丢失后也能进行正确的处理。数据库
一、页面输出缓存api
经过对输出的页面进行缓存,每次新的用户请求调用相同的 Action 时,相同的内容不须要从新建立一次而直接输出。页面输出缓存的使用很是简单,在 Action 上使用 [OutputCache] 特性标记便可生效。页面输出缓存可控制缓存的内容所存储的位置,例如是在服务器端存储缓存的页面内容仍是在客户端存储缓存的页面内容;也可以使用 Duration 参数控制缓存的失效绝对时间和间隔时间,甚至能使用 VaryByParam 参数对不一样的请求参数分别进行缓存。页面输出缓存很是适合于内容比较固定的前端页面的缓存。
浏览器
二、内存数据缓存缓存
一般状况下,数据是保存在数据库、磁盘文件等存储介质中的,而应用程序访问这些资源是一项很费时的操做。若是先将这些资源中的数据缓存到内存缓存区中,当应用程序须要这些数据时,直接从缓存区中提取,就能够减小系统开销,显著提升可以使用的用户并发数等。内存数据缓存需考虑缓存的内容更改失效后如何清空其余已经被缓存的相关联的数据问题。服务器
三、EFCache网络
众所周知,NHiberate 提供了二级缓存功能。如今,若是你使用的是 Entity Framework 6 或更高版本的 Entity Framework ,你也可考虑使用 EFCache 组件来为 Entity Framework 提供二级缓存支持,其实质上也是属于内存数据缓存。EFCache 的特色是使用上很是方便,仅需定义以下的代码无需其余复杂的额外的配置便可实现二级缓存。如需定义特定的缓存策略,如缓存的过时时间,控制数据缓存的范围,也仅需继承 CachingPolicy 类并 override 其部分方法便可。你甚至能够经过实现 ICache 接口来实现自定义的缓存模型以替换默认的 InMemoryCache 。并发
经测试,使用 EFCache 后,一般性能的提高均是显而易见的。其参考代码以下:app
1 /// <summary> 2 /// EF二级缓存配置,如无需二级缓存请注释以下类定义 3 /// </summary> 4 public class Configuration : DbConfiguration 5 { 6 private static InMemoryCache _cache = new InMemoryCache(); 7 public Configuration() 8 { 9 var transactionHandler = new CacheTransactionHandler(_cache); 10 11 AddInterceptor(transactionHandler); 12 13 var cachingPolicy = new CachingPolicy(); 14 15 Loaded += 16 (sender, args) => args.ReplaceService<DbProviderServices>( 17 (s, _) => new CachingProviderServices(s, transactionHandler, 18 cachingPolicy)); 19 } 20 public static void ClearCache() 21 { 22 _cache.Purge(); 23 } 24 }
2、Stream压缩
对响应流进行压缩,其做用是减小网络开销,提升系统的响应速度。目前的浏览器一般都支持 gzip 和 deflate 压缩解压功能,所以你一般无效考虑浏览器的兼容性问题。启用 gzip 和 deflate ,既可经过 IIS 配置实现,在 MVC 中也可经过编写自定义的 ActionFilter 实现。在压缩以前和压缩以后 Stream 的大小差别一般都是惊人的,其压缩率一般都在5-10倍以上。
具体可看看以下的监视数据:
3、js和css文件的压缩和打包
一、js 和 css 文件的压缩
其实质就是生成较小的文件,减少下载这些文件的网络开销,提供系统的响应速度。压缩 js 和 css 文件还有个好处是一般还能够起到代码混淆的做用。在 YbSoftwareFactory 的 MVC 解决方案中,使用的是 Microsoft Ajax Minifier 组件,可在代码编译的过程当中自动对所配置的 js 和 css 进行压缩,基本上文件的大小均可减小一半以上:
在 YbSoftwareFactory 的 MVC 解决方案中,巧妙使用了条件编译符号,可在 Debug 模式下使用未压缩的版本以方便调试,在 Release 模式下则可自动切换至对已压缩文件的引用,并经过 Microsoft Ajax Minifier 生成最新的被压缩后的文件版本,对于程序的开发和部署均很是的方便,例以下面的代码:
1 @{ 2 ViewBag.Title = "产品"; 3 ViewBag.AllowEdit = true; 4 ViewBag.AdminJsUrl = YbRapidSolution.Mvc.AutofacBootStrapper.RELEASE 5 ? @Url.Content("~/Scripts/Admin/Products/Index.min.js") 6 : @Url.Content("~/Scripts/Admin/Products/Index.js"); 7 var commonJs = YbRapidSolution.Mvc.AutofacBootStrapper.RELEASE 8 ? @Url.Content("~/Scripts/Admin/Products/_Common.min.js") 9 : @Url.Content("~/Scripts/Admin/Products/_Common.js"); 10 }
二、js、css文件的打包
其目的是进行 js 文件和 css 文件的合并,当前主流浏览器的并发链接数默认状况下一般都是 6 个,若是前端页面同时请求的服务器资源(如 img 文件、js 文件、css 文件以及各种 url 请求等)超过6个,一般就须要进行排队下载。进行 js 文件、css 文件的打包合并,一般能够在一次请求中就完成未打包以前需屡次请求才能完成的工做,经过减小前端浏览器的链接请求,在某种意义上也是可提升系统的响应速度的。js、css 文件的打包一般可使用 MVC 自带的 Bundle 功能,也可以使用某些专用的打包工具,具体再也不详细描述。
如需了解更多请点击:权限模型+流程专家 Demo