質問

これはおそらく以下の質問の複製ですが、唯一の答えは死んだリンクです。
ASP.NETアプリケーションのHTML出力を縮小します

ASP.NETを使用する場合、私にとってより厄介な側面の1つは、Visual Studioが最終的なHTMLのサイズを大きくする白い間隔のタブの代わりにスペースを置くという事実です。私はもともと、単に視覚的なスタジオ設定を変更してタブを使用することを考えていましたが、私のチームの他の人はとにかくスペースでオーバーレイすることになります。

私の質問は2倍です。1つ目は、スペースやタブが使用されている場合(そしてもしそうなら価値がある場合でもありますか)、プロジェクトあたりの設定を変更する方法があります。 ?

役に立ちましたか?

解決

GZIPを有効にします とにかく、HTMLを模倣するよりもはるかに効果があります。

実行時に縮小を行うと、サーバーを傷つける可能性があります(キャッシュを使用しないと仮定します)。展開中にasp.netマークアップをminfiyすることをお勧めします。このようにして、コードリポジトリには未成年のコードのコードと、サーバーに縮小バージョンがまだあります。 HTMLミニフィーターを呼び出す展開プロセスを考えてください(たとえば、 ディーン・ヒュームによるこのツール すべてに有望に見えます) .aspx ファイル。

他のヒント

試してみることをお勧めします 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 PagesSpeedはこれを気に入るはずです:

私はこれでしばらく苦労しましたが、私が見つけた最善の方法は、いくつかのことの組み合わせでした。

私のヘルパークラスを使用できます MinifyHtmlAttribute の上 github要旨. 。それはを使用します ゼータ生産者HTMLコンプレッサー HTMLを最小限に抑えます System.Web.OptimizationインラインJavaScriptとCSSを最小化するためのバンドリング(重要なCSS 0.0用)

ZETAプロデューサーHTMLコンプレッサーNUGETパッケージ

GoogleのHTMLCompressorライブラリの.NETポートは、HTMLソースコードを監督します。

これで、インラインCSSとJavaScriptが模倣されている状態でHTMLを圧縮および削除できます!!素晴らしい! ;)

誰かがこれが便利だと思うことを願っています。

これは古い質問ですが、他の誰かに利益をもたらす場合に備えて、ソリューションを投げ込みます。

ほとんどの場合機能した正規表現を使用して、「ミニフィケーション」フィルターがありました。それは、白人を巡回することになったときに失敗しました pretextarea タグ。私は数日前に壁にぶつかりました。最終的に、HTMLagilityPackを使用してHTMLを解析し、そこからホワイトスペースノードを削除することに落ち着きました。 Whitespaceが pretextarea 要素は、私の好意で解決し、私が望んでいたことを正確にやったことによって、白人によっては白人とは見なされませんでした。 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);
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top