2008-10-31 2 views
33

Каковы способы сокращения размера ответа HTML, отправленного приложением asp.net?Minify Html output приложения ASP.NET

Я использую элементы управления, которые не принадлежат мне, и он производит выходные данные с пробелами. Я заинтересован в том, чтобы минимизировать весь вывод HTML на странице так же, как и Google (см. Источник www.google.com), чтобы улучшить время.

Есть ли какие-либо классы полезности для ASP.NET, которые могут делать это для меня?

модуль HTTP

ответ

31

Там нет необходимости делать это во время выполнения. Потому что это можно сделать во время компиляции.

Детали: http://omari-o.blogspot.com/2009/09/aspnet-white-space-cleaning-with-no.html

+0

Отличная ссылка. Это было мое решение для http://stackoverflow.com/questions/7121371/asp-net-mvc-razor-how-to-keep-nicely-indented-code-without-sending-a-load-of-w – 2011-08-19 15:22:23

+0

Как вы применили это в проекте? Извините за мое невежество, но я не могу заставить его работать. – fiberOptics 2012-04-13 09:06:11

19
+1

Разбитое URL-адрес, проект кажется больше не действует. – 2010-06-23 11:53:26

+2

Mads переместил свой блог. URL обновлен. – gius 2010-06-24 08:38:07

+0

Примечание: Это работает, только если запрос заканчивается на .aspx, но вы можете изменить код – Bolo 2016-03-10 20:57:35

6

Я хочу прокомментировать предложение Тома (но я новичок в переполнению стека).

  1. Связанный код (omari-o.blogspot.com) не поддерживает MVC4, и хотя код является открытым источником оно не может быть легко модернизировано из-за изменения торможения между MVC3 и MVC4.

  2. В процессе выполнения могут быть помечены пробелы, записанные на результат http, только разработчик реального сайта может это знать. Таким образом, статическая минимизация файлов шаблонов (aspx) вообще не является надежной. Динамическая минимизация, предложенная gius, должна использоваться, чтобы гарантировать правильное удаление пробелов, и, к сожалению, это приведет к затратам на вычисление времени выполнения. Если код динамически записывает пробелы на выход, он должен быть удален динамически.

9

Для платформы Microsoft .NET существует библиотека, называемая WebMarkupMin, которая производит минимизацию HTML-кода. Для каждой структуры ASP.NET имеет свой собственный модуль:

  • ASP.NET Core - WebMarkupMin.Web. Реализован как HTTP-модуль, поэтому он может работать с любой инфраструктурой. Подходит для использования в структуре веб-страниц ASP.NET (Razor).
  • ASP.NET MVC - WebMarkupMin.Mvc
  • ASP.NET Web Forms - WebMarkupMin.WebForms

Документация доступна по адресу - http://webmarkupmin.codeplex.com/documentation

2

Просто добавить другой вариант я не вижу в этом списке, который является один я рекомендовал использовать:

Html minifier command line tool

Использование: here и here

Существует вопрос, однако, с этим инструментом: он оставляет одну строку (//) комментарии, и это вызывает проблемы для Razor синтаксического анализа, так как однострочный комментарий, помещенный в C# блок, как следующее:

@{ 
    ... 
    ... 
    // anything 
    ... 
} 

вызовет выход минификация остальную часть строки, начиная с этого момента, чтобы быть проигнорировано Razor анализатором, который, таким образом поднять ошибку, указав там не удалось найти закрытие "}" для блока.

Мое обходное решение для этой проблемы было полностью удалением эти комментарии с выхода. Этот способ он работает. не Чтобы сделать это, просто удалите RegexOptions.SingleLine из строки 145:

htmlContents = Regex.Replace(htmlContents, @"//(.*?)\r?\n", ""/*, RegexOptions.Singleline*/);