オリジナル住所:ASP.NETで静的ファイルを事前に圧縮されたコア
著者:グンナーPeipmanの
翻訳:Lamond呂は
尋ねた:https://www.cnblogs.com/lwqlun/p/10552131.html
サンプルコード:HTTPS:// GitHubのを。 COM / lamondlu / CompressedStaticFileSample
、少ない帯域幅は、プロジェクトのコストを削減することができます占めて少ないCPUを使用しているため、Webアプリケーションの最適化は、非常に重要です。ASP.NETコアでは、我々は簡単に圧縮応答を有効にすることができますが、事前に圧縮されたファイルのために、あなたはいくつかの追加機能を実行する必要があります。ASP.NETコア前に静的ファイルを圧縮する方法をこのブログの記事ショー。
なぜ事前に圧縮されたファイル?#
サーバーからファイルを要求するとき、我々は、Webサーバーのニーズはより多くの余分な作業を動的に圧縮ファイルが、この手段を行うことができますが。新しいアプリケーションがデプロイされたときに実際には、唯一の圧縮ファイルに変更。より優れた圧縮効果は、仕事をするCPUが必要です。
この事実は、私たちは疑問を生成することができます:それはその繰り返しの圧縮せずに、これらの文書を提供することは可能ですか?幸い、質問への答えはイエスです - はい、私たちはこの中でASP.NETコアミドルウェアの静的ファイルを拡張することによって行うことができます。
事前に圧縮されたファイルの作成#を
できるだけ簡単に全体のプレゼンテーションを行うために、我々は、ディスク上の圧縮静的ファイルに7-ジップを使用することができます。以下は、7 - 郵便番号のデフォルトのASP.NET MVCのコア圧縮アプリケーションsite.cssファイルダイアログウィンドウです。
ここでは、私が有効になっていることに気づいたかもしれUltra
圧縮を。これは、それがあまりにもCPUによって消費されたため、我々は、Webサーバーの動的圧縮方法に欲しいものは明らかではありません。
通常の状況下では、これは、この記事では、我々はこれを紹介しません、バンドルさガルプファイルと請負機能を使用して行うことができます。
圧縮ファイルの提供#を
ここで私は簡単な解決策を参照してください(オーバーフロースタック上のASP.NET Aセルフホスト環境での中核的なコンテンツでgzipで静的にどのように。)。これは、JavascriptとCSSファイルを処理します。
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = context =>
{
IHeaderDictionary headers = context.Context.Response.Headers;
string contentType = headers["Content-Type"];
if (contentType == "application/x-gzip")
{
if (context.File.Name.EndsWith("js.gz"))
{
contentType = "application/javascript";
}
else if (context.File.Name.EndsWith("css.gz"))
{
contentType = "text/css";
}
headers.Add("Content-Encoding", "gzip");
headers["Content-Type"] = contentType;
}
}
});
もちろん、JavascriptとCSSファイルは、ファイル圧縮ニーズの唯一のタイプではありません。そこでここでは、死者のcontentTypeを書き込むことはできません。ここで私は解決策を使用する(で提供.NETのコアチュートリアルサイトの取得A MIMEタイプAからファイルを名.NETのコアで)。私にとっては、このプログラムは、単純な十分なされています。
var provider = new FileExtensionContentTypeProvider();
string contentType;
if (!provider.TryGetContentType(fileName, out contentType))
{
contentType = "application/octet-stream";
}
ここで私は2つのプログラムが最終的な解決策が得られ、一緒に合併置きます。
var mimeTypeProvider = new FileExtensionContentTypeProvider();
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = context =>
{
var headers = context.Context.Response.Headers;
var contentType = headers["Content-Type"];
if (contentType != "application/x-gzip" && !context.File.Name.EndsWith(".gz"))
{
return;
}
var fileNameToTry = context.File.Name.Substring(0, context.File.Name.Length - 3);
if (mimeTypeProvider.TryGetContentType(fileNameToTry, out var mimeType))
{
headers.Add("Content-Encoding", "gzip");
headers["Content-Type"] = mimeType;
}
}
});
この時点で、上記のコードを使用して、この記事のテーマは解消されます。
直接、既存のライブラリを使用する開発者のために、あなたはNuget直接ダウンロードピーター・アンダーソンの優れたミドルウェアを使用することができます。
インストール・パッケージCompressedStaticFiles -Version 1.0.4
要約#
事前に圧縮されたファイルの使用が主流のWeb開発ではありませんが、それはまだCPUと帯域幅の節約することができますが。圧縮静的ファイルはASP.NET Coreアプリケーションが構築されているステップとして使用することができます。ASP.NETコアボックスは、事前に圧縮されたファイルをサポートしていませんが、我々はまだサポート事前に圧縮されたファイルに静的なファイルミドルウェアによって拡張することができますが。