LINUX.ORG.RU

Максимально быстрый минификатор html

 , ,


1

1

Привет

Столкнулся с такой проблемой. В Django нужно минифицировать обьемистый html(до 3 мегабайт). Есть 2 python пакета которые это делают. Но после профилирования оказалось, что они очень медленные и тратят больше времени на процесс, чем передать необработанный код на браузер

Облазил весь поиск, но не нашел минификаторов написанных скажем на C или C++. Python для таких обработок слишком медленный.

Есть ли таковые или минификация html делается както по другому ?

★★★

Ответ на: комментарий от gasinvein

То есть вырезать лишние пробелы? html это же не код, а данные, тут переменные переименовать в однобуквенные, например, не получится, как в случае с JS, а пробелов лишних тоже не бывает. Я, конечно, нуб в этом вопросе, поэтому и спрашиваю)

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86
<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<title>users</title>
		<link href="styles.css" rel="stylesheet">
	</head>	
	<body>
		<table>
			<tr>
				<th>name</th>
				<th>age</th>
				<th>email</th>
			</tr>
			<tr>
				<td>john</td>
				<td>30</td>
				<td>john@mail.com</td>
			</tr>
			<tr>
				<td>tom</td>
				<td>15</td>
				<td>tom@mail.com</td>
			</tr>
		</table>
	</body>
</html>
<!DOCTYPE html><meta charset=utf-8><title>users</title><link href=styles.css rel=stylesheet><table><tr><th>name<th>age<th>email<tr><td>john<td>30<td>john@mail.com<tr><td>tom<td>15<td>tom@mail.com
anonymous
()

В вашу деревню кэширование не завезли что ли?
Ну и старый добрый {% spaceless %} работает нормально без всяких лишних плагинов.

Goury ★★★★★
()

Есть ли таковые или минификация html делается както по другому ?

Она не нужна, потому что gzip.

anonymous
()
Ответ на: комментарий от Goury

{% spaceless %}

Хорошая вещь но ее нужно втыкать во все шаблоны, если они вложенные будет путаница.

Нашел from django.utils.html import strip_spaces_between_tags

Это более управляемо

ism ★★★
() автор топика
Ответ на: комментарий от theNamelessOne

А ты проверял?

Это логика, распаковать в браузере 3 метра, особенно мобильном, долго (потери в доли секунд но это потери, не нужные). Перед сжатием нужно выкинуть лишнее, хотя бы пробелы

ism ★★★
() автор топика
Ответ на: комментарий от ism

Это логика, распаковать в браузере 3 метра, особенно мобильном, долго (потери в доли секунд но это потери, не нужные)

Это не логика, это гадание на кофейной гуще.

theNamelessOne ★★★★★
()
Ответ на: комментарий от ism

Это логика, распаковать в браузере 3 метра, особенно мобильном, долго

А передать эти три метра по-твоему быстрее?

kwinto
()
Ответ на: комментарий от ism

А вы точно девопспрограммист?

Дело в том, что веб-сервер в любом случае (если вы не местный сахариту с кои8) отдает клиенту контент в сжатом виде, так что..

anonymous
()

отправляйте таких в джоб или фриланс

офисный дивилопирЪ

missxu
()
Ответ на: комментарий от anonymous

А вы точно девопспрограммист?

Дело в том, что веб-сервер в любом случае (если вы не местный >сахариту с кои8) отдает клиенту контент в сжатом виде, так что..

Он то сжимает, но сжать 2 мегабайта легче чем 3

ism ★★★
() автор топика
Ответ на: комментарий от ism

Он то сжимает, но сжать 2 мегабайта легче чем 3

Почитайте на досуге, как работают архиваторы. Можете взять файл с миллиардом пробелов и попробовать его сжать, например.

anonymous
()
Ответ на: комментарий от anonymous

Почитайте на досуге, как работают архиваторы. Можете взять файл с миллиардом пробелов и попробовать его сжать, например.

Зачем тратить время на сжатие, если можно не тратить ?

Лишний мегабайт это лишний расход памяти браузера и прочее

ism ★★★
() автор топика
Ответ на: комментарий от ism

Зачем тратить время на сжатие, если можно не тратить ?

Не тратьте. И свое время на веб-разработку тоже, пожалуйста, не тратьте.

anonymous
()

А как так у вас 3 Мбайта html получается? Там таблица что-ли на 3 метра?

menangen ★★★★★
()
Ответ на: комментарий от kwinto

Это логика, распаковать в браузере 3 метра, особенно мобильном, долго

А передать эти три метра по-твоему быстрее?

Вы оба удивительно странные вещи говорите. Эти 3 мегабайта HTML надо будет синтаксически разобрать, построить по ним DOM, сопоставить с CSS селекторами (даже если дефолтные стили), и потом отрисовать.

Я думаю, это займет пару минут или вообще зависнет.

