Сжатие gzip: принцип работы.

SilverMaster
На сайте с 08.10.2003
Offline
228
1045

Уважаемые, помогите понять принцип работы самой схемы.

К примеру, имеем HTML размером 100кб.

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

НО... в несжатом HTML ссылка на тот же CSS находится в самом верху документа, и, соответственно

если документ грузиться в несжатом виде, то браузер получается начинает качать CSS практически одновременно с HTML.

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

Я правильно понимаю?

Из детских комшаров: "А вдруг ночью придет страшный робот!" Из взрослых: "И криво проиндексирует сайт". Не всякий гик добежит до середины поисковой страницы гугла
S
На сайте с 28.10.2005
Offline
296
#1

Щас проверил, сразу распаковка идет по ходу:

Отдавал маленький Content-Length для сжатой страницы - открылся кусок нормально

N
На сайте с 06.05.2007
Offline
419
#2

semenov, это не правильно - фактически клиент думает что он уже все скачал получив маленький content-lenght.

Вообще, интересный вопрос. Каким именно образом жмете вы?

У меня тут получается, что включение gzip средствами php хотя и вызывает насильную буферизацию, но при достаточно больших файлах и мусоре из /dev/urandom, буфер переполняется. Я не знаю где этот буфер задается. Похоже, что только при компиляции php.


<?php
ini_set('zlib.output_compression','On');
ini_set('zlib.output_compression_level','1');
ini_set('output_buffering','Off');
print file_get_contents('trash');
flush();
sleep(10);
print file_get_contents('trash');
flush();
sleep(10);
print file_get_contents('trash');
flush();
sleep(10);
?>

Файл с мусором trash нужно нагенерить отдельно : dd if=/dev/urandom of=trash count=1000

Чтобы заметить как сжатый контент выдается порциями нужен сниффер.

Я так подозреваю, что если жать программно, как делают некоторые CMS через ob_start/ob_getcontent,gzip, то будет лучше.

Кнопка вызова админа ()

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий