Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Libraries > html компрессор


Автор: Strech 2.4.2008, 11:28
Здравствуйте винградовцы.
Подскажите пожалуйста, есть ли такая библиотека, а если нет, то посоветуйте решения (опять же если таковые имеются), для компрессии html.
Задача состоит в следующем, необходимо выкинуть все лишнее из html кода, превратить так сказать в не читаемую кашу  smile , выбросить лишние пробелы, переводы строк, комментарии, но нужные оставить (вроде условных).

У кого какие мнения по этому поводу. С нетерпением жду. smile 

Автор: MoLeX 2.4.2008, 11:38
http://softsearch.ru/programs/46-839-htmlcompact-download.shtml
щутка  smile


Strech не разу не встречал, а зачем тебе такая фича? вроде модемщиков становится все меньше и меньше... может лучше не сжимать хтмл код страница, а уменьшить вес грифики?

Автор: ksnk 2.4.2008, 11:41
http://forum.dklab.ru/php/advises/Html_optimizeOptimizatsiyaHtmlKoda.html

Автор: Strech 2.4.2008, 12:28
Цитата(ksnk @  2.4.2008,  11:41 Найти цитируемый пост)
htmloptimize 
Очень хорошо, буду пробовать. Большое спасибо.
Жду ещё предложений smile 

Автор: MoLeX 2.4.2008, 12:35
Цитата(Strech @  2.4.2008,  12:28 Найти цитируемый пост)
Жду ещё предложений


Strech если внимательно читал ссылку то долежн был увидеть это - gzip

Автор: awers 2.4.2008, 12:41
yuicompressor вам в помощь, а еще google.ru на предмет использования gzip с примерами .htaccess для упрощенного варианта

Автор: Strech 2.4.2008, 13:01
Цитата(MoLeX @ 2.4.2008,  12:35)
Strech если внимательно читал ссылку то долежн был увидеть это - gzip

Если вы видели мой вопрос, то там спрашивается о компрессии не за счёт сжатия, а за счёт оптимизации html кода

Автор: MoLeX 2.4.2008, 13:08
ну после оптимизации он от своего веса убавит совсем немного, а вот серверу прийлется потрудится...

Автор: Strech 2.4.2008, 13:09
Цитата(awers @  2.4.2008,  12:41 Найти цитируемый пост)
yuicompressor вам в помощь
Это раздел о php?)

Добавлено через 1 минуту и 5 секунд
Цитата(MoLeX @  2.4.2008,  13:08 Найти цитируемый пост)
а вот серверу прийлется потрудится
Не приувеличивайте  smile 

Автор: Strech 2.4.2008, 13:26
Цитата(ksnk @  2.4.2008,  11:41 Найти цитируемый пост)
htmloptimize 
Что-то не выкидывает он комментарии ... только пробелы ... странно

Автор: Feldmarschall 2.4.2008, 13:57
Цитата(Strech @  2.4.2008,  13:01 Найти цитируемый пост)
Если вы видели мой вопрос, то там спрашивается о компрессии не за счёт сжатия, а за счёт оптимизации html кода 

Видели.
Однако смысла колупаться с пробельчиками при наличии компрессии нет ни малейшего.
Сюда пишут специалисты.
И не стоит от них ждать ответа на бессмысленные вопросы. Здесь дадут решение проблемы, а не чьих-то фантазий. 
Надо сжимать? Есть gzip.


Автор: Strech 2.4.2008, 14:13
вопрос стоит в том, есть ли какие-то реализованные оптимизации html кода, путём очистки кода от мусора, средствами php.

Автор: mishaSL 2.4.2008, 14:13
Цитата(Feldmarschall @  2.4.2008,  13:57 Найти цитируемый пост)
Однако смысла колупаться с пробельчиками при наличии компрессии нет ни малейшего.

Я бы не сказал, что в этом нет смысла. В этом появляется смысл, но в очень редких случаях: когда уже включены компрессии, но тем не менее проект очень нагружен и хочется еще сократить трафик.
К примеру на www.yandex.ru, google.ru и т.д. но как правило повторюсь это используется только на очень нагруженных проектах. Хотя если есть желание, то почему бы и не использовать, думаю хуже от этого не будет.