А вы про какое-то копеечное время на gzip и передачу тут рассуждаете. Тоже мне, перформанс-специалисты.

thomasbug
()
Ответ на: комментарий от anonymous

Дело в том, что веб-сервер в любом случае отдает клиенту контент в сжатом виде, так что..

Ничего подобного. Отдает в gzip только если он так настроен и только если клиент сразу сказал, что готов такой ответ принять.

thomasbug
()

Минификация вообще так себе вещь, а HTML тем более.

Если ты будешь опосля внедрять HTML-минификацию, то у тебя изменится верстка, т.к. whitespacы в HTML сигнификантны. Т.е. придется править это всё руками либо в CSS, либо вставлять новые узлы, либо &nbsp; либо еще что-то придумывать.

thomasbug
()

минификация html делается както по другому ?

На мой взгляд, ее не стоит делать еще вот по какой причине. HTML in the wild как правило всегда невалиден и никто об этом не знает, но оно как-то работает. Но вот минификатор невалидный html теоретически может сломать окончательно, т.к. у него нет логики «автовосстановления смысла» которая есть у браузеров уже сто лет.

thomasbug
()
Ответ на: комментарий от thomasbug

Остановился на этом. Это на время почти не влияет но уменьшает до 30%, там много пробелов

https://htmlmin.readthedocs.io/en/latest/


from django.utils.html import strip_spaces_between_tags

def minify_html(html: str):
    if sys.getsizeof(html) < 50000:
        html_min = htmlmin.minify(
            html,
            remove_comments=True,
        )
    else:
        html_min = strip_spaces_between_tags(html.strip())

    return html_min

ism ★★★
() автор топика
Ответ на: комментарий от thomasbug

Я думаю, это займет пару минут или вообще зависнет.

Мобильный Safari рендерит за несколько секунд, например

kwinto
()
Ответ на: комментарий от tz4678

html кривое и убогое надмножество xml ес чо.

anonymous
()

попробуй регулярки :D результат не идеален но вполне себе норм пых потому что мне лень вспоминать питон

$search = [
    '/\>[^\S ]+/s',
    '/[^\S ]+\</s', 
    '/(\s)+/s',
    '/>\ <\/textarea/s'
];
$replace = [
    '>',
    '<',
    '\\1',
    '></textarea'
];
preg_replace($search, $replace, $text);

Noob_Linux ★★★★
()
Ответ на: комментарий от tz4678

если не разбираешься в вопросе, то рот не открывай. ни старый ни новый html к xml никакого отношения не имеют вообще.

thomasbug
()
Ответ на: комментарий от thomasbug

ох какой злой, наверное, епырь не удовлетворяет. олдфаки про тот же xhtml помнят... ага не имеет, ну те лучше знать.

tz4678 ★★
()
Ответ на: комментарий от tz4678

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

олдфаки про тот же xhtml помнят

XHTML никогда в интернете не использовался на практике ни на одном сайте. и к HTML отношения не имеет. я тебе уже сказал, что XML к HTML отношения не имеет, новый (html5) - тоже.

так что закрой рот и исчезни.

anonymous
()
Ответ на: комментарий от anonymous

ага никогда... мобильные браузеры сначала понимали только wml, потом научились xhtml... вообщем слейся, школьник, будешь умнее выглядеть

tz4678 ★★
()
Ответ на: комментарий от tz4678

ты обосрался полностью. в вопросе ты не разбираешься совсем, что и было понятно изначально. возвращаясь к твоему школьниковскому высеру: только даун может думать что html и xml как-то связаны. html не является, как ты думаешь, подмножеством xml. и не является его application. и надмножеством. он мог бы являться application sgml'я, но и это может оказаться неправдой. а html5 закодирован совершенно новым синтаксисом включающим незакрывание тегов на уровне синтаксиса, это не html и уж не точно не xml.

к сведению читателей, xhtml хоть сколько-нибудь заметного применения никогда не имел, т.к. во времена его «популярности» не поддерживался браузерами, да и сейчас наверное тоже. правда недоумки верстали страницы в, как они думали, xhtml, но сервили как content-type text/html, браузер привыкший к мусору думал, что это испорченый html и рендерил как мог, хотя учитывал доктайп. сервить его с xml content-type было невозможно т.к. это толком не работало в браузерах, да и в этом случаи хомякам не нравилось, «малейшая» ломало страницу, а следить за тем что документы well-formed им было сложно. и году к 2010 про xhtml как я замечал окончательно забыли.

thomasbug
()
Ответ на: комментарий от kwinto

Мобильный Safari рендерит за несколько секунд, например

что это значит? какую глупость ты сморозил. все равно что сказать firefox, забыв упомянуть на какой машине он запущен. откуда такие тупые люди?

пишу с mobile safari, который и от 300kb документов падает.

thomasbug
()
Ответ на: комментарий от tz4678

вообщем
школьник

Кто бы говорил.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.