2009-03-21 10 views
11

現在、ホストされているVirtual Server上で、私のAsp.Net 3.5サイトでGZip圧縮を有効にしたいのですが、どのように起動するのですか?Asp.Netを使用したCSS/JS GZip圧縮

私は「パックされた」JSファイルを使用しようとしましたが、動作しません。正しく処理されないためです。

答えて

19

GZIPはIISで処理する必要があります。実行しているIISのバージョンは?

クライアントは、サーバにGZipedバージョンを要求します。サーバーは2つのものを探します。要求はhttp 1.1で、Accept-Encoding:gzipのヘッダーです。これらのヘッダーを簡単に検索する方法は、使用することです。firebug

IIS6 - GZipはiisスナップインで有効にすることができます。 Microsofts MSDN Topic On Gzip With IIS6

IIS7 - gzipはあなたの空白を削除して、変数名を短くしてJavaScriptの合計サイズを小さくする、JavaScriptファイルを縮小化して梱包することによりhttpCompression xmlタグNick Berardi's Getting IIS 7 to Compress JavaScript

を使用してweb.configで有効にすることができます。

+0

IIS6のウォークスルー:http://engineering.leads360.com/post/9301650692/http-compression-gzip-on-iis-6 –

1

IISはこれを設定する場所です。 IISを直接変更できない場合は、Accept-Encoding:gzipまたはdeflateの設定をチェックするすべての要求にハンドラを追加できます。次に、SharpZipLibのようなものを使って適切な圧縮を行います。しかし、これはすぐにkludgeyを取得します。

cssやjsのような静的ファイルを手動でgzipすることで、いくつかの成功は限られています。あなたのhtmlにstyles.css.gzscripts.js.gzを含めると、gz拡張子をgzippedテキストのmimetypeにマップすると(多くはapplication/x-gzipですか?)、多くのブラウザ(Firefox、Safari、多分Chrome)がうまく処理できます。しかし、一部のブラウザでは表示されない場合があります(リンク、おそらく古いオペラ)。

7

これを行うには、YUI Compressorのような圧縮ツールを使用し、ビルドプロセスの一部にすることが望ましいです(圧縮率がそれほど高くないか、両方を使用できます)。下記の大きなパフォーマンスの問題を見逃してはいけません)。

IISによる圧縮の主な問題の1つは、すべてのJS/CSSファイルを1つのファイルにまとめないということです。あなたのサイトに7個のJSファイルと20個のCSSがある場合(驚くべきことに、これは非常に一般的です)、データを取得するために27回のHTTPラウンドトリップが必要になります。これを行うためのHTTPハンドラを書くことは、共有ホスティングを持つ人にとっては良い考えです。

簡単なビルドALGOは、リリースモードでは、ページのマスターのみsite.js

編集を参照する必要があり

If(build.config == release) { 
Add your js file in order to the make files. 
    e.g. jQuery.js jQuery.form.js jQuery.container.js custom.js 
Split and pass it as params to YUI 
Compress 
O/P to site.js 
Delete all the above files. 
} 

はJS/CSSのルートディレクトリにファイルを作る持っているだろう:YUIとnantを統合するには、linkがあります。
を編集:Justin Etheredgeは、SquishItというcss/jsファイルを結合して圧縮する素晴らしいツールをリリースしました。

1

スクリプトをGZipするコードを使用することもできます。それが動作する方法は、ASP.NETページを使用して、圧縮されたファイルを正しいヘッダー(ブラウザーにこのストリームが圧縮されていることを伝える)と一緒に配信することです。私はGZip圧縮を利用して(YUIを使用して)細分化(YUIを使用)し、スクリプトをバンドルする方法(サーバーへのラウンドトリップが少ない)を書いています。http://www.codeproject.com/KB/custom-controls/smartinclude.aspx

1

私は、 StyleManagerと呼ばれるCSSの縮小のためのサーバーコントロール。 YUIコンプレッサーを使用しています。

手動でYUI Cを追加するよりも簡単にサイトに追加することができます。その使い方はasp.netのScriptManagerとよく似ていますので、使い慣れています。

最も重要なのは、CSSファイルも結合していることです。だからではなく、それだけで1になるだろうダウンロードする10個のCSSファイルのように持つのも圧縮されるなど

はそれをチェックアウト - gStyleManager.com

1

を私はそれがあるのと同じため、「デフレート」を使用して検討しますGzipよりも効率的です。私は両方のコードを追加しました。

これをサイトに追加するには、テキストファイルを作成し、必要なコードをファイルにコピーして、Global.asaxとして保存します。これで、このファイルをサイトのルートに追加します。

<%@ Application Language="C#" %> 
<%@ Import Namespace="System.IO" %> 
<%@ Import Namespace="System.IO.Compression" %> 
<script runat="server"> 
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 == "*") 
     { 
     // defalte 
      app.Response.Filter = new DeflateStream(prevUncompressedStream, 
       CompressionMode.Compress); 
      app.Response.AppendHeader("Content-Encoding", "deflate"); 
     } 
     else if (acceptEncoding.Contains("gzip")) 
     { 
      // gzip 
      app.Response.Filter = new GZipStream(prevUncompressedStream, 
       CompressionMode.Compress); 
      app.Response.AppendHeader("Content-Encoding", "gzip"); 
     } 
    } 
</script> 
0

以前の投稿は、aspxページではうまく動作しますが、cssやjsファイルではうまく動作しません。圧縮にcssjsファイルをインクルードするトリックですへ:

  1. .css.aspxに変更し、あなたの.css.jsファイルのファイル拡張子をして.js.aspx
  2. .css.aspx.js.aspxファイル
  3. <%@ Page ContentType="text/css" %><%@ Page ContentType="text/javascript" %>を挿入します.css.jsファイルの代わりに.css.aspx.js.aspxファイルをページに含める
関連する問題