сжатие страниц

kSalex

Новичок
сжатие страниц

Меня интерисует именно сжатие страниц, кешировать не надо.

Вопрос такой: написать мне свою функцию сжатия или лучше использовать встроенную, т.е. ob_start("ob_gzhandler") ?
Если свою, то чем хуже ob_start("ob_gzhandler") ?

php 4.4
 

ksnk

прохожий
Своя функция сжатия хуже тем, что ее никто не будет понимать :)
чем не устраивает gzhandler?
 

kSalex

Новичок
Кто-то мне говорил, что она съедает много памяти, но в мане по этому ничего не нашёл

-~{}~ 01.12.05 15:55:

так что, как быть ?
использовать ob_gzhandler и не изобретать свои колёса?
 

ksnk

прохожий
gzhandler - стандартный (практически) ZIP, который существует уже давно и код его вылизывался тоже давно. Есть ли уверенность, что удастся написать что-то свое, которое еще и памяти будет есть меньше?
Есть ли уверенность, что полученный выигрыш стоит затраченных усилий? Может лучше памяти в сервер доставить?

Ответ на эти вопросы и есть ответ на твой :)
 

Romashov

экспериментатор
использовать ob_gzhandler и не изобретать свои колёса?
почему же - изобрети, своё сжатие. Только потом не забудь все браузеры переписать, включив туда поддержку своего сжатия.
Можешь конечный html код пооптимизировать.
 

kSalex

Новичок
Romashov - не надо умничать.

Изобрести можно всегда, вопрос в том будет ли это разумным решением. Я рассуждал из того что мне сказал приятель("съедает много памяти"). Из слов ksnk я понял что по видимому это не так(спасибо ему за это), ну и потестил сам конечно. Так что выбор остался на ob_gzhandler

Топик мона закрыть...

-~{}~ 02.12.05 20:03:

А вот нашёл замечание из мана:

You cannot use both ob_gzhandler() and zlib.output_compression. Also note that using zlib.output_compression is preferred over ob_gzhandler().

Получается что лучше всё таки написать свои колёса, что Вы об этом думаете?
 

SiMM

Новичок
> Получается что лучше всё таки написать свои колёса, что Вы об этом думаете?
Какие нафиг колёса? Вы фразу переводить на русский язык пробовали? Ну так попробуйте...
 

ksnk

прохожий
kSalex Зануда, вы :)
zlib.output_compression вызывается самим Appach'ем, причем хронологически - уже после PHP, а не самим PHP и уже по этому такая связка использует меньше памяти, чем вызов того-же gzhandler'а на фоне раскрученного PHP скрипта.

В любом случае - попробуйте написать сами :) Полученый в результате опыт ничего, кроме пользы, imho, не принесет при любом результате. Полученые знания со временем окупятся...
 

kSalex

Новичок
Читать я умею:
Также заметьте, что использование zlib.output_compression предпочтительней ob_gzhandler().
 

SiMM

Новичок
kSalex, и? И где тут колёса?

> zlib.output_compression вызывается самим Appach'ем
Не уверен ;) Хотя хронологически - да, после отработки скрипта.
 

kSalex

Новичок
ksnk - вот теперь я во всём разобрался, в мане о том что Вы написали я не видел.

Ну и сам конечно написал всё это дело своими ф-ями.

Спасибо ksnk, SiMM
ksnk Я не зануда ;)
 

ksnk

прохожий
SiMM
Э... хмм... да! насчет Аппача я погорячился :) но по сути - так оно и есть...
kSalex
:)
>Ну и сам конечно написал всё это дело своими ф-ями.
Это как это?
 

ksnk

прохожий
В статье идет речь про Apache 1.x.x и, боюсь что, PHP версии < 4.0.5. Там просто не было ob_gzhandler
 

kSalex

Новичок
да, так и есть apache у меня 1.3.33 ну а php конечно более чем 4.0.5
А мне вот понадобиться отношение сжатого/не сжатого (в байтах) вывода, как тогда токое сделать ?

ob_get_contents() при использовании ob_gzhandler содержимое буфера получить не удасться

Вот написал чтоб протестить:
PHP:
ob_start("ob_gzhandler");

$page = ob_get_contents();
$fp = @fopen(basename($_SERVER['SCRIPT_FILENAME']).'.ugz', "w");
@fwrite($fp, $page);
@fclose($fp);

$page = gzencode($page);
$fp = @fopen(basename($_SERVER['SCRIPT_FILENAME']).'.gz', "w");
@fwrite($fp, $page);
@fclose($fp);

print 'Privet';
При этом длина файла всегда будет 0
 

Vladson

Сильнобухер
Ув. kSalex, ksnk и другие, о чём вы говорите, какие оптимизации какая жратва памяти, ob_gzhandler это не более чем
(примерно)
PHP:
<?php
if (false !== strpos($_SERVER["HTTP_ACCEPT_ENCODING"], "gzip"))
{
	header('Content-encoding: gzip');
	$gzip = gzencode($html, 9);
	return $gzip;
}
else
{
	return $html;
}
?>
И написать ему замену очень даже можно (например добавить отправку ряда заголовков "Content-Length" итд) другое дело всегда ли это нужно вот вопрос...
 

kSalex

Новичок
Vladson- так я и делал используя свои ф-ии.
Ну тогда нафига мне писать свои ф-ии, если есть прекрасная ob_gzhandler и работает она прекрасно.

Вопрос уже в том как получить соотношение сжатой/не сжатой страницы используя ob_gzhandler
 

ksnk

прохожий
Проверить выигрыш можно, к примеру так
PHP:
<?php
function myfunc($s,$n)
{
  global   $full_length ;
  error_log('we got a - '.strlen($s)." instead ".$full_length);
  return $s;
}
ob_start("myfunc");
ob_start("ob_gzhandler");
echo str_repeat("Hello world!!!<br>",1000);
$full_length=ob_get_length();
?>
единственная проблема, что после того, как gzhandler отработал, ничего говорить броузеру уже нельзя, так что вывод о выигрыше направляется в error_log...
 

Vladson

Сильнобухер
kSalex
Ну тогда нафига мне писать свои ф-ии, если есть прекрасная ob_gzhandler и работает она прекрасно.
Этот вопрос пожалуй надо задавать не мне а тебе....

ksnk
Cтепень сжатия зависит от настройки в php.ini и её так же легко можно регулировать как и свою собственную вункцию, по этому ни о каком выигрыше в зжатии речи быть не может...
 

kSalex

Новичок
Автор оригинала: Vladson
kSalex
Cтепень сжатия зависит от настройки в php.ini и её так же легко можно регулировать как и свою собственную вункцию,
- это понятно gzencode($data, $level='[0-9]');

по этому ни о каком выигрыше в зжатии речи быть не может...
- а это непонятно. Выйгрыш в сжатии будет однозначно, если конечно не одни картинки на странице
 
Сверху