12

現在、ホストされている仮想サーバーを使用しています。Asp.Net 3.5 サイトで GZip 圧縮を有効にしたいのですが、どのように開始すればよいですか?

「パックされた」JS ファイルを使用してみましたが、うまくいきません。正しく処理されていないためだと思います...?

4

7 に答える 7

21

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

クライアントは、サーバーに GZiped バージョンを要求する責任があります。サーバーは、リクエストが http 1.1 であることと、Accept-Encoding のヘッダーである gzip の 2 つを探します。これらのヘッダーを探す簡単な方法は、firebugを使用することです

IIS6 - GZip は、iis スナップインで有効にできます。IIS6 を使用した Gzip に関する Microsoft の MSDN トピック

IIS7 - httpCompression xml タグを使用して、web.config で GZip を有効にできますNick Berardi の Getting IIS 7 to Compress JavaScript

JavaScript ファイルを縮小して圧縮することで、空白を削除して変数名を短くすることで、JavaScript の合計サイズを縮小します。

于 2009-03-21T05:27:56.920 に答える
7

これを行うための私の好ましい方法は、YUI Compressorのような圧縮ツールを使用して、それをビルドプロセスの一部にすることです(縮小後、圧縮率はそれほど高くなりません。または両方を使用できます。ポイントは、すべきではないということです。以下に示すより大きなパフォーマンスの問題を見逃してはいけません)。

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

単純なビルドアルゴリズムは、JS/CSSルートディレクトリにmakeファイルを作成することです。

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.
}

リリースモードでは、ページマスターはsite.jsのみを参照する必要があります

編集:YUIとnantを統合するためのリンクは次のとおりです。
編集:Justin Etheredgeは、SquishItと呼ばれるcss/jsファイルを組み合わせて圧縮するための素晴らしいツールをリリースしました。

于 2009-03-21T05:57:56.660 に答える
1

次に、IISがこれを構成する場所です。IISを直接変更できない場合は、Accept-Encoding:gzipまたはdeflate設定をチェックするハンドラーをすべての要求に追加できます。次に、SharpZipLibなどを使用して適切な圧縮を行います。ただし、これはすぐに厄介になります。

cssやjsなどの静的ファイルを手動でgzipすることには、ある程度の成功が見られます。HTMLにとを含めstyles.css.gzscripts.js.gzgz拡張機能をgzip圧縮されたテキストのmimetypeにマップするとします(それはそうapplication/x-gzipですか?)多くのブラウザ(つまり、Firefox、Safari、多分chrome)はそれをうまく処理します。しかし、一部のブラウザはそうではなく、あなたはそれらを除外しています(リンク、おそらく古いオペラ)。

于 2009-03-21T05:50:51.797 に答える
1

コードを使用してスクリプトをGzip圧縮することもできます。それが機能する方法は、ASP.NETページを使用して、圧縮ファイルを正しいヘッダーとともに配信することです(このストリームが圧縮されていることをブラウザーに通知します)。GZip圧縮を利用して、(YUIを使用して)縮小し、スクリプトをバンドルする(サーバーへのラウンドトリップを減らす)方法についての記事を書きました。http://www.codeproject.com/KB/customにあります。 -controls / smartinclude.aspx

于 2010-09-01T13:41:00.160 に答える
1

GZip よりも効率的であるため、同じように「deflate」を使用することを検討します。両方のコードを追加しました。

これをサイトに追加するには、テキスト ファイルを作成し、指定されたコードをコピーしてファイルに貼り付け、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>
于 2012-02-18T09:24:33.907 に答える
1

私は、StyleManager と呼ばれる、CSS の縮小に便利な小さなサーバー コントロールを使用しています。ボンネットの下で YUI Compressor を使用します。

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

最も重要なことは、CSS ファイルも結合することです。したがって、10 個の CSS ファイルをダウンロードするのではなく、1 個だけになり、これも圧縮されます。

チェックしてください - gStyleManager.com

于 2011-01-16T15:13:21.567 に答える
0

前の投稿はaspxページではうまく機能しますが、cssおよびjsファイルでは機能しません。css圧縮にjsファイルを含める秘訣は次のとおりです。

  1. .cssおよび.jsファイルのファイル拡張子をとに変更し.css.aspxます.js.aspx
  2. およびファイルに<%@ Page ContentType="text/css" %>およびを挿入します<%@ Page ContentType="text/javascript" %>.css.aspx.js.aspx
  3. ページに.css.aspx.js.aspxファイルの代わりに.cssとファイルを含める.js
于 2012-03-03T05:26:08.203 に答える