IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當前所在位置: 首頁網(wǎng)絡(luò)編程.Net編程 → 如何提高ASP.NET頁面載入速度的方法

如何提高ASP.NET頁面載入速度的方法

時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)

  前言

  本文是我對ASP.NET頁面載入速度提高的一些做法,這些做法分為以下部分:

  1.采用 HTTP Module 控制頁面的生命周期。

  2.自定義Response.Filter得到輸出流stream生成動態(tài)頁面的靜態(tài)內(nèi)容(磁盤緩存)。

  3.頁面GZIP壓縮。

  4.OutputCache 編程方式輸出頁面緩存。

  5.刪除頁面空白字符串。(類似Google)

  6.完全刪除ViewState。

  7.刪除服務(wù)器控件生成的垃圾NamingContainer。

  8.使用計劃任務(wù)按時生成頁面。(本文不包含該做法的實現(xiàn))

  9.JS,CSS壓縮、合并、緩存,圖片緩存。(限于文章篇幅,本文不包含該做法的實現(xiàn))

  10.緩存破壞。(不包含第9做法的實現(xiàn))

  針對上述做法,我們首先需要一個 HTTP 模塊,它是整個頁面流程的入口和核心。

  一、自定義Response.Filter得到輸出流stream生成動態(tài)頁面的靜態(tài)內(nèi)容(磁盤緩存)

  如下的代碼我們可以看出,我們以 request.RawUrl 為緩存基礎(chǔ),因為它可以包含任意的QueryString變量,然后我們用MD5加密RawUrl 得到服務(wù)器本地文件名的變量,再實例化一個FileInfo操作該文件,如果文件最后一次生成時間小于7天,我們就使用.Net2.0新增的TransmitFile方法將存儲文件的靜態(tài)內(nèi)容發(fā)送到瀏覽器。如果文件不存在,我們就操作 response.Filter 得到的 Stream 傳遞給 CommonFilter 類,并利用FileStream寫入動態(tài)頁面的內(nèi)容到靜態(tài)文件中。

  view sourceprint?001 namespace ASPNET_CL.Code.HttpModules

  002 {

  003???? public class CommonModule : IHttpModule

  004???? {

  005?? public void Init(HttpApplication application)

  006?? {

  007 application.BeginRequest += Application_BeginRequest;

  008?? }

  009?? private void Application_BeginRequest(object sender, EventArgs e)

  010?? {

  011 var context= HttpContext.Current;

  012 var request = context.Request;

  013 var url = request.RawUrl;

  014 var response = context.Response;

  015 var path = GetPath(url);

  016 var file = new FileInfo(path);

  017 if (DateTime.Now.Subtract(file.LastWriteTime).TotalDays < 7)

  018 {

  019???? response.TransmitFile(path);

  020???? response.End();

  021???? return;

  022 }

  023 try

  024 {

  025???? var stream = file.OpenWrite();

  026???? response.Filter= new CommonFilter(response.Filter, stream);

  027 }

  028 catch (Exception)

  029 {

  030???? Log.Insert("");

  031 }

  032?? }

  033?? public void Dispose() { }

  034?? private static string GetPath(string url)

  035?? {

  036 var hash = Hash(url);

  037 string fold = HttpContext.Current.Server.MapPath("~/Temp/");

  038 return string.Concat(fold, hash);

  039?? }

  040?? private static string Hash(string url)

  041?? {

  042 url = url.ToUpperInvariant();

  043 var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();

  044 var bs = md5.ComputeHash(Encoding.ASCII.GetBytes(url));

  045 var s = new StringBuilder();

  046 foreach (var b in bs)

  047 {

  048???? s.Append(b.ToString("x2").ToLower());

  049 }

  050 return s.ToString();

  051?? }

  052???? }

  053 }

#p#副標題#e#

二、頁面GZIP壓縮

對頁面GZIP壓縮幾乎是每篇講解高性能WEB程序的幾大做法之一,因為使用GZIP壓縮可以降低服務(wù)器發(fā)送的字節(jié)數(shù),能讓客戶感覺到網(wǎng)頁的速度更快也減少了對帶寬的使用情況。當然,這里也存在客戶端的瀏覽器是否支持它。因此,我們要做的是,如果客戶端支持GZIP,我們就發(fā)送GZIP壓縮過的內(nèi)容,如果不支持,我們直接發(fā)送靜態(tài)文件的內(nèi)容。幸運的是,現(xiàn)代瀏覽器IE6.7.8.0,火狐等都支持GZIP。

為了實現(xiàn)這個功能,我們需要改寫上面的 Application_BeginRequest 事件:

? private void Application_BeginRequest(object sender, EventArgs e)

  055?? {

  056 var context = HttpContext.Current;

  057 var request = context.Request;

  058 var url = request.RawUrl;

  059 var response = context.Response;

  060 var path = GetPath(url);

  061?????&n

關(guān)鍵詞標簽:ASP.NET

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 誅仙3飛升任務(wù)怎么做-誅仙3飛升任務(wù)流程最新2022 誅仙3飛升任務(wù)怎么做-誅仙3飛升任務(wù)流程最新2022 鐘離圣遺物推薦-原神鐘離圣遺物詞條 鐘離圣遺物推薦-原神鐘離圣遺物詞條 解決方法:應(yīng)用程序“DEFAULT WEB SITE”中的服務(wù)器錯誤 解決方法:應(yīng)用程序“DEFAULT WEB SITE”中的服務(wù)器錯誤 使用aspnet_regiis.exe 重新注冊.NET Framework 使用aspnet_regiis.exe 重新注冊.NET Framework

相關(guān)下載

    人氣排行 誅仙3飛升任務(wù)怎么做-誅仙3飛升任務(wù)流程最新2022 asp.net表單提交方法GET\POST 在ASP.NET中如何判斷用戶IE瀏覽器的版本 Asp.net中messagebox的實現(xiàn)方法 Asp.net中的web.config配置 在ASP.NET MVC中實現(xiàn)大文件異步上傳 asp.net獲取URL和IP地址 FileUpload上傳多文件出現(xiàn)錯誤的解決方法