Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #78, ИЮНЬ 2005 г.

Тюним веб-страницу

Степан Ильин aka Step

Хакер, номер #078, стр. 078-018-2


zend_extension = /путь/к/php_accelerator_1.3.3.so> (в моем примере — /usr/local/lib). Все остальные опции несущественны, поэтому разработчики рекомендуют оставлять их по умолчанию.

Теперь, чтобы акселератор начал свою работу, остается только перезапустить Apache.

[упаковка на лету]

Даже маленький ребенок знает, что такое архиватор и почему упакованные файлы весят значительно меньше, чем неупакованные. Более продвинутый пользователь прекрасно осознает, что текстовые файлы сжимаются лучше и быстрее, нежели, к примеру, MP3’шки, которые уже сжаты по другой технологии. Понимаешь, к чему я клоню? Почему бы тогда не сжимать веб-сайты, ведь большая часть их содержимого представляет собой обычный plain text, а значит, может быть эффективно сжата? Благодаря архивированию, пользователь не только быстрее получит необходимую информацию, но еще и сэкономит дорогостоящий трафик.

Большинство сайтов действительно передаются посетителю без какой-либо компрессии. Однако они с не меньшим успехом могут быть отданы и в сжатом виде. Такие страницы имеют в свом заголовке атрибут gz-encoded, который уведомляет браузер о том, что передача может осуществляться в виде архива. Попробуем этим воспользоваться.

Возможности использования компрессии поддерживает язык PHP. Честь и хвала разработчикам, которые включили все необходимые для него функции по умолчанию. Чтобы производить компрессию на лету, нужно постоянно буферизировать передаваемые с сервера данные. Если окажется, что браузер пользователя может принимать упакованную информацию, то буфер сжимается и в таком виде передается пользователю. В противном случае данные отдаются как есть.

Браузер очень просто сообщает о своей готовности принимать сжатые данные: для этого в своем запросе он передает специальный флаг gz-encoded. Сервер, в свою очередь, также должен подтвердить свою готовность к работе со сжатыми данными, возвратив флаг gz-encoded обратно.

На практике это реализуется следующим образом. Первым делом необходимо создать два вспомогательных файла. Первый — begin_gzip.php — указывает транслятору PHP необходимость буферизации и получения на выходе gz-сжатых данных:

<?php

ob_start("ob_gzhandler");

?>

Второй файл — end_gzip.php — отдает команду на передачу содержимого буфера пользователю:

<?php

ob_flush();

?>

Поместив эти два файла в одну из папок веб-сервера, можно считать подготовительный этап законченным. Теперь необходимо подключить эти файлы в каждый PHP-скрипт, используя функцию include. Иными словами, в начало каждого файла нужно добавить include("/путь/к/файлу/begin_gzip.php"), а в конец — include("/путь/к/файлу/end_gzip.php"). Готово!

Понятно, что в случае, когда сайт состоит из огромного количества PHP-сценариев, подобное действие выполнить будет очень сложно. Поэтому, чтобы избавиться от лишней возни, рекомендую тебе поступить по-другому. Ты уже наверняка знаком с изумительными возможностями конфигурирования каталогов веб-сервера с помощью файлов .htaccess. Так вот, пришло время познакомить тебя с еще парой необычных директив, которые многие почему-то обходят стороной. Речь идет о директивах php_value auto_prepend_file (подключить в начале) и php_value auto_append_file (подключить в конце). Каждая из них позволяет приконнектить дополнительные сценарии разом ко всем PHP-скриптам без необходимости вручную использовать функции include() или require(). Достаточно добавить в .htaccess (предварительно создав его, если он отсутствует) две следующие строчки:

Назад на стр. 078-018-1  Содержание  Вперед на стр. 078-018-3