2

Web サイトのパフォーマンスを向上させるために、ページ/リソースの圧縮を実装しています。

吹き飛ばしと邪悪な HttpCompress の両方を実装しようとしましたが、結局同じ結果が得られました。これは Firefox にのみ影響するようです。Chrome と IE でテストしました。

初めてページをリクエストしたときに、すべての外部リソースが正常に解凍されます。リソースが解凍されていないように見えるため、ページに 2 回目または 3 回目のエラーがあります。次のようなユニコード文字を取得します。

������í½`I%&/mÊ{JõJ×àt¡`$Ø@ìÁÍæìiG#)«*ÊeVe]f

(実際にはここでは正しく表示できません)

firebug を介してページを検査すると、応答ヘッダーが次のように表示されます。

キャッシュ制御プライベート

コンテンツ タイプ テキスト/html; 文字セット=utf-8

コンテンツ エンコーディング gzip

サーバー Microsoft-IIS/7.5

X-AspNetMvc-バージョン 2.0

X-AspNet-バージョン 2.0.50727

X-Compressed-By HttpCompress

X-Powered-By ASP.NET 日付 7 月 9 日 (金)

2010 06:51:40 GMT コンテンツ長 2622

これは、リソースが gzip によって圧縮されていることを明確に示しています。クライアントの収縮側で何か問題が発生しているように見えますか?

web.config に次のセクションを (適切な場所に) 追加しました。

<sectionGroup name="blowery.web">
  <section name="httpCompress" type="blowery.Web.HttpCompress.SectionHandler, blowery.Web.HttpCompress"/>
</sectionGroup>

<blowery.web>
    <httpCompress preferredAlgorithm="gzip" compressionLevel="high">
      <excludedMimeTypes>
        <add type="image/jpeg"/>
        <add type="image/png"/>
        <add type="image/gif"/>
      </excludedMimeTypes>
      <excludedPaths>
        <add path="NoCompress.aspx"/>
      </excludedPaths>
    </httpCompress>
</blowery.web>

<add name="CompressionModule" type="blowery.Web.HttpCompress.HttpModule, blowery.web.HttpCompress"/>

何か助けはありますか?

4

1 に答える 1

1

これは私が以前に直面した問題であり、問​​題はContent-Lengthが正しくないことです。なぜ正しくないのですか?おそらく圧縮前に計算されるからです。

Content-Lenghtを手動で設定する場合は、それを削除して、可能であればモジュールに設定させます。

Blowery圧縮を使用していることに注意してください。おそらくこれはBlowery内のバグ/問題です。それを見つけて修正できない場合は、Ms圧縮を使用してみませんか?

@ptutt共有IISを使用している場合は、すべての圧縮が設定されている可能性があるため、一方の圧縮が他方の上にあり、削除するだけで済みます。これが問題である場合は、最初の圧縮後、2番目の圧縮が中断されるため、content-lenghtがfalseであることを確認してください。

ページがデフォルトでiisによってすべて圧縮される準備ができている場合は、このサイトhttps://www.giftofspeed.com/gzip-test/を使用して確認してください。

デフォルトで圧縮されていない場合は、非常に簡単に実行できます。Global.asaxについて

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    string cTheFile = HttpContext.Current.Request.Path;
    string sExtentionOfThisFile = System.IO.Path.GetExtension(cTheFile);
    
    if (sExtentionOfThisFile.Equals(".aspx", StringComparison.InvariantCultureIgnoreCase))
    {
        string acceptEncoding = MyCurrentContent.Request.Headers["Accept-Encoding"].ToLower();;
        
        if (acceptEncoding.Contains("deflate") || acceptEncoding == "*")
        {
            // defalte
            HttpContext.Current.Response.Filter = new DeflateStream(prevUncompressedStream,
                CompressionMode.Compress);
            HttpContext.Current.Response.AppendHeader("Content-Encoding", "deflate");
        } else if (acceptEncoding.Contains("gzip"))
        {
            // gzip
            HttpContext.Current.Response.Filter = new GZipStream(prevUncompressedStream,
                CompressionMode.Compress);
            HttpContext.Current.Response.AppendHeader("Content-Encoding", "gzip");
        }       
    }
}

注意してください、私はこのコードを書いただけで、テストしていません。私のコードはもう少し複雑なので、単純なバージョンを作成するだけです。

その他の例を見つける: http ://www.google.com/search?q = Response.Filter + GZipStream

参照: 負荷分散されたサーバーで、読み込み中にASP.NETサイトがフリーズしたり、ページの上部に奇妙なテキストが表示されたりすることがあります

于 2010-07-09T07:20:41.050 に答える