|
gzip сжатие
|
| Автор |
Сообщение |
Wink $a ||= 5;


Зарегистрирован: 08.08.2006 Сообщения: 899 Откуда: Россия, Омск 113191 
|
Добавлено: Чт, 10 Авг, 2006 03:40 Заголовок сообщения: gzip сжатие |
|
|
| У меня сайт состоит из статических html страничек. Можно ли отдавать их клиенту сжатыми, если его браузер поддерживает gzip-сжатие трафика? Если можно, то как такое сжатие включить? |
|
| Вернуться к началу |
|
 |
eomysupport Администратор

Зарегистрирован: 25.12.2005 Сообщения: 3928
205212 
|
|
| Вернуться к началу |
|
 |
Wink $a ||= 5;


Зарегистрирован: 08.08.2006 Сообщения: 899 Откуда: Россия, Омск 113191 
|
Добавлено: Чт, 10 Авг, 2006 14:23 Заголовок сообщения: |
|
|
Спасибо, я разобрался уже. Достаточно добавить в .htaccess строки
| Код: | AddHandler application/x-httpd-php .html
php_flag zlib.output_compression On |
Первая передает html на обработку в PHP, вторая включает сжатие данных сервером.
Результат можно посмотреть здесь |
|
| Вернуться к началу |
|
 |
eomysupport Администратор

Зарегистрирован: 25.12.2005 Сообщения: 3928
205212 
|
|
| Вернуться к началу |
|
 |
Moon-Link Интернет на завтрак


Зарегистрирован: 28.09.2006 Сообщения: 66 Откуда: localhost 2320 
|
Добавлено: Вс, 12 Ноя, 2006 04:49 Заголовок сообщения: |
|
|
Приведу еще один способ сжатия страниц методом gzip.
Первая часть кода:
| Цитата: |
if (strpos(' ' . $_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') !== false) {
$site_gzipper_encoding = 'x-gzip';
}
if (strpos(' ' . $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) {
$site_gzipper_encoding = 'gzip';
}
if (isset($site_gzipper_encoding)) {
ob_start();
}
list($msec,$sec)=explode(chr(32),microtime());
$headtime=$sec+$msec;
|
Она должна находится в самом верху скрипта. В стандартных CMS ее легко добавить в файл хеадера. В этой части скрипта идет проверка на то, поддерживает ли брауз гзип и засекается время. А также начинается самый главный процесс, что-то наподобие буферизации.
Вторая часть:
| Цитата: |
if (isset($site_gzipper_encoding)) {
$site_gzipper_in = ob_get_contents();
$site_gzipper_inlenn = strlen($site_gzipper_in);
$site_gzipper_out = gzencode($site_gzipper_in, 2);
$site_gzipper_lenn = strlen($site_gzipper_out);
$pcs_of_total = $site_gzipper_inlenn / 100;
$percent = ceil ($site_gzipper_lenn / $pcs_of_total);
$percent = 100 - $percent;
ob_clean();
list($msec,$sec)=explode(chr(32),microtime());
$site_gzipper_in = str_replace('<!-- site gzipper -->', 'Original size:'.ceil(strlen($site_gzipper_in)/1024).' kb<br>GZipped size: '.ceil($site_gzipper_lenn/1024).' kb<br>Сompression:'.$percent.'%<br>Time: '.round(($sec+$msec)-$headtime,4).' sec.</span>', $site_gzipper_in);
$site_gzipper_out = gzencode($site_gzipper_in, 2);
header('Content-Encoding: '.$site_gzipper_encoding);
echo $site_gzipper_out;
}; |
Эта часть должна находится в самом низу скрипта. Ее нужно вставлять в файл футера. Она сжимает содержимое "буфера" и выдает пользователю.
Для вывода блока статистики типа
| Цитата: | Original size:13 kb
GZipped size: 3 kb
Сompression:80%
Time: 0.0092 sec. |
Достаточно вставить в любое удобное место строчку
| Цитата: | | <!-- site gzipper --> |
Сам скрипт разработан умельцем с ником smallcms. |
|
| Вернуться к началу |
|
 |
Wink $a ||= 5;


Зарегистрирован: 08.08.2006 Сообщения: 899 Откуда: Россия, Омск 113191 
|
Добавлено: Вс, 12 Ноя, 2006 07:51 Заголовок сообщения: |
|
|
Весь этот скрипт легко заменяется одной единственной строкой | Код: | | ob_start("ob_gzhandler"); | добавленной в самое начало кода (до вывода html). Посетителям сайта обычно не интересна статистика сжатия, а веб-мастер может посмотреть ее в любом онлайн-тестере gzip. |
|
| Вернуться к началу |
|
 |
Moon-Link Интернет на завтрак


Зарегистрирован: 28.09.2006 Сообщения: 66 Откуда: localhost 2320 
|
Добавлено: Вс, 12 Ноя, 2006 07:55 Заголовок сообщения: |
|
|
| Повторюсь. Вы впредлагаете сразу же сжимать, в приведенном мной коде так же проводится проверка на то, поддерживает ли это брауз или нет. К примеруя часто захожу через мобилу, и если там используется гзип без проверки - я получу совершенную несуразицу. А насчет статистики - она может интересна быть не только мастерам, но и посетителям, которые заботятся о траффике, то есть они будут без боязни потратить его, лазить по вашему сайту. |
|
| Вернуться к началу |
|
 |
Wink $a ||= 5;


Зарегистрирован: 08.08.2006 Сообщения: 899 Откуда: Россия, Омск 113191 
|
Добавлено: Вс, 12 Ноя, 2006 08:58 Заголовок сообщения: |
|
|
Moon-Link, насколько я знаю, такая проверка осуществляется сервером автоматически. И если браузер не отдаёт строку | Код: | | Accept-Encoding: gzip,deflate | то страница отдаётся сервером не сжатой. Проверено много раз в разных операционках и браузерах. Кстати, приведённый мной способ работает в частности у меня на сайте. Попробуйте зайти через мобилу или как захотите и посмотрите. |
|
| Вернуться к началу |
|
 |
Wink $a ||= 5;


Зарегистрирован: 08.08.2006 Сообщения: 899 Откуда: Россия, Омск 113191 
|
|
| Вернуться к началу |
|
 |
|