Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Продвижение и оптимизация сайтов > Методы GZIP


Автор: Beos 2.1.2008, 11:43
Интересная тема для обсуждений. Я знаю 3 способа преобразования HTML в GZIP на лету...

1) Самый простой вроде... PHP.INI -> zlib.output_compression = On

2) Второе место по сложности...  smile 

<?
ob_start("ob_gzhandler", <уровень сжатия>);
?>
... HTML ...

3) Мы конечно же не ищем лёгких путей... я почему то выбрал именно этот (из за гибкости настройки и вобще, нравится когда вижу код)

Код

<?
 include('gzdoc.php'); 
?>
<HTML>
... the page ...
</HTML>
<?
 gzdocout(); 
?>

gzdoc.php

<?
ob_start(); 
ob_implicit_flush(0); 
function CheckCanGzip(){
    global $HTTP_ACCEPT_ENCODING; 
    if (headers_sent() || connection_aborted()){
        return 0; 
    }
    if (strpos($HTTP_ACCEPT_ENCODING,  'x-gzip') !== false) return "x-gzip"; 
    if (strpos($HTTP_ACCEPT_ENCODING, 'gzip') !== false) return "gzip"; 
    return 0; 
}
/* $level = compression level 0-9,  0=none,  9=max */
function GzDocOut($level=3, $debug=0){
    $ENCODING = CheckCanGzip(); 
    if ($ENCODING){
        print "\n<!-- Use compress $ENCODING -->\n"; 
        $Contents = ob_get_contents(); 
        ob_end_clean(); 
        if ($debug){
            $s = "<center><font style='color:#C0C0C0;
                  font-size:9px; font-family:tahoma'>Not compress
                  length: ".strlen($Contents).";  "; 
            $s .= "Compressed length: ".
                   strlen(gzcompress($Contents, $level)).
                   "</font></center>"; 
            $Contents .= $s; 
        }
        header("Content-Encoding: $ENCODING"); 
        print "\x1f\x8b\x08\x00\x00\x00\x00\x00"; 
        $Size = strlen($Contents); 
        $Crc = crc32($Contents); 
        $Contents = gzcompress($Contents, $level); 
        $Contents = substr($Contents,  0,  strlen($Contents) - 4); 
        print $Contents; 
        print pack('V', $Crc); 
        print pack('V', $Size); 
        exit; 
    }else{
        ob_end_flush(); 
        exit; 
    }
}
?>



Так какой де метод лучше? Какие + и - у этих методов? Что выбрать?

Автор: Str!pe 5.1.2008, 15:05
Beos, Это конечно все интересно только зачем сжатие нужно? Растолкуй подробнее плиз.

Автор: Beos 8.1.2008, 12:52
Все что я хочу узнать: Так какой же метод лучше? Какие + и - у этих методов? Что выбрать?

Автор: Beos 9.1.2008, 17:58
брр... неужели в этот раздел никто не заходит  smile 

Автор: Sunvas 9.1.2008, 23:36
Я у себя на сайте пользуюсь третим методом. Он наиболее хорошо подходит для универсальных нужд сайта. Вначале генерации страницы вызвали одну процедуру, после генерации - вторую. При это можно делать echo сколько угодно раз (это особенно полезно, если для управления сайтом используется какая-либо CMS). Ну а после генерации страницы вызываем вторую процедуру и все прекрасно передается пользователю.

Автор: Beos 10.1.2008, 07:11
На счет 2 и 3 я понял. Мне очень интересно узнать про первый способ.

По идеи первый способ все это делает автоматически. Архивирует ли он картинки все автоматом? Чем он отличается от 3 способа?

З.Ы. Удивляюсь насколько это оказывается не актуальная тема. Почему всем это по барабану интересно...

Автор: Alex13 10.1.2008, 09:18
Beos, 
http://ru2.php.net/manual/ru/ref.zlib.php#ini.zlib.output-compression
Судя по тому, что это все настройки php, то сжиматься будет только то, что обрабатывается php интерпретатором.

Автор: Beos 14.1.2008, 10:16
Очень логично smile 

Вроде все ясно, значит по сути все методы это одно и то же...

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