Добавлено через 1 минуту и 39 секунд
Strech, так не так сложно написать это на PHP, главное определиться что вырезать нужно.

Автор: Feldmarschall 2.4.2008, 14:21
mishaSL, так "нагружен" или "сократить трафик"? 
Трафика там много не наловишь. А нагрузка только вырастет. Хотя тоже копейки, но уж, во всяком случае - не минус.
И яндекс, насколько я вижу, ничего не "сжимает". А мотивы гугла могут и отличаться от "экономии трафика".



M
MoLeX
Разборки на форуме не уместны. Будьте терпимы друг к другу и вежливы...

Автор: mishaSL 2.4.2008, 15:31
Feldmarschall, в данном контексте под словом "нагружен" я подразумевал: большое кол-во обращений к сайту.

Можно узнать из каких соображений вы считаете, что этот метод сжатия не должен использоваться? 
И тогда еще один вопрос, если мы сжимает JS и CSS файлы (это распространенная практика), почему не стоит сжимать HTML?

Я повторюсь, я не говорю, что этот способ имеет место в повсеместном применении, я хочу сказать что такой способ существует и применяется на практике.

Автор: Strech 2.4.2008, 15:42
Полностью согласен с mishaSL, но оптимизация html может нести не только характер снижения трафика, например защита от дурака.
Если у кого-то есть хороший пример, по удалению пробелов внутри тегов, и тому подобное, прошу не жадить smile 

Автор: ksnk 2.4.2008, 15:58
Цитата(Strech @  2.4.2008,  13:26 Найти цитируемый пост)
Что-то не выкидывает он комментарии ... только пробелы ... странно

Новая версия его чего-то странно повела себя на моем проекте. Вот старая версия, которая у меня крутится... Как нибудь соберусь с силами - посмотрю в чем дело...

P.S. Новая версия не хуже. Лучше использовать ту, что по ссылке...
Принципиальное отличия "старой" от новой в том, что мной вставлен
    header('Content-type: text/html; charset=utf-8');
в первую строчку процедуры...

Автор: Strech 3.4.2008, 06:36
Цитата(ksnk @  2.4.2008,  15:58 Найти цитируемый пост)
Вот старая версия, которая у меня крутится
Спасибо, попробую

Автор: Strech 3.4.2008, 08:18
ksnk, не могли бы вы запостить пример использования оптимизатора вашего, а то что-то он работает так же как и прежний, что вы давали. smile 

Автор: ksnk 3.4.2008, 08:59
Вообще-то он не мой. По ссылке и/или в комментариях в коде можно найти автора.

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

Пример 
Код

    ob_start('html_optimize');


Добавлено через 2 минуты и 12 секунд
Какие комментарии не удаляются? Можно пример?

Автор: Strech 3.4.2008, 09:30
ksnk, dот мой пример, что я сделал не так?

Код

require_once 'inc/html_optimize.2.0.25.php';
$str = '
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<head>
<title>Главная страница - Название сайта</title>
</head>
<body>
<!-- print info -->
<div class="print">
<h1>Название сайта</h1>
<hr />
</div>
<!-- /print info -->
<!-- <![if IE]> --><h1>Это IE браузер</h1><!-- <![endif]> -->
<!-- <![if !IE]> --><h1>Это не IE</h1><!-- <![endif]> -->
<div id="main"                  >
<a href="#sm" id="top" tabindex="1" title="Перейти к содержимому"></a>
</div>
</body>
</html>
';

ob_start('html_optimize');
echo $str;


Проверьте, на выходе получите ту же строку, комментарии не вырезаны smile 

Автор: ksnk 3.4.2008, 10:05
Дело, видимо в этом (строка 110-112 новой версии )
Код

    #счетчики и баннеры могут использовать в комментариях свои сигнатуры,
    #поэтому не вырезаем комментарии, если длина текста мала, текст в ANSI и нет переносов строк
    if (@$m[5] || preg_match('/^<!--[\x20-\x7e]{4,60}$/s', $m[0])) return $m[0];

