Что такое gzip? — инструмент сжатия данных в центре внимания

Инструмент сжатия данных gzip был разработан Жаном-Лупом Гайли и Марком Адлером, перед которыми стояла задача разработать мощную альтернативу написанной под Unix программе compress. Ее функции и поведение определены в стандарте POSIX, который позволяет сжимать файлы с помощью адаптивного алгоритма Лемпеля-Зива. Однако этот алгоритм, а также его расширение Терри Уэлчем, был защищен патентами США в течение многих лет (до 2013 года), что стало одной из причин для работы над адекватной заменой. Кроме того, основное внимание уделялось тому, чтобы сделать сжатие gzip гораздо более эффективным, чем инструмент Unix — и это увенчалось успехом.

Как работает gzip?

Gzip — это аббревиатура от ‘GNU zip’ и основан на свободно используемом алгоритме deflate, который является вариацией метода декомпрессии данных LZ77 (Lemprl-Ziv 77), а также на кодировании Хаффмана. Используя эти методы, файлы gzip сканируют на наличие дублирующихся строк данных. Если программа встречает такие повторяющиеся последовательности, она заменяет их ссылкой на ту строку, которая появилась первой. Длина таких последовательностей обычно ограничена 32 000 байтами. Если символьная строка не появляется в предыдущих 32 000 байт, она сохраняется (без сжатия) в gzip-файле, который получает окончание .gz. Эта процедура ограничена отдельными файлами, поэтому для создания так называемых архивов tarball с окончаниями .tar, .gz и .tgz требуется программа-упаковщик tar.

Совет

По умолчанию исходный файл удаляется после сжатия gzip. Однако вы можете отключить эту автоматическую функцию с помощью дополнительного параметра (-k).

Для распаковки сжатых пакетов можно использовать либо приложение gunzip, либо соответствующую команду gzip. Свойства и структура формата gzip, в который преобразуются файлы при сжатии, описаны в спецификациях 1951 и 1952 RFC. Сюда входят, например, 10-байтовый заголовок с номером версии и меткой времени, необязательные дополнительные заголовки, в которых хранится оригинальное имя исходного файла, и 8-байтовый нижний колонтитул, содержащий, помимо прочего, контрольную сумму для обнаружения ошибок.

Когда используется инструмент сжатия?

Gzip был первоначально разработан для UNIXoid платформы GNU, но сейчас используется практически на всех платформах, если учитывать лицензию GPL, выбранную для проекта. Например, в системах Linux инструмент сжатия обычно устанавливается автоматически или, как вариант, содержится в управлении пакетами и готов к установке. Помимо различных версий для старых операционных систем, на официальном сайте есть версии для macOS и Windows. К этому следует добавить тот факт, что веб-серверные приложения, такие как Apache, уже давно освоили сжатие gzip — даже если эта функция не всегда используется — а также способность современных браузеров интерпретировать сжатые файлы и распаковывать их во время рендеринга веб-страниц.

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

gzip: синтаксис и обзор команд

Даже если для разных платформ существуют графические интерфейсы, работа gzip через терминал или запрос на ввод, разумеется, легко осуществима. Для новичков это не составит большого труда, поскольку gzip оптимизирован для этих целей как классический инструмент командной строки. Общий синтаксис имеет следующий вид:

gzip [OPTION]…[FILE]…

Указание опций ни в коем случае не является обязательным. Если поле остается пустым, gzip просто возвращается к настройкам по умолчанию. Например, достаточно этой простой команды:

gzip example.txt

для создания сжатой версии текстового файла example.txt. Однако для последующей распаковки файлов или для предоставления конкретных инструкций по степени сжатия, расположению файла или работе с исходным файлом командам требуются соответствующие спецификации. В следующей таблице представлен обзор наиболее важных команд gzip:

Опция Описание
-1 … -9 Определяет степень сжатия (1-9), где 1 — самое слабое и быстрое сжатие, а 9 — самое лучшее, но медленное сжатие; значение по умолчанию равно 5
-r Рекурсивно ищет каталог (включая все подкаталоги) и сжимает или распаковывает все содержащиеся в нем файлы.
-f Принудительное сжатие gzip и перезапись уже существующих файлов с тем же именем файла, если необходимо
-d Распаковывает выбранный файл в текущий каталог
-k Предотвращает удаление исходного файла
-l Раскрывает информацию, например, степень сжатия упакованного файла
-c Выдает сжатый файл в стандартный вывод; обычно это экран, подключенный к командной строке
-q Отключает все уведомления о gzip
-t Проверяет целостность упакованного файла
-h Перечисляет все доступные опции

Как использовать сжатие gzip для вашего веб-проекта Apache

Веб-серверы обычно предлагают практический процесс сжатия в виде модуля, который также необходимо активировать. В настоящее время многие провайдеры веб-хостинга совместно используют эту функцию, но в прошлом это было не так. Причина, вероятно, заключалась в том, что процесс сжатия требовал дополнительной мощности процессора. Если вы не уверены, разрешен ли gzip вашим хостером, вы можете либо связаться с ним напрямую, либо сделать запрос вручную. Например, на веб-сервере Apache проверьте настройки модуля с помощью простого вывода phpinfo(). Запись HTTP_ACCEPT_ENCODING сообщает вам, какой метод сжатия выбран.

