最近在進行 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