Как минимизировать HTML-код?

Моя идея состоит в том, чтобы каким-то образом минимизировать HTML-код на стороне сервера, чтобы клиент получал меньше байтов.

Что я имею в виду под «минификацией»?

Не застегивается. Больше похоже на то, что создатели jQuery делают с версиями .min.js. Другими словами, мне нужно удалить ненужные пробелы и новые строки, но я не могу удалить столько, чтобы изменилось представление HTML (например, удалить пробелы между фактическими словами в абзаце).

Есть ли инструменты, которые могут это сделать? Я знаю, что есть HtmlPurifier. Способно ли это сделать? Любые другие варианты?

P.S. Пожалуйста, не предлагайте регулярные выражения. Я знаю, что только Чак Норрис может парсить с ними HTML. знак равно


person daGrevis    schedule 28.04.2011    source источник
comment
Я не думаю, что вам нужно это делать. Большинство веб-серверов поддерживают обслуживание веб-страниц в сжатом виде. Ваши пробелы больше не станут проблемой. Вы всегда должны предоставлять свои веб-страницы в сжатом виде.   -  person Stephen Chung    schedule 28.04.2011
comment
Вы можете написать простую программу, которая использует библиотеку синтаксического анализа HTML для анализа файла HTML, а затем записывает его обратно. Если вы используете C#, вы можете посмотреть библиотеку LINQ-to-HTML.   -  person Stephen Chung    schedule 28.04.2011
comment
Согласен со Стивеном Чангом: если вы заархивируете HTML, все пробелы будут сжаты. Это будет более быстрый процесс, чем исправление самого HTML.   -  person bart    schedule 28.04.2011


Ответы (5)


Вы можете разобрать код HTML в дерево DOM (которое должно сохранять пробелы содержимого в узлах), а затем сериализовать его обратно в HTML без каких-либо предварительных пробелов.

person Delan Azabani    schedule 28.04.2011

Немного поздно, но все же... Используя output_buffering, это так же просто:

function compress($string)
{
    // Remove html comments
    $string = preg_replace('/<!--.*-->/', '', $string);

    // Merge multiple spaces into one space
    $string = preg_replace('/\s+/', ' ', $string);   

    // Remove space between tags. Skip the following if
    // you want as it will also remove the space 
    // between <span>Hello</span> <span>World</span>.
    return preg_replace('/>\s+</', '><', $string);      
}

ob_start('compress');

// Here goes your html.    

ob_end_flush();
person Savas Vedova    schedule 24.08.2013
comment
Вы, вероятно, не захотите удалять пробелы в тегах, таких как pre, code и т. д. - person Bijay Rungta; 29.08.2013
comment
@BijayRungta ты прав. Хотя этого можно избежать с помощью некоторых модификаций. Я только что подал идею :) +1 к вашему комментарию. - person Savas Vedova; 29.08.2013
comment
Разбор HTML с помощью регулярного выражения не работает. Ваше регулярное выражение сломается, например. <!-- foo --><p>bar</p><!-- baz -->. - person Wilfred Hughes; 06.04.2017

Есть ли инструменты, которые могут это сделать?

Да, вот инструмент, который вы можете включить в процесс сборки или работать со слоем веб-кэша: https://code.google.com/archive/p/htmlcompressor/

Или, если вы ищете инструмент для минимизации вставляемого HTML-кода, попробуйте: http://www.willpeavy.com/minifier/

person Will Peavy    schedule 03.05.2011

Вы можете использовать инструмент Pretty Diff: http://prettydiff.com/?m=minify&html. также минимизируйте любой CSS и JavaScript в коде HTML, и минимизация происходит регрессивным образом, чтобы не помешать будущему украшению HTML обратно в удобочитаемую форму.

person austincheney    schedule 25.11.2011

Есть ли инструменты, которые могут это сделать?

Вы можете использовать онлайн-редактор веб-разработки CodVerter для сжатия смешанного HTML-кода.
компрессор был протестирован. несколько раз для надежности и точности.
(Полное раскрытие информации: я являюсь одним из разработчиков).

введите здесь описание изображения

person jonathana    schedule 04.02.2019