11

GZIP/DEFLATE 圧縮を ASP.Net MVC 出力に追加するための多くのオプションを見てきましたが、それらはすべてオンザフライで圧縮を適用しているように見えます..したがって、圧縮されたコンテンツのキャッシュを利用しません。

圧縮されたページ出力のキャッシュを有効にするソリューションはありますか? MVCコードがページが変更されたかどうかを確認し、変更されていない場合は事前に圧縮されたキャッシュされたコンテンツを出荷できるように、コード内で行うことをお勧めします。

この質問は、通常のasp.netにも当てはまります。

4

7 に答える 7

5
[Compress]
[OutputCache(Duration = 600, VaryByParam = "*", VaryByContentEncoding="gzip;deflate")]
public ActionResult Index()
{
    return View();
}
于 2010-10-16T17:57:45.227 に答える
3

属性を使用してキャッシュ オプションを使用し (MVC 用)、圧縮については考えないでください。有効にすると IIS/IISExpress が出力を自動的に圧縮するためです。

mvc は、個々のフラグメントまたは出力の一部のキャッシング (部分的なコンテンツのキャッシング) を有効にしません。これが必要な場合は、CloudFlare のようなサービスの使用を検討してください (CF のようなサービスは他にありますか?)。コードを変更することなく、出力を自動的にキャッシュし、出力のフラグメントをキャッシュし、その他多くのパフォーマンスとセキュリティの改善を提供します。

これができない場合でも、IISpeed を使用できます (これは Google の mod_pagespeed の IIS ポートです)。空白の削除、インライン css および js 圧縮、js ファイルのマージなどの興味深い設定を提供します。

CF と IISpeed はサイトの構築方法に関係なく、http/html レベルで動作するため、どちらも MVC、Classic ASP.NET、php、さらには生の html ファイルでも動作します。

于 2013-05-07T12:56:49.660 に答える
0

この件に関する完全な紹介については、出力キャッシュによるパフォーマンスの改善を参照してください。主な推奨事項は、キャッシュを適用するアクションで [ OutputCache ] 属性を使用することです。

于 2010-10-17T10:21:42.073 に答える
0

キャッシュ属性を作成できます:

public class CacheAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache;

        if (Enabled)
        {
            cache.SetExpires(System.DateTime.Now.AddDays(30));
        }
        else
        {
            cache.SetCacheability(HttpCacheability.NoCache);
            cache.SetNoStore();
        }
    }

    public bool Enabled { get; set; }

    public CacheAttribute()
    {
        Enabled = true;
    }
}
于 2010-10-16T18:10:01.653 に答える