Можно либо закоментировать эту строку, либо переделать комментарий...

P.S. убрать короткие комментарии можно так
Код

    if (@$m[5])return $m[0];

Автор: Strech 3.4.2008, 11:32
Теперь вопрос в следующем, как оптимизировать html теги, выбросить из них пробелы лишние ... у кого-нибудь есть заготовки регулярных выражений?

Автор: snow_wons 3.4.2008, 12:53
Цитата(Strech @  3.4.2008,  11:32 Найти цитируемый пост)
у кого-нибудь есть заготовки регулярных выражений? 


Самое простое:

Код

function ob_linearize($text)
{
    return preg_replace('/[\r\n\s]+/s', ' ', trim($text));
}

ob_start("ob_linearize");

Удаляет двойные пробелы и переводы строк. Будьте осторожны с комментариями "//" в js. 

Автор: Strech 3.4.2008, 13:14
Цитата(snow_wons @  3.4.2008,  12:53 Найти цитируемый пост)
Удаляет двойные пробелы и переводы строк
Эмммм ... а как это связано с удалением лишних пробелов в html тегах?

Автор: snow_wons 3.4.2008, 21:10
Цитата(Strech @  3.4.2008,  13:14 Найти цитируемый пост)
а как это связано с удалением лишних пробелов в html тегах?

Самым непосредственным образом.
Или у нас разные понятия о "лишних пробелах"?

Автор: Sannis 4.4.2008, 02:23
Я бы сказал, что оба хороши (:
snow_wons, а как быть, скажем, с содержимым тегов <pre> ?
Strech, чесно говоря не ясно, что вы хотите smile Внутри самих тегов вырезать(пример: <a       href =  "">) или внутри контейнеров?
Если бы делал, остановился бы на вырезании лишнего между тегами, например так:
Код

preg_replace('/>[\r\n\s]+</s', '>< ', $text);

Автор: snow_wons 4.4.2008, 08:57
Цитата(Sannis @  4.4.2008,  02:23 Найти цитируемый пост)
а как быть, скажем, с содержимым тегов <pre>?


Или добиваться нужного эффекта иными способами, или заменить ' ' на &nbsp;, а переносы строк <br />

Автор: Strech 4.4.2008, 15:13
Цитата(Sannis @  4.4.2008,  02:23 Найти цитируемый пост)
Если бы делал, остановился бы на вырезании лишнего между тегами, например так:

Задача не в том, чтобы между тегами место убрать, это проще пареной репы. А тег форматировать нормально и из
Код

<  div       class="   super    puper"   id = "  12" >

Сделать это
Код

<div class="super puper" id="12">

Автор: snow_wons 4.4.2008, 21:29
Цитата(Strech @  4.4.2008,  15:13 Найти цитируемый пост)
Задача не в том, чтобы между тегами место убрать, это проще пареной репы

А для вас есть какая то разница где пробелы убирать? Регулярки по всему тексту идут (всмысле коду) и им всё равно внутри тега работать или снаружи.
Если хотите получить то, что написали - то:
Код

function ob_linearize($text)
{
    $text = preg_replace('/[\r\n\s]+/s', ' ', trim($text));
    $text = str_replace('=" ', '="', $text);
    $text = str_replace(' ="', '="', $text);
    $text = str_replace('< ', '<', $text);
    $text = str_replace(' >', '>', $text);
    return $text;
}

Автор: Sannis 4.4.2008, 21:41
Цитата(snow_wons @ 4.4.2008,  08:57)
Цитата(Sannis @  4.4.2008,  02:23 Найти цитируемый пост)
а как быть, скажем, с содержимым тегов <pre>?


Или добиваться нужного эффекта иными способами, или заменить ' ' на &nbsp;, а переносы строк <br />

Я-то понимаю, что делать с ними ;)

P.S. Имхо, в последнем посте дополнительные регулярки не внесут ничего нового, разве нет?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)