亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET Core文件壓縮常見使用誤區是什么

發布時間:2021-05-27 10:31:22 來源:億速云 閱讀:203 作者:小新 欄目:開發技術

這篇文章主要介紹了ASP.NET Core文件壓縮常見使用誤區是什么,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

誤區1:未使用Brotil 壓縮

  幾乎不需要任何額外的代價,Brotil 壓縮算法可以幫助你的網站提升約 20% 靜態資源加載性能。

  同時啟用 Gzip / Brotil 壓縮

  Gzip 有更好的 user-agent 兼容性,而 Brotli 有更好的性能。

  所以我們通常需要在 ASP.NET Core 網站中同時啟用這兩種壓縮。

  如何區分 Gzip 壓縮和 Brotli 壓縮

  網站啟用 Brotli 壓縮時,服務器請求返回頭 Content-Encoding 中會包含 br 字樣,否則是 gzip。

誤區2:使用 Fastest 級別的 Brotli 壓縮

  如果你閱讀并參考了微軟官方文檔或者其他中文資源,比如:

  ASP.NET Core 中的響應壓縮 - MS Doc

  在ASP.NET Core中使用brotli壓縮- Cnblogs

  那么你可能會在代碼中像下面這樣使用壓縮功能:

  寫法1:使用默認的壓縮行為(框架將隱式添加 Brotli 和 Gzip 功能)

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddResponseCompression();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseResponseCompression();
    }
}

  寫法2:顯式添加壓縮功能

public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCompression(options =>
    {
        options.Providers.Add<BrotliCompressionProvider>();
        options.Providers.Add<GzipCompressionProvider>();
        options.Providers.Add<CustomCompressionProvider>();
        options.MimeTypes = 
            ResponseCompressionDefaults.MimeTypes.Concat(
                new[] { "image/svg+xml" });
    });
    services.Configure<BrotliCompressionProviderOptions>(options => 
    {
        options.Level = CompressionLevel.Fastest;
    });
}

  寫法3:自定義 BrotliCompressionProvider

public class BrotliCompressionProvider : ICompressionProvider
{
    public string EncodingName => "br";
    public bool SupportsFlush => true
    public Stream CreateStream(Stream outputStream)
    {
           return new BrotliStream(outputStream,CompressionLevel.Fastest);
    }
}

  不幸的是,以上三種寫法都沒有發揮出 Brotil 壓縮算法的優勢。

  它們的共同點是均使用了 CompressionLevel.Fastest壓縮級別。

  而在 CompressionLevel.Fastest 級別時,Brotil 與 Gzip 壓縮性能幾乎無異。

  參考:Introducing Support for Brotli Compression

ASP.NET Core文件壓縮常見使用誤區是什么

圖 2-1 Fastest 模式下,三種算法的壓縮率等同

誤區3:使用 Optimal 級別的 Brotli 壓縮

  CompressionLevel 只有三個枚舉值:Fastest / NoCompression / Optimal。

  既然 Fastest 級別沒有用,那我們只能換成 Optimal 了。

ASP.NET Core文件壓縮常見使用誤區是什么

圖 3-1 壓縮級別枚舉

  非常不幸,Brotil 的 Optimal 壓縮級別存在嚴重的性能問題,在實際網站應用中幾乎沒有適用的場景。

ASP.NET Core文件壓縮常見使用誤區是什么

圖 3-2 Optimal 壓縮耗時對比

最佳實踐:使用 4 或 5 級別的 Brotli 壓縮

  在Introducing Support for Brotli Compression這篇文章中,作者對不同級別 Brotil 的壓縮耗時做了評測,也就是下面這幅圖。

ASP.NET Core文件壓縮常見使用誤區是什么

圖 4-1 不同壓縮級別下 Brotli 的壓縮耗時

  觀察這副圖,Brotil 的壓縮質量其實有 1~11 個級別。

  那我們如何自定義 Brotli 的壓縮級別呢,答案是直接將級別對應的整數轉成 CompressionLevel 枚舉。

  參考:Setting a specific Brotli compression level when using response compression in ASP.NET Core

ASP.NET Core文件壓縮常見使用誤區是什么

圖 4-2 指定 Brotli 的壓縮級別

  盡管這種寫法看起來十分古怪,但通過考察 .NET 源碼,可以確鑿這種寫法是可行的。

  參考:System.IO.Compression.BrotliUtils.cs

ASP.NET Core文件壓縮常見使用誤區是什么

圖 4-3 CompressionLevel 枚舉強制轉換整數

  現在我們可以自定義壓縮級別了,但注意上方源碼,只能指定 3 以上的級別,3 包括 3 以下的值有其他對應的轉換邏輯。

  回到本節第一副圖 4-1,通過實測,發現在 4 / 5 級別下,Brotli 確實可以獲得最佳的壓縮率和較低的壓縮損耗。

總結

  在 ASP.NET Core 中,我們應該同時啟用 Gzip 和 Brotil 壓縮功能,其中 Brotil 的壓縮級別應該自定義到 4 或 5。

public void ConfigureServices(IServiceCollection services)
        {
            services.AddResponseCompression(options =>
            {
                options.Providers.Add<BrotliCompressionProvider>();
                options.Providers.Add<GzipCompressionProvider>();
                options.MimeTypes =
                    ResponseCompressionDefaults.MimeTypes.Concat(
                        new[] { "image/svg+xml" });
            });

            services.Configure<BrotliCompressionProviderOptions>(options =>
            {
                options.Level = (CompressionLevel)4; // 4 or 5 is OK
            });
        }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseResponseCompression();
        }

感謝你能夠認真閱讀完這篇文章,希望小編分享的“ASP.NET Core文件壓縮常見使用誤區是什么”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

万荣县| 武乡县| 雷波县| 舟曲县| 河南省| 讷河市| 英超| 楚雄市| 利川市| 穆棱市| 绥德县| 哈尔滨市| 临夏市| 南陵县| 曲松县| 明水县| 定安县| 溧水县| 宜州市| 行唐县| 长泰县| 北海市| 张掖市| 绥棱县| 拜泉县| 赤峰市| 城市| 皋兰县| 临沧市| 鲁山县| 依安县| 祁连县| 西充县| 虎林市| 盈江县| 灌云县| 左权县| 广宁县| 浦东新区| 沙田区| 滦平县|