12.07.2015 Views

Реактивные веб-сайты Николай Мациевский Евгений ...

Реактивные веб-сайты Николай Мациевский Евгений ...

Реактивные веб-сайты Николай Мациевский Евгений ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

70РЕАКТИВНЫЕ ВЕБ-САЙТЫ// не забываем отдать длину сжатого потока,// это *очень* важно: некоторые браузеры не// обрабатывают сжатый поток без указания длиныheader('Content-length: ' . strlen($content));// …и метод его кодированияheader('Content-encoding: gzip');return $content;}}ob_start(array('mod_compress', 'handler'));// здесь вывод вашего скриптаКак видим, задача не такая уж и сложная. Точкой входа в класс являетсяметод handler, который мы передаем функции ob_start, — она и позаботитсяо том, чтобы весь дальнейший вывод попадал в нашу функцию.Так как класс устанавливает заголовки, нужно, чтобы вызов ob_start произошелв вашей программе как можно раньше, до любого вывода данныхв браузер.Класс также можно доделать, чтобы поддержать метод bzip2 (нужнопроверять вхождения «bzip2», «x-bzip» или «bzip»), если ответ не являетсяпроксируемым. Для сжатия bzip2 в PHP есть одноименный модуль. Еготакже можно улучшить: заменить проверку наличия в заголовке gzip исжатие на вызов ob_gzhandler, но мы этого делать не стали намеренно —чтобы продемонстрировать, как это делается, если читатель захочет портироватькод на другой язык.Алгоритм работы класса следующий:❚ проверяется длина поступивших данных, если она не укладываетсяв ограничения, указанные в настройках, то сжатия не происходити браузеру отдается оригинальный контент;❚ проверяется — поддерживает ли браузер gzip, если нет, отдаетсяоригинальный контент;❚ далее идет проверка, является ли сжимаемый контент одним изтекстовых типов, если нет, то он не будет сжат;❚ также контент не сжимается, если используется Internet Explorerверсии, меньшей, чем 6.0 Service Pack 2, или если файл CSS илиJavaScript запрашивается браузером, который не умеет корректнообрабатывать сжатые файлы этих типов;❚ если все в порядке, выставляется заголовок, указывающий, как правильнокэшировать такое содержимое и, если запрос проксируемый,

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!