

VS2013 .NET Framework 4.5環境 ビュー・エンジンは「Razor」を利用しています。

PHPのSmartyでいうところの {strip} タグのような、不要なスペースや改行を取り除いた Minify
された状態のHTMLを生成する簡単な方法はありますでしょうか？

どうぞよろしくお願いします。


CC BY-SA 3.0
2014-12-16T10:43:59.210
1741
2021-05-02T12:00:19.497
question
.net asp.net razor
ASP.NET MVC Razor で HTML を Minify する方法はありますか？


使ったことは無いのですが興味があるので調べてみました。  
WebMarkupMin.Mvcが良いのではないでしょうか。

  * <http://nugetmusthaves.com/Package/WebMarkupMin.Core>
  * <https://github.com/Taritsyn/WebMarkupMin>


CC BY-SA 4.0
2014-12-16T12:16:26.237
1753
2021-05-02T12:00:19.497
2021-05-02T12:00:19.497
19110
2238
1741
answer


Visual Studio の拡張機能 SideWaffle では WhitespaceModule という Minify するための HTTP
モジュールが提供されています。

<https://github.com/ligershark/side-
waffle/blob/master/TemplatePack/ItemTemplates/Web/ASP.NET/WhitespaceModule/WhitespaceModule.cs>

実装のメインは WhitespaceFilter クラスなので、ActionFilter で Response.Filter にセットする使い方も出来ます。

<http://forums.asp.net/t/1380989.aspx>

ただし、マルチバイト文字の扱いを考慮していないケースが多いので、その点だけ注意が必要ですね。


CC BY-SA 3.0
2014-12-16T12:19:52.467
1754
2014-12-16T12:19:52.467
2743
1741
answer


Razorはインラインで書かれた特定の範囲のHTMLに対してのみ加工を行うような処理には向いていません。  
{strip}のように部分的なminifyを強引にやるとすれば、

[code]

    public static MvcHtmlString StripWhitespaces(this HtmlHelper self, Func<object, HelperResult> template)
    {
        // 一番単純なminifyの例です。
        return new MvcHtmlString(template(self.ViewData.Model).ToString()
            .Replace("\r", "").Replace("\n", "").Replace(" ", "").Replace("\t", ""));
    }
    
[/code]

このような拡張メソッドを用意して、以下のように使うくらいでしょうか。

[code]

    @Html.StripWhitespaces(@<text>
        <h1>
            hogehoge
        </h1>
    </text>)
    
[/code]

出力全体をminifyしたい場合は、お二方が仰るようにHttpModuleやActionFilterを使った方法しか無いと思います。


CC BY-SA 3.0
2014-12-16T12:27:45.133
1755
2014-12-16T13:32:48.620
2014-12-16T13:32:48.620
3277
3277
1741
answer


要望はたまに上がるみたいですが、公式にはまだのようですね。

aspnet/Mvc issues

  * [MVC RenderSection with Minification](https://github.com/aspnet/Mvc/issues/571)
  * [Minify Razor Output](https://github.com/aspnet/Mvc/issues/1110)

close になっていますが、対応しないのではなくて課題ではなく新機能として討論しようということの様です。

私も利用した事は無いですが、既に上がっている WebMarkupMin.Mvc 以外でもいくつかあるようです。

WebMarkupMin.Mvcはaction
filterを利用してHTMLかXHTMLを処理しているようですね。以下に挙げるものは少し動作が異なるようです。

  * <https://github.com/Chebur9tina/HtmlOptimizerMvc4>  
こちらは実行時ではなくビルド時にrazor viewをminifyするようです。
MVC4用です（他の人がMVC5用にしたものをbitbucketで見かけました）

  * <http://nuget.org/List/Packages/Meleze.Web> (<https://github.com/meleze/Meleze.Web>)  
こちらはrazorをminifyするようです。ただしpartial
viewがminifyされないとか、bodyしかminifyされないとか見かけましたので、全体はminifyされないかもしれません。


CC BY-SA 3.0
2014-12-16T12:58:19.977
1764
2014-12-16T12:58:19.977
728
1741
answer