これはおそらく以下の質問の複製ですが、唯一の答えはデッドリンクです:
ASP.NETアプリケーションの最小限のHTML出力
ASP.Netで作業するとき、私にとってより厄介な側面の1つは、Visual Studioがタブの代わりに空白を配置するため、最終的なHTMLのサイズが大きくなることです。最初はVisual Studioの設定を変更して代わりにタブを使用することを考えていましたが、チームの他のメンバーはとにかくスペースでオーバーレイしてしまいます。
私の質問は2つあります。1つ目は、プロジェクトごとの設定で、スペースまたはタブが使用されている場合に変更する方法があり(使用されている場合でも価値がある)、次に、生成時にすべてのビューを単純に縮小する方法があります。 ?
GZIPを有効にする とにかく、HTMLを縮小するよりもはるかに効果があります。
実行時に縮小を行うと、サーバーが損傷する可能性があります(キャッシュを使用しない場合)。展開中にAsp.Netマークアップを最小化することをお勧めします。このようにして、コードリポジトリにコードの非縮小バージョンがあり、サーバーに縮小バージョンがあります。すべての.aspx
ファイルに対してHTMLミニファイア(たとえば Dean Humeによるこのツール は有望に見える)を呼び出すデプロイメントプロセスを考えてみてください。
WebMarkupMin.Mvc を試すことをお勧めします。ドキュメントは- http://webmarkupmin.codeplex.com/documentation で入手できます。
このリンク は機能します(提供する関連リンクから)。 WebRazorHostFactory
をHTMLを縮小するものに置き換えることができるソリューションがあります。
これを機能させるには、Web.config
ファイルに以下を追加する必要があります。
<system.web.webPages.razor>
<Host factoryType="Omari.Web.Mvc.WhiteSpaceCleaningMvcWebRazorHostFactory, WhiteSpaceCleanerForWebFormsAndMVC3" />
</system.web.webPages.razor>
このセクションは通常、Views\Web.config
に配置されます。
Google Pagespeedはこれを気に入っています:
私はこれにしばらく苦労しました、そして私が見つけた最良の方法はいくつかのことの組み合わせでした:
私のヘルパークラス MinifyHtmlAttribute
onGitHubGist を使用できます。 Zeta Producer Html Compressor を使用してHTMLを最小化し、System.Web.Optimization
のバンドル、インラインJavaScriptとCSSを最小限に抑える(重要なCSS 0.0の場合)
Zeta Producer Html Compressor NuGetパッケージ
GoogleのHtmlCompressorライブラリの.NETポート。HTMLソースコードを縮小します。
これで、インラインcssとjavascriptも縮小してHTMLを圧縮および縮小できます!!驚くばかり! ;)
誰かがこれが便利だと思ってください。
これは古い質問ですが、他の人にメリットがある場合に備えて、私の解決策を投げます。
ほとんどの部分で機能する正規表現を使用した「縮小」フィルターがありました。 pre
およびtextarea
タグ内の空白を保持することになると失敗しました。それが原因で数日前に壁にぶつかってしまったので、他の人が試したものを読んだり、自分のアイデアを試したりするのに約3日かかりました。最後に、HtmlAgilityPackを使用してHTMLを解析し、そこから空白ノードを削除することにしました。 pre
要素とtextarea
要素の空白はHAPで空白とは見なされなかったため、私の考えではうまくいき、私が望んでいたことを正確に実行しました。 HTMLはチャンクで送信されていたため、最初は問題がありましたが、完了するまでバッファリングして解決しました。他の人にとって有益な場合の私のコードは次のとおりです。
このフィルターは私のアプリケーション(ASP.NET MVC 5)で機能することに注意してください。理想的には、このようなフィルターの必要性を回避するために、パブリッシュ中に縮小を行う必要があります。最後に、彼の回答の@naivistsは、応答を圧縮するGZIPは縮小よりも効果的であると述べていますが、私は少しは同意しません。はい、それはできますが、ミニファイはそれに加えて応答を少しだけ減らします。 CSSを使ってスタイリングするときに本当に効果的です。これで、要素の空白のバンピングや配置ミスを心配する必要がなくなり、マージン/パディング/配置のトリックを使用して修正する必要がなくなりました。
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
internal sealed class MinifyHtmlAttribute :
ActionFilterAttribute {
public override void OnActionExecuted(
ActionExecutedContext filterContext) {
if (filterContext == null
|| filterContext.IsChildAction) {
return;
}
filterContext.HttpContext.Response.Filter = new MinifyHtmlStream(filterContext.HttpContext);
}
}
internal sealed class MinifyHtmlStream :
MemoryStream {
private readonly MemoryStream BufferStream;
private readonly HttpContextBase Context;
private readonly Stream FilterStream;
public MinifyHtmlStream(
HttpContextBase httpContextBase) {
BufferStream = new MemoryStream();
Context = httpContextBase;
FilterStream = httpContextBase.Response.Filter;
}
public override void Flush() {
BufferStream.Seek(0, SeekOrigin.Begin);
if (Context.Response.ContentType != "text/html") {
BufferStream.CopyTo(FilterStream);
return;
}
var document = new HtmlDocument();
document.Load(BufferStream);
var spans = document.DocumentNode.Descendants().Where(
d =>
d.NodeType == HtmlNodeType.Element
&& d.Name == "span").SelectMany(
d => d.ChildNodes.Where(
cn => cn.NodeType == HtmlNodeType.Text)).ToList();
// Some spans have content that needs to be trimmed.
foreach (var span in spans) {
span.InnerHtml = span.InnerHtml.Trim();
}
var nodes = document.DocumentNode.Descendants().Where(
d =>
(d.NodeType == HtmlNodeType.Text
&& d.InnerText.Trim().Length == 0)
|| (d.NodeType == HtmlNodeType.Comment
&& d.InnerText.Trim() != "<!DOCTYPE html>")).Select(
d => d).ToList();
foreach (var node in nodes) {
node.Remove();
}
document.Save(FilterStream);
}
public override void Write(
byte[] buffer,
int offset,
int count) {
BufferStream.Write(buffer, offset, count);
}
}