欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET Core文件壓縮常見使用誤區(qū)(最佳實(shí)踐)

 更新時間:2021年05月27日 09:31:43   作者:ExperDot  
本文給大家分享ASP.NET Core文件壓縮常見的三種誤區(qū),就每種誤區(qū)給大家講解的非常詳細(xì),是項(xiàng)目實(shí)踐的最佳紀(jì)錄,對ASP.NET Core文件壓縮相關(guān)知識感興趣的朋友一起看看吧

前言

  在微軟官方文檔中,未明確指出文件壓縮功能的使用誤區(qū)。

  本文將對 ASP.NET Core 文件響應(yīng)壓縮的常見使用誤區(qū)做出說明。

誤區(qū)1:未使用Brotil 壓縮

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

  同時啟用 Gzip / Brotil 壓縮

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

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

  如何區(qū)分 Gzip 壓縮和 Brotli 壓縮

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

誤區(qū)2:使用 Fastest 級別的 Brotli 壓縮

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

  ASP.NET Core 中的響應(yīng)壓縮 - MS Doc

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

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

  寫法1:使用默認(rèn)的壓縮行為(框架將隱式添加 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);
    }
}

  不幸的是,以上三種寫法都沒有發(fā)揮出 Brotil 壓縮算法的優(yōu)勢。

  它們的共同點(diǎn)是均使用了 CompressionLevel.Fastest壓縮級別。

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

  參考:Introducing Support for Brotli Compression

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

誤區(qū)3:使用 Optimal 級別的 Brotli 壓縮

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

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

圖 3-1 壓縮級別枚舉

  非常不幸,Brotil 的 Optimal 壓縮級別存在嚴(yán)重的性能問題,在實(shí)際網(wǎng)站應(yīng)用中幾乎沒有適用的場景。

圖 3-2 Optimal 壓縮耗時對比

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

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

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

  觀察這副圖,Brotil 的壓縮質(zhì)量其實(shí)有 1~11 個級別。

  那我們?nèi)绾巫远x Brotli 的壓縮級別呢,答案是直接將級別對應(yīng)的整數(shù)轉(zhuǎn)成 CompressionLevel 枚舉。

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

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

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

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

圖 4-3 CompressionLevel 枚舉強(qiáng)制轉(zhuǎn)換整數(shù)

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

  回到本節(jié)第一副圖 4-1,通過實(shí)測,發(fā)現(xiàn)在 4 / 5 級別下,Brotli 確實(shí)可以獲得最佳的壓縮率和較低的壓縮損耗。

總結(jié)

  在 ASP.NET Core 中,我們應(yīng)該同時啟用 Gzip 和 Brotil 壓縮功能,其中 Brotil 的壓縮級別應(yīng)該自定義到 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文件壓縮最佳實(shí)踐的詳細(xì)內(nèi)容,更多關(guān)于ASP.NET Core文件壓縮的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入理解Asp.net中DataBinder.Eval的用法總結(jié)

    深入理解Asp.net中DataBinder.Eval的用法總結(jié)

    本篇文章是對Asp.net中DataBinder.Eval的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Asp.Net Core中WebSocket綁定的方法詳解

    Asp.Net Core中WebSocket綁定的方法詳解

    WebSocket 是一種在單個 TCP 連接上進(jìn)行全雙工通訊的協(xié)議,是建立在TCP上、且獨(dú)立的協(xié)議。下面這篇文章主要給大家介紹了關(guān)于Asp.Net Core中WebSocket綁定的方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-12-12
  • 淺談對Lambda表達(dá)式的理解

    淺談對Lambda表達(dá)式的理解

    “Lambda 表達(dá)式”(lambda expression)是一個匿名函數(shù),Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名,直接對應(yīng)于其中的lambda抽象(lambda abstraction),是一個匿名函數(shù),即沒有函數(shù)名的函數(shù)。Lambda表達(dá)式可以表示閉包(注意和數(shù)學(xué)傳統(tǒng)意義上的不同)。
    2015-07-07
  • Server.Transfer,Response.Redirect的區(qū)別

    Server.Transfer,Response.Redirect的區(qū)別

    Server.Transfer,Response.Redirect的區(qū)別...
    2006-12-12
  • Asp.net獲取服務(wù)器指定文件夾目錄文件并提供下載的方法

    Asp.net獲取服務(wù)器指定文件夾目錄文件并提供下載的方法

    這篇文章主要介紹了Asp.net獲取服務(wù)器指定文件夾目錄文件并提供下載的方法,涉及使用http協(xié)議操作文件的技巧,需要的朋友可以參考下
    2015-01-01
  • asp.net 轉(zhuǎn)換人民幣大小金額

    asp.net 轉(zhuǎn)換人民幣大小金額

    轉(zhuǎn)換人民幣大小金額的一個通用類。
    2009-09-09
  • gridview 行選添加顏色和事件

    gridview 行選添加顏色和事件

    在gridview 列表中,需要添加如下效果,如果經(jīng)過時變色,移開時還原成以前的顏色,行選中時通過加深色,從而知道選中了哪行
    2014-03-03
  • Asp.Net Core2.1前后使用HttpClient的兩種方式

    Asp.Net Core2.1前后使用HttpClient的兩種方式

    這篇文章主要給大家介紹了關(guān)于Asp.Net Core2.1前后HttpClient的使用方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • aspx實(shí)現(xiàn)的 jquery ui 的 flexgrid demo

    aspx實(shí)現(xiàn)的 jquery ui 的 flexgrid demo

    這幾天沒事研究著jquery,真是個好東西,慢慢的知道了有jquery ui,一開始就被華麗的界面和簡單的操作給吸引了,尤其是里面的flexgrid,對我而言可以說是非常寶貴的東西
    2009-12-12
  • ASP.NET購物車實(shí)現(xiàn)過程詳解

    ASP.NET購物車實(shí)現(xiàn)過程詳解

    這篇文章主要為大家詳細(xì)介紹了ASP.NET購物車的實(shí)現(xiàn)過程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-10-10

最新評論