2011-10-06 58 views
4

我使用C#Asp.net 4, 我在Global.asax中有此腳本。我能夠gzip所有的asp.net頁面,但不是JavaScript和CSS。 我想知道是否有可能在我的web應用程序中直接壓縮CSS和JS,或者可能只是在IIS中。如果可能,請指出我在代碼中錯過的內容。 謝謝在Asp.Net WebForm中壓縮JavaScript和CSS

protected void Application_PreRequestHandlerExecute(object sender, EventArgs e) 
    { 
     HttpApplication app = sender as HttpApplication; 
     string acceptEncoding = app.Request.Headers["Accept-Encoding"]; 
     Stream prevUncompressedStream = app.Response.Filter; 

     if (!(app.Context.CurrentHandler is Page || 
      app.Context.CurrentHandler.GetType().Name == "SyncSessionlessHandler") || 
      app.Request["HTTP_X_MICROSOFTAJAX"] != null) 
      return; 

     if (acceptEncoding == null || acceptEncoding.Length == 0) 
      return; 

     acceptEncoding = acceptEncoding.ToLower(); 

     // if (acceptEncoding.Contains("deflate") || acceptEncoding == "*") 
     if (acceptEncoding.Contains("gzip") || acceptEncoding == "*") 
     { 
      // gzip 
      app.Response.Filter = new GZipStream(prevUncompressedStream, 
       CompressionMode.Compress); 
      app.Response.AppendHeader("Content-Encoding", "gzip"); 

     } 
     // else if (acceptEncoding.Contains("gzip")) 
     else if (acceptEncoding.Contains("deflate")) 
     { 
      // defalte 
      app.Response.Filter = new DeflateStream(prevUncompressedStream, 
      CompressionMode.Compress); 
      app.Response.AppendHeader("Content-Encoding", "deflate"); 
     } 
    } 

回答

0

你可以也應該設置IIS來壓縮靜態文件。讓IIS在它到達您的應用程序之前處理它。

您可以在IIS管理控制檯中手動設置或在web.config中使用<httpCompression>設置。

+0

謝謝,我不知道關於 ...將有可能還可以直接在IIS中剝離(縮小文件)的CSS和JS? – GibboK

+0

你的意思是? GibboK

1

您確定* .css和* .js是由ASP.NET運行時處理的嗎?它們不是默認的,例如你必須在web.config中設置runAllManagedModulesForAllRequeststrue

另外,你爲什麼不依靠IIS內置壓縮?

+0

IIS內建壓縮僅適用於靜態內容..或甚至是動態頁面?如果是這種情況,我應該從Global.asax中刪除我的腳本嗎?感謝 – GibboK

+0

IIS 7壓縮靜態和動態數據。堅持內置壓縮聽起來像一個更好的主意,恕我直言。 –

1

縮減大小和gzip你的CSS和JS時間提前,也都結合JS在一個文件中,並在一個文件中的所有CSS:

Online JavaScript/CSS Compression Using YUI Compressor

如果你搜索了一下,你會發現各種將壓縮和縮小自動化爲後期構建過程或CI構建過程。

+0

我也喜歡microsoft-ajax-minifier可能很有用http://stephenwalther.com/blog/archive/2009/10/16/using-the-new-microsoft-ajax-minifier.aspx – GibboK

0

是的,我們可以利用IIS 7.0壓縮恐懼的優勢。另外你真的關心性能,最好在應用程序中創建一個JS和一個CSS,如果這是不可能的,最好將這些JS和CCS合併成一個Js和CSS。並且總是向我們推薦AJAX Minifier。

http://www.mindfiresolutions.com/How-to-merge-your-Javascript-files-in-ASPNET-1221.php

http://www.mindfiresolutions.com/How-to-merge-CSS-files-in-ASPNET-1230.php

請隨意,如果您需要在此進一步的幫助與我聯繫。

感謝, 人士Himanshu謝卡爾·薩胡 www.mindfiresolutions.com

+0

感謝您的評論。那麼你會建議我從Global.asax文件中刪除我的代碼,而不是使用II7功能來壓縮靜態和動態內容? – GibboK

+0

是的,如果你使用IIS 7/7.5那麼絕對沒有必要。請通過下面的鏈接來獲得更多的想法。 – himanshu

+0

@Gibbok是的,如果你使用的是IIS 7/7.5,那麼絕對沒有必要。請通過下面的鏈接來獲得更多的想法。 http://weblogs.asp.net/owscott/archive/2009/02/22/iis-7-compression-good-bad-how-much.aspx。如果你使用任何。axad並刪除文件中的空格,建議創建一個HTTPHandler來處理這些空格。 – himanshu