欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > ASP.NET組件System.Web.Optimization原理及緩存問題詳解

ASP.NET組件System.Web.Optimization原理及緩存問題詳解

熱門標簽:400電話辦理怎么樣 百應電話機器人外呼系統 西寧呼叫中心外呼系統線路商 聯通官網400電話辦理 臨沂智能電話機器人加盟 外呼電話機器人成本 地圖標注軟件免費下載 蘇州如何辦理400電話 網絡電話外呼系統上海

1】開篇介紹

這篇文章將簡單的分析一下有關靜態文件捆綁的ASP.NET組件System.Web.Optimization的運行原理及基本的緩存問題:

在我們的項目里面充斥著很多靜態文件,為了追求模塊化、插件化很多靜態文件都被設計成模塊的方式或者被分解,在需要的時候在通過組合的方式在UI層上使用;這就帶來一個問題,文件多了會影響瀏覽器加載頁面的速度,而且由于瀏覽器的并發限制,對于并行的請求不是無限制的,所以捆綁靜態文件的功能就產生;其實在以前,IIS還沒有集成管道模型的時候我們只能通過動態資源的方式進行輸出,也就是我們經常在*aspx頁面里看見很多*.axd結尾的請求,當然多數情況下是配合ASP.NETAJAX用來輸出動態JS、HTMDOM、CSS用的;

最新的IIS已經很好的集成了ASP.NET管道模型,也就是說我們完全可以通過ASP.NET本身的擴展來控制所有經過IIS的請求,包括靜態文件,所以讓捆綁靜態文件成為了可能;

下面我們將分析一下System.Web.Optimization組件的基本運行原理,它是如何動態加載的,如何控制緩存的;

2】System.Web.Optimization 組件

每當我們新建一個ASP.NETMVC4站點的時候都會在~/App_Start目錄下有一個BundleConfig.cs的啟動文件,當然創建其他的ASP.NET4.0及4.0以上的項目也會有;

我第一次看見這個文件實在讓我困惑,所以我打算簡單的分析一下,知道其基本原理;

代碼是一個靜態方法,然后傳入一個BundleCollection集合對象,其實就是Bundle對象的集合,然后通過向集合內部注冊多個Bundle;每個Bundle對應著多個靜態文件,可以想象成就是鍵值對集合;通過后面的Include方法包含N多個靜態文件,這里的靜態文件路徑可以是符合特定規則的字符串,由它內部去計算;

這是注冊階段,然后就是使用階段,使用階段很簡單只要我們通過我們注冊的Key字符串就能直接引用這些靜態文件列表;

我們只要關注Styles.Render、Scripts.Render兩個方法,這兩個方法是想頁面注入之前在后臺配置的靜態文件列表;這樣我們在客戶端看見的就是被捆綁過后的文件集合了;

文件的連接地址已經是被捆綁過后的地址了,這個地址就是我們在之前注冊的時候用的key,后面它需要這個key去獲取value 靜態文件列表;要想你的捆綁起效果需要在注冊的時候加上一段:BundleTable.EnableOptimizations = true;代碼,意思是說開啟捆綁,如果不開啟捆綁則默認在調試環境里將不起效果,因為System.Web.Optimization使用了默認捆綁策略,如果是在Debug模式下,將不啟用捆綁,如果你人為的設置了將覆蓋默認設置;

使用就是這些,下面我們需要搞懂它是如何運行的,要了解一下它的基本原理;

3】System.Web.Optimization 組件基本原理

既然IIS集成了管道模型,那么我們肯定是能找到對應的HttpModule的,為了節省時間我就不去下載源碼了,我們直接用反編譯工具看一下;

這就是Bundle的HttpModule,它只用來處理
Bundle的連接地址,雖然它在HTTP的管道中;找到它就好順藤摸瓜了,但是奇怪的是我在Web.config里沒有發現它的配置信息,奇怪了,難道它還跑去系統文件改,當然是不可能的;所以我一時還想不起能有什么辦法動態注冊,提起動態注冊突然有了思路,好像有一個Assembly級別的特性用來注冊Application_Start啟動時候的前置代碼,會在Application啟動之前執行,來看一下;

果然藏著這里呢,它注冊了一個PreApplicationStartCode靜態類,使用Start方法啟動;

這段代碼很簡單,先判斷有沒有執行過注冊,如果沒有就執行動態注冊,這個動態注冊組件是.NETFramework自帶的,在Microsoft.Web.Infrastructure里面只不過屬于平臺相關的,跟ASP.NET沒有直接關系,我們可以用Microsoft.Web.Infrastructure來開發自己的WEB組件;這里有一個疑問,為什么靜態方法也要加判斷呢,不是只會執行一次嗎,因為靜態方法的執行是不受控制的,所以如果不加判斷很有可能會注冊多次,出于嚴謹考慮還是加上;

現在基本上我們已經找到源頭了,服務端這里我們先放一下,對于客戶端的疑問很多,它既然幫我們捆綁了,那么緩存是如何處理的,也就是說它的輸出緩存有沒有設置,如果設置了不是有問題;

【客戶端緩存相關】

為了很好的了解請求之間的信息,我們用Fiddler監聽一下;

我們看見它的Cache部分是用了If-Modified-Since來表示本地的文件的最后一次修改,這樣是為了能夠讓服務器去驗證文件是否改動,如果沒有改動服務器的響應狀態碼為304,說明Bundle在輸出的時候并沒有設置對這個文件進行客戶端強制緩存,我們通過Pragma: no-cache頭也能看出來了;

那么我們得出結論,所有Bundle出來的文件都不可能直接緩存在瀏覽器中,每次都會帶上Cache段If-Modified-Since去驗證服務器的文件版本;剛好這里我們可以跟動態輸出的靜態文件地址的后面的參數對上了;

比如:

/Content/css?v=ZPnWVRT3c0yyrVDPmI-xkJuhBdJfQsL3A0K5C9WTOk01

這個鏈接后面的v參數是表示當前Bundle后虛擬文件的版本,如果我們在服務器上把文件修改了之后那么這個文件的If-Modified-Since驗證就失敗了,會生成新的版本號作為連接的參數;我們來看一下,心里踏實;

我加了一個width:auto的style,那么這個時候我刷新客戶端應該是不會再有304出現了;

顯然/Content/css?v=doYFOk3BdOYWDIRbQ7juV6eQdlJAu6RtC0G13El7X041 文件的版本變了,那么Response也不應該是304了;

如果靜態文件的版本號發生改變,根本就不會帶上 If-Modified-Since,這個是用在每次進行進行Post是用來驗證的;其實意思就是說如果沒有IIS集成模式那么捆綁文件的方式只能改變靜態文件的文件名;

4】擴展自定義類型靜態文件

Bundle對象是所有需要捆綁文件的基類,如果我們需要擴展一些靜態文件,如一些特定領域的靜態文件,我們可以直接繼承這個類;

【XML文件的緩存】

擴展XML文件很簡單,我們只需要繼承一下Bundle對象,所有關于動態生成URL都有專門的對象處理,我們來看下代碼;

public class XmlBundle : Bundle
 {
 public XmlBundle(string path) : base(path) { }
 }
 public static class XmlBundleRender
 {
 public static IHtmlString Render(string path)
 {
  BundleResolver bundle = new BundleResolver(BundleTable.Bundles);
  return new HtmlString(
  string.Format(@"link href=""{0}"" rel=""stylesheet""/>", bundle.GetBundleUrl(path)));
 }
 }

首先我們需要一個繼承自Bundle對象的XmlBundle,用來表示我們所有將要傳輸的XML文件捆綁容器,然后我們需要一個靜態方法用來注冊捆綁后的URL;

這個URL的生成有專門的BundleResolver對象來完成,我們只需要傳入所有的BundleCollection對象,我這里為了能在瀏覽器中測試所以寫了一段stylesheet類型的link;這樣我們就能直接在我們需要的地方直接使用了,我在index視圖中引用:@MvcApplication4.Seed.XmlBundleRender.Render("~/custom/xml");是不是很簡單,這樣我們就能對所有想控制捆綁的文件進行捆綁,只需要繼承加簡單的靜態方法輔助;

我們來看一下我們的XML文件是否具有所有緩存特性;

第一次請求沒有加If-Modified-Since段,返回的內容是一個簡單的model>222/model> 測試簡單,現在我們看它是否在下一次不改變內容的情況下使用緩存;

在我們預料之中,使用了緩存數據,下面我們需要把服務器上的XML文件進行修改,將222改成243454637看是否自動刷新本地緩存也就是說不會是304返回狀態;

也刷新緩存,符合理論根據,正確的返回了我們修改后的值;

結:其實HTTP不僅僅用在瀏覽器中,會有很多使用HTTP的場合,所以我們能很好的將這種功能用來捆綁一些圖片、文字等多種場合中,確實是個不錯的組件;文章結束,謝謝;

作者:王清培

出處:http://www.cnblogs.com/wangiqngpei557/

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

您可能感興趣的文章:
  • 無法將類型為“System.Web.UI.WebControls.HiddenField”的對象強制轉換為類型的錯誤的解決
  • System.Web.Routing入門及進階
  • System.Web.Routing入門及進階
  • NET Runtime Optimization Service 1101 錯誤的解決方法
  • ASP.NET MVC命名空間時引起錯誤的解決方法
  • ASP.Net中命名空間Namespace淺析和使用例子
  • System.Web中不存在類型或命名空間名稱“Optimization”(是否缺少程序集引用?)

標簽:慶陽 清遠 聊城 平涼 中衛 海西 臨夏 甘肅

巨人網絡通訊聲明:本文標題《ASP.NET組件System.Web.Optimization原理及緩存問題詳解》,本文關鍵詞  ASP.NET,組件,System.Web.Optimization,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《ASP.NET組件System.Web.Optimization原理及緩存問題詳解》相關的同類信息!
  • 本頁收集關于ASP.NET組件System.Web.Optimization原理及緩存問題詳解的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    欧美日韩国产首页| 国产激情在线免费观看| 免费看一级大片| 久久一日本道色综合| 亚洲福利视频一区| 亚洲国产欧美日韩在线| 久久久久久久久毛片| 国产精品伦一区| 精品一区二区三区久久久| 免费看污片网站| 精品成人在线观看| 日韩精品乱码av一区二区| 免费黄色三级网站| 欧美一区二区三区四区五区| 午夜精品福利久久久| 亚洲区自拍偷拍| 欧美日本视频在线| 亚洲高清视频的网址| 一级黄色片毛片| 欧美一区二区网站| 蜜臀av在线播放一区二区三区| 久久无码人妻精品一区二区三区| 欧美肥胖老妇做爰| 婷婷一区二区三区| 国产黄色网址在线观看| 精品久久国产字幕高潮| 久久99精品久久久| 日韩av片在线免费观看| 国产精品美女久久久久高潮| 成人av资源站| 欧美唯美清纯偷拍| 午夜精品一区二区三区免费视频 | 欧美激情 一区| 国产三级精品三级| 国产成人福利片| 一本色道久久加勒比精品| 亚洲精品高清视频在线观看| 精品无码人妻少妇久久久久久| 日韩女同互慰一区二区| 国产中文字幕精品| 久久久久久久久久网站| 一区二区三区四区视频精品免费 | 在线成人小视频| 爽好多水快深点欧美视频| 亚洲欧美日本一区| 久久久久国产精品人| 成人一区二区三区中文字幕| 欧美专区亚洲专区| 日本麻豆一区二区三区视频| 天天舔天天操天天干| 国产精品久久免费看| a级大片免费看| 91精品国产综合久久久久久久久久| 蜜桃视频在线观看一区二区| 免费成人美女女在线观看| 亚洲精品一二三四区| 熟女人妻在线视频| 国产精品水嫩水嫩| 日本wwwwwww| 久久九九99视频| 99热这里只有精品2| 精品国免费一区二区三区| 成人激情动漫在线观看| 91精品欧美久久久久久动漫 | 99精品久久只有精品| 制服丝袜在线91| 国产激情一区二区三区桃花岛亚洲| 91精品福利视频| 日本不卡中文字幕| 亚洲国产美女视频| 男男视频亚洲欧美| 国产亚洲欧洲一区高清在线观看| 国产老女人精品毛片久久| 欧洲激情一区二区| 久久国产视频网| 91国产免费观看| 美女www一区二区| 日本韩国欧美在线| 精品一区精品二区高清| 欧美午夜精品久久久| 国产一区三区三区| 欧美精品自拍偷拍| 成人精品电影在线观看| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 天天操天天摸天天舔| 亚洲在线成人精品| 日本二区三区视频| 日本亚洲三级在线| 色噜噜狠狠色综合欧洲selulu| 亚洲成av人影院在线观看网| 一区二区三区影视| 麻豆精品一区二区综合av| 欧美性三三影院| 国产电影一区在线| 欧美xxxxxxxx| 无码国产精品一区二区免费式直播 | 天天躁日日躁狠狠躁av| 国产精品免费人成网站| 最近中文字幕免费视频| 亚洲国产精品久久久久婷婷884| 黄视频网站免费看| 极品美女销魂一区二区三区| 91精品国产入口| 91天堂素人约啪| 国产精品超碰97尤物18| 色噜噜噜噜噜噜| 免费欧美高清视频| 3d成人h动漫网站入口| 免费人成视频在线播放| 国产精品久久久久久亚洲伦| 国产无遮挡在线观看| 日韩精品一区第一页| 在线看一区二区| 99免费精品视频| 中文字幕一区免费在线观看 | 日韩精品乱码av一区二区| 色94色欧美sute亚洲线路二| 国产美女在线精品| 久久女同性恋中文字幕| 麻豆精品免费视频| 久久精品久久久精品美女| 日韩欧美美女一区二区三区| 性久久久久久久久久久| 亚洲成av人片| 91精品午夜视频| 成年人的黄色片| 日本在线不卡一区| 日韩免费看的电影| 一本加勒比北条麻妃| 强制捆绑调教一区二区| 欧美一级久久久久久久大片| 亚洲色图14p| 青青草精品视频| 欧美va日韩va| jizz18女人高潮| 丰满少妇在线播放bd日韩电影| 国产精品污网站| 一本色道久久综合亚洲aⅴ蜜桃| 国产69精品久久久久777| 国产精品私人影院| 日韩一级片av| 超碰人人cao| 日本一二三四高清不卡| 国产小视频你懂的| 色综合色综合色综合| 蜜桃免费网站一区二区三区 | 91精产国品一二三| 亚洲第一在线综合网站| 日韩一区二区在线看片| 男女做爰猛烈刺激| 国产在线精品一区二区夜色| 中文字幕av在线一区二区三区| 色综合一区二区| 不卡的一区二区| 日韩av中文字幕一区二区三区| 日韩一区二区在线观看| 美女爆乳18禁www久久久久久| 韩国精品久久久| 国产精品久久久久久福利一牛影视| 日本高清成人免费播放| 天堂va欧美va亚洲va老司机| 日韩电影一区二区三区四区| 久久久无码精品亚洲日韩按摩| 男人的午夜天堂| 91年精品国产| 男人操女人的视频在线观看欧美| 亚洲精品在线电影| 亚洲成人生活片| 大乳护士喂奶hd| 久久精品国产99| 中文字幕在线不卡| 91精品黄色片免费大全| 欧美人与禽zoz0善交| 99精品久久只有精品| 日韩成人免费看| 国产精品美女久久久久久久久 | 久久久精品综合| 色天天综合色天天久久| 国产黄色三级网站| 国产精品18久久久久久久久久久久| 亚洲自拍偷拍麻豆| 久久综合色婷婷| 在线观看av一区| 精品无人区无码乱码毛片国产| bt欧美亚洲午夜电影天堂| 五月天激情小说综合| 欧美国产日本视频| 欧美午夜一区二区| 日本爱爱爱视频| 性生活在线视频| 国产在线国偷精品产拍免费yy| 一区二区三区精品| 久久久午夜电影| 91超碰这里只有精品国产| 免费看特级毛片| 亚洲第一成人网站| 日本r级电影在线观看 | 亚洲欧洲日产国产综合网| 在线电影欧美成精品| 成年人av电影|