Если доступен gzip, у вас есть несколько вариантов использования помощника сжатия для любых целей.

Активация сжатия Gzip в файле .htaccess

Вы можете использовать файл .htaccess для выполнения специфических для каталога настроек (они применяются к текущему каталогу и всем подкаталогам) и конфигурирования вашего веб-сервера в режиме реального времени. Это позволяет автоматически считывать конфигурационный файл, который обычно находится в корневом каталоге, при каждом запросе, поступающем на сервер. Однако у некоторых провайдеров веб-хостинга файл .htaccess хранится в другой папке, скрыт или даже заблокирован от доступа. В этом случае единственный выход — связаться с хостером и попросить доступ. Если вы можете выполнить конфигурацию, включите сжатие gzip (mod_gzip) или алгоритм deflate (mod_deflate), добавив следующий код в файл .htaccess:

<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>
Совет

Вам необходимо разрешить доступ к модулям mod_gzip и mod_deflate, что вы можете сделать через своего хостера.

Включение gzip-сжатия через PHP

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

<?php
ob_start("ob_gzhandler");
?>

Реализовать gzip с помощью плагина CMS

Помимо этих двух ручных решений, существует также вариант, требующий минимальных усилий для настройки: активация сжатия gzip с помощью плагина для используемой вами системы управления контентом. Такие полезные расширения, которые можно встроить за несколько минут и адаптировать под свои нужды, предназначены в основном для CMS типа WordPress, основанных на PHP. В следующем списке представлены три самых популярных плагина для программного обеспечения для веб-блога:

  • W3 Total Cache: WordPress-плагин W3 TotalCache обещает повысить производительность сайта в десять раз. В дополнение к различным механизмам кэширования и специальной поддержке мобильных устройств, пакет для SEO и юзабилити также включает опции для активации сжатия gzip.
  • Проверьте и включите GZIP-сжатие: Это расширение, которое также было разработано для CMS WordPress, позволяет проверить, включено ли сжатие gzip для вашего проекта. Для этого плагин полагается на онлайн-сервис checkgzipcompression.com. Если сжатие отключено, этот плагин поможет вам с настройкой.
  • WP Performance Score Booster: Более 150 000 загрузок и 30 000 активных установок можно найти в расширении WP Performance Score Booster. Используя плагин, вы можете легко активировать gzip и эффективно сжимать содержимое вашего веб-проекта, такое как текст, HTML, JavaScript, CSS, XML и многое другое.

Для других систем, таких как Joomla!, расширение даже не нужно. Здесь функции для активации методов сжатия уже включены в стандартную поставку.

Как активировать gzip на веб-сервере NGINX

Когда вы предоставляете содержимое своего сайта с помощью веб-сервера NGINX, у вас есть возможность также использовать процесс gzip для улучшения времени загрузки вашего проекта. Для этого достаточно настроить модуль ngx_http_gzip_module. По умолчанию директива ‘gzip’, используемая для активации или деактивации службы сжатия, выключена. Чтобы изменить эту настройку, откройте nginx.conf и найдите директиву ‘gzip’. Затем просто измените ‘gzip off’ на ‘gzip on’. В следующей таблице показаны значение и возможности других директив для настройки gzip-сжатия NGINX:

Директива Синтаксис Стандартная настройка Описание
gzip_buffers gzip_buffers — количество и размер; gzip_buffers 32 4k, 16 8k; Определяет количество и размер буферов для процесса сжатия.
gzip_comp_level gzip_comp_level — степень сжатия; gzip_comp_level 1; Определяет степень сжатия; возможные значения: 1-9
gzip_min_length gzip_min_length — минимальная длина; gzip_min_length 20; Определяет минимальную длину файла пакетов в байтах
gzip_http_version gzip_http_version — номер версии; gzip_http_version 1.1; Определяет версию HTTP, начиная с которой на запрос должен быть получен сжатый ответ.
gzip_types gzip_types — тип содержимого; gzip_types text/html; Регулирует, к каким типам содержимого должно применяться сжатие (также возможно: CSS, JSON, XML, …).

Как вы можете протестировать сжатие

Если вы настроили сжатие gzip для своего веб-присутствия, вы можете использовать различные онлайн-инструменты для настройки процесса по своему вкусу, чтобы ваш веб-сервер предоставлял сжатое содержимое по вашему запросу. Прежде всего, мы рекомендуем приложение Google PageSpeed Insights. После ввода одной из страниц вашего сайта в поле поиска инструмент автоматически проанализирует содержимое, а затем сообщит вам о сильных и слабых сторонах производительности вашего сайта. Вы получите информацию о том, включено ли сжатие gzip, а также сможете провести простой тест gzip с помощью HTTP Compression Test на WhatsMyIP.org.

Совет

Поскольку один тест не обязательно пройдет безупречно, рекомендуется всегда проверять несколько страниц вашего веб-проекта.

Оцените статью
cdelat.ru
Добавить комментарий