欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

不修改代碼就能優(yōu)化ASP.NET網站性能的一些方法[轉]-創(chuàng)新互聯(lián)

 不修改代碼就能優(yōu)化ASP.NET網站性能的一些方法

閱讀目錄

公司主營業(yè)務:網站建設、成都網站建設、移動網站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現互聯(lián)網宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出漢中免費做網站回饋大家。
  • 開始
  • 配置OutputCache
  • 啟用內容過期
  • 解決資源文件升級問題
  • 啟用壓縮
  • 刪除無用的HttpModule
  • 其它優(yōu)化選項

本文將介紹一些方法用于優(yōu)化ASP.NET網站性能,這些方法都是不需要修改程序代碼的。
它們主要分為二個方面:
1. 利用ASP.NET自身的擴展性進行優(yōu)化。
2. 優(yōu)化IIS設置。

回到頂部

配置OutputCache

用緩存來優(yōu)化網站性能的方法,估計是無人不知的。 ASP.NET提供了HttpRuntime.Cache對象來緩存數據,也提供了OutputCache指令來緩存整個頁面輸出。 雖然OutputCache指令使用起來更方便,也有非常好的效果, 不過,它需要我們在那些頁面中添加這樣一個指令。

對于設置過OutputCache的頁面來說,瀏覽器在收到這類頁面的響應后,會將頁面響應內容緩存起來。 只要在指定的緩存時間之內,且用戶沒有強制刷新的操作,那么就根本不會再次請求服務端, 而對于來自其它的瀏覽器發(fā)起的請求,如果緩存頁已生成,那么就可以直接從緩存中響應請求,加快響應速度。 因此,OutputCache指令對于性能優(yōu)化來說,是很有意義的(除非所有頁面頁面都在頻繁更新)。

在網站的優(yōu)化階段,我們可以用Fiddler之類的工具找出一些內容幾乎不會改變的頁面,給它們設置OutputCache, 但是,按照傳統(tǒng)的開發(fā)流程,我們需要針對每個頁面文件執(zhí)行以下操作:
1. 簽出頁面文件。
2. 添加OutputCache指令。
3. 重新發(fā)布頁面。
4. 簽入文件(如果遇到多分支并行,還可能需要合并操作)。
以上這些源代碼管理制度會讓一個簡單的事情復雜化,那么,有沒一種更簡單的方法能解決這個問題呢?

接下來,本文將介紹一種方法,它利用ASP.NET自身的擴展性,以配置文件的方式為頁面設置OutputCache參數。 配置文件其它就是一個XML文件,內容如下:

<?xmlversion="1.0" encoding="utf-8"?> <OutputCachexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Settings> <SettingDuration="3" FilePath="/Pages/a3.aspx"/> <SettingDuration="10" FilePath="/Pages/a5.aspx"/> </Settings> </OutputCache>

看了這段配置,我想您應該也能猜到它能有什么作用。

每一行配置參數為一個頁面指定OutputCache所需要的參數, 示例文件為了簡單只使用二個參數,其它可以支持的參數請參考OutputCache指令。

為了能讓這個配置文件有效,需要在web.config中配置以下內容(適用于IIS7):

<system.webServer> <modules> <addname="SetOutputCacheModule" type="WebSiteOptimize.SetOutputCacheModule, WebSiteOptimize" /> </modules> </system.webServer>

在這里,我注冊了一個HttpModule,它的全部代碼如下:

public classSetOutputCacheModule: IHttpModule { staticSetOutputCacheModule() { // 加載配置文件 stringxmlFilePath =Path.Combine(HttpRuntime.AppDomainAppPath, "OutputCache.config"); ConfigManager.LoadConfig(xmlFilePath); } public voidInit(HttpApplicationapp) { app.PreRequestHandlerExecute +=newEventHandler(app_PreRequestHandlerExecute); } voidapp_PreRequestHandlerExecute(objectsender, EventArgse) { HttpApplicationapp =(HttpApplication)sender; Dictionary<string, OutputCacheSetting>settings =ConfigManager.Settings; if( settings ==null) throw newConfigurationErrorsException("SetOutputCacheModule加載配置文件失敗。"); // 實現方法: // 查找配置參數,如果找到匹配的請求,就設置OutputCache OutputCacheSettingsetting =null; if( settings.TryGetValue(app.Request.FilePath, outsetting) ) { setting.SetResponseCache(app.Context); } }

ConfigManager類用于讀取配置文件,并啟用了文件依賴技術,當配置文件更新后,程序會自動重新加載: 

有了AutoSetOutputCacheModule,我們就可以直接使用配置文件為頁面設置OutputCache參數,而不需要修改任何頁面,是不是很容易使用?

說明:MyMVC框架已支持這種功能,所有相關的可以從MyMVC框架的源碼中獲取。

建議:對于一些很少改變的頁面,緩存頁是一種很有效的優(yōu)化方法。

回到頂部

啟用內容過期

每個網站都會有一些資源文件(圖片,JS,CSS),這些文件相對于ASPX頁面來說, 它們的輸出內容極有可能在一段長時間之內不會有變化, 而IIS在響應這類資源文件時不會生成Cache-Control響應頭。 在這種情況下,瀏覽器或許會緩存它們,也許會再次發(fā)起請求(比如重啟后),總之就是緩存行為不受控制且緩存時間不夠長久。

有沒有想過可以把它們在瀏覽器中長久緩存起來呢?

為了告訴瀏覽器將這些文件長久緩存起來,減少一些無意義的請求(提高頁面呈現速度),我們可以在IIS中啟用內容過期, 這樣設置后,IIS就能生成Cache-Control響應頭,明確告訴瀏覽器將文件緩存多久。

在IIS6中,這個參數很好找到:

然而,在IIS7中,這個參數不容易被發(fā)現,需要以下操作才能找到:
選擇網站(或者網站子目錄)節(jié)點,雙擊【HTTP響應標頭】

再點擊右邊的【設置常用標頭】鏈接,

此時將會顯示:

說明:【啟用內容過期】這個設置可以基于整個網站,也可以針對子目錄,或者一個具體的文件。

注意:如果您在IIS7中針對某個子目錄或者文件設置【啟用內容過期】,前面的對話框看起來是一模一樣的,
然而,在IIS6中,我們可以清楚地從對話框的標題欄中知道我們在做什么:

有時真感覺IIS7的界面在退步!

最后我想說一句:可以直接為整個網站啟用內容過期,ASPX頁面是不會被緩存的!

說到這里可能有人會想:這個過期時間我該設置多久呢?
十分鐘,2個小時,一天,還是一個月?
在我看來,這個時間越久越好。
可能有人又會說了:萬一我要升級某個JS文件怎么辦,時間設置久了,用戶怎么更新呢?
如果你問我這個問題,我也只能說是你的代碼不合理(畢竟你解決不了升級問題),想知道原因的話,請繼續(xù)閱讀。

回到頂部

解決資源文件升級問題

對于一些規(guī)模不大的網站來說,通常會將資源文件與程序文件一起部署到一個網站中。
這時可能會采用下面的方式來引用JS或者CSS文件:

<linktype="text/css"href="aaaa.css"rel="Stylesheet" /> <scripttype="text/javascript"src="bbb.js"></script>

在這種情況下,如果使用了前面所說的【啟用內容過期】方法,那么當有JS,CSS文件需要升級時, 由于瀏覽器的緩存還沒有過期,所以就不會請求服務器,此時會使用已緩存的版本, 因此可能會出現各種奇怪的BUG

對于前面談到的BUG,我認為根源在于引用JS,CSS文件的方式有缺陷, 那種方法完全沒有考慮到版本升級問題, 正確的方法有二種:
1. 給文件名添加版本號,像jquery那樣,每個版本一個文件(jquery-1.4.4.min.js)。
2. 在URL后面添加一個版本號,讓原先的URL失效。

第一種方法由于每次升級都產生了一個新文件,所以不存在緩存問題,但是,維護一大堆文件的成本可能會比較大, 因此我建議采用第二種方法來解決。

在MyMVC的示例代碼中,我使用了下面的方法來引用這些資源文件:

<%=HtmlExtension.RefCssFileHtml("/css/StyleSheet.css")%> <%=HtmlExtension.RefJsFileHtml("/js/MyPage/fish.js")%>

在頁面運行時,會產生如下的輸出結果:

<linktype="text/css"rel="Stylesheet"href="/css/StyleSheet.css?_t=634642185820000000" /> <scripttype="text/javascript"src="/js/MyPage/fish.js?_t=634642154020000000"></script>

這二個工具方法的實現代碼如下(在MyMVC的示例代碼中): 

上面這種獲取文件版本號的方法,是一種比較簡單的解決方案。 每個引用的地方在生成HTML代碼時,都會訪問文件的最后修改時間,這會給磁盤帶來一點讀的開銷, 如果您擔心這種實現方式可能會給性能帶來影響,那么也可以增加一個配置文件的方式來解決(請自行實現), 例如以下結構:

<?xmlversion="1.0" encoding="utf-8"?> <ArrayOfFileVersionxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <FileVersionFilePath="/js/JScript.js" Version="255324" /> <FileVersionFilePath="/css/StyleSheet.css" Version="2324235" /> </ArrayOfFileVersion>

如果您認為這種配置文件需要手工維護,不夠自動化,還可以采用程序的方式自動在運行時維護一個列表, 總之,直接引用資源文件的方法是一種直接耦合,會給文件升級帶來麻煩, 我們可以通過一個外部方法來解開這個直接耦合(給FileVersion增加一個屬性還還可以將內部地址改成一個CDN地址)。

回到頂部

啟用壓縮

壓縮響應結果也是常用的網站優(yōu)化方法,由于現在的瀏覽器都已支持壓縮功能, 因此,如果在服務端能壓縮響應結果,對于網速較慢的用戶來說,會減少很多網絡傳輸時間,最終的體驗就是網頁顯示速度變快了!

IIS6雖然提供壓縮的設置界面,然而配置是基于服務器級別的:

注意:這里的【應用程序文件】不包括aspx,如果需要壓縮aspx的響應, 需要手工修改x:WINDOWSsystem32inetsrvMetaBase.xml文件(參考加大字號部分): 

說明:要修改MetaBase.xml,需要停止IIS Admin Service服務。

在IIS7中,我們可以在服務器級別配置壓縮參數:

然后在每個網站中開啟或者關閉壓縮功能:

說明:IIS7中已經不再使用MetaBase.xml,所以我們找不到IIS6的那些設置了。 IIS7壓縮的過濾條件不再針對擴展名,而是采用了mimeType規(guī)則(保存在applicationHost.config)。 根據IIS7的壓縮規(guī)則,當我們啟用動態(tài)壓縮后,會壓縮aspx的響應結果。

二種壓縮方法的差別:
1. 靜態(tài)內容壓縮:當服務器在第一次響應某個靜態(tài)文件時,會生成一個壓縮后的結果,并保存到磁盤中,以便重用。
2. 動態(tài)內容壓縮:【每次】在響應客戶端之前,壓縮響應結果,在內存中完成,因此會給CPU帶來一些負擔。

注意:要不要【啟用動態(tài)內容壓縮】這個參數,需要評估服務器的CPU是否能以承受(觀察任務管理器或者查看性能計數器)。

回到頂部

刪除無用的HttpModule

對一個網站來說,ASP.NET提供的有些HttpMoudle可能并不是需要的, 然而,如果你不去手工禁用它們,它們其實會一直運行
比如  會禁用下面這些HttpMoudle:

<httpModules> <removename="Session"/> <removename="RoleManager"/> <removename="PassportAuthentication"/> <removename="Profile"/> <removename="ServiceModel"/> </httpModules>

對于使用Forms身份認證的網站的來說,下面這些HttpModule也是可以禁用的:

<httpModules> <removename="WindowsAuthentication"/> <removename="FileAuthorization"/> </httpModules>回到頂部

其它優(yōu)化選項

優(yōu)化ASP.NET網站是一個大的話題,除了博客中介紹的這些方法之外,還有以下方法也是可以參考的:
1. 升級服務器硬件配置。
2. 使用Windows Server 2008以上版本操作系統(tǒng)(網絡性能比2003要好)。
3. 優(yōu)化操作系統(tǒng)配置(例如禁用不需要的服務)。
4. 禁用調試模式。
5. 網站使用專用應用程序池。

原文連接:http://www.cnblogs.com/fish-li/archive/2012/12/23/2830301.html

網頁名稱:不修改代碼就能優(yōu)化ASP.NET網站性能的一些方法[轉]-創(chuàng)新互聯(lián)
文章分享:http://chinadenli.net/article10/dijddo.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供App開發(fā)移動網站建設關鍵詞優(yōu)化外貿建站網站排名定制網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網站制作