Обновлено 24.11.2018г. 06:54 (UTC+3)

Как настроить и проверить сжатие сайта. Основные алгоритмы веб-компрессии

Основным фактором является объем передаваемых данных. То есть, ускорить сайт – означает добиться меньшего объема передаваемых данных, сохранив при этом общий объем информации на страницах и их высокое качество. Знать методы, позволяющие реализовать эти меры, крайне важно для любого вебмастера. Поэтому сегодня мы рассмотрим, что такое сжатие в Интернете, зачем оно необходимо и как правильно архивировать данные на сайте.

Виды алгоритмов сжатия данных

Их очень много, но для удобства разделим их на три большие группы:

  1. Поточные. Это алгоритмы семейств run-length encoding, LZ* и прочие. В процессе сжатия данных применяется информация о последовательностях, которые встречались ранее. Такой принцип – у gzip, bzip и compress.
  2. Энтропийного или статистического сжатия. В этой группе алгоритмов арифметического и префиксного кодирования происходит сжатие данных с использованием частот, с которыми встречаются в сообщениях разные символы. Пример – алгоритм brotli, работающий по принципу кодирования Хаффмана вместе с алгоритмами LZ.
  3. Разностные. Это отдельная категория алгоритмов преобразования данных. В большинстве случаев они непосредственно не сжимают информацию, но с их помощью гораздо проще применять предыдущие две группы алгоритмов. Пример -алгоритм VCDIFF, использующий разностное кодирование и словари.


Использование поточных алгоритмов

Run-length encoding (RLE) – самый распространенный и простой алгоритм сжатия информации. В нем последовательно повторяющиеся символы заменяются одним символом, указывающим на нужное количество повторов.

К примеру, есть строка АААААА, для хранения которой нужно 6 байт (по байту на символ). Принцип сжатия сводится к тому, что мы употребляем 6А, благодаря чему занимаем только 2 байта и экономим 4 байта памяти. Если количество повторов в исходном коде сайта большое, эффективность алгоритма будет крайне высокой.

Но при этом у алгоритма есть недостаток. Он практически неэффективен при последовательностях символов, которые не повторяются. К примеру, есть последовательность БВБВБВ, занимающая 6 байт. Применение алгоритма приведет к такой последовательности 1Б1В1Б1В1Б1В на целых 12 байт. Но решить эту проблему можно – для этого предусмотрено несколько методик.

Группа алгоритмов LZ (по фамилиям разработчиков Лемпэла и Зива) направлена на сжатие встречавшихся ранее последовательностей символов. В процессе применения алгоритмов разрабатывается динамическая таблица (словарь), в которой есть список встречавшихся последовательностей и их закодированных значений. Эффективность сжатия при этом намного выше, чем у RLE-алгоритмов.

Gzip – самая известная и эффективная реализация описанного выше принципа сжатия. Ранее в Интернете использовали два подхода к сжатию gzip, а также deflate. Они отличались тем, что gzip отправлял начало потока данных с указанием, что эти данные gzip-сжатые, а deflate не отправлял. Процесс gzip оказался проще, поэтому было решено поддерживать повсеместно только его.

Правильная настройка gzip на интернет-сайте

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

Директивы для включения gzip-архивирования для nginx:

С помощью директивы gzip_vary можно передавать заголовки на кэширующий прокси, указывая характеристики кеширования архивированных сайтов. Директива gzip_types указывает, к каким типа файлов нежно применять архивирование на сервере.

Особенности статической компрессии nginx

Чтобы сэкономить ресурсы процессора, можно пользоваться заранее сжатыми с помощью алгоритмов gzip файлами, у которых есть дополнительное расширение .gz (для примера, main.css.gz – это архив для main.css). Для таких файлов можно использовать максимальный уровень сжатия – они архивируются один раз, а далее сервер будет пользоваться сокращенной версией при взаимодействии с пользователями, поддерживающими сжатие.

Чтобы подключить статическое архивирование в nginx, нужно обеспечить поддержку gzip_static. Для этого нужно убедиться, что в конфигурации директива прописана следующим образом: gzip_static on;

Архивирование в Apache

С помощью модуля mod_deflate обеспечивается отгрузка архивированных версий файлов. Если модуль имеется на сервере, его включают следующим образом:

Особенности сжатия в IIS

В диспетчере служб IIS нужно зайти в свойства «Веб-узлы» и далее перейти в «Службы». Компрессию также включают с помощью web.config, используя такую конфигурацию:

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

Проверить gzip-компрессию можно с помощью бесплатного онлайн-сервиса https://checkgzipcompression.com/.

Альтернативным инструментом является ресурс https://www.websiteplanet.com/ru/webtools/gzip-compression/  Он может выручить в моменты, когда другие недоступны (спасибо Estefany ;).

Для общей проверки скорости сайта также можно использовать Google PageSpeed Insights. Если сжатие на ресурсе отсутствует, в уведомлении будет перечислен список файлов, где нет сжатия.

Общие итоги

  1. Gzip – наиболее распространенный метод сокращения объемов передаваемых в Интернете данных, поддерживаемый подавляющим большинством серверов и браузеров.
  2. Чтобы включить сжатие на веб-ресурсе, не нужно быть гением: достаточно дополнить конфигурацию несколькими типовыми инструкциями, содержание которых зависит от сервера.
  3. В зависимости от ресурсов процессора, оптимальная степень компрессии составляет 5-7.
  4. Чтобы убедиться, настроено ли сжатие, можно воспользоваться бесплатным онлайн-сервисом. Контроль занимает меньше минуты.

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