20 янв. 2017 г.

Методы сжатия данных в Сети: gzip

Рассылка SearchEngines.ru Неправильно отображается?
Посмотреть в браузере.
20 января

2017 года

СЕГОДНЯ В ВЫПУСКЕ

Подписаться на Twitter     Подружиться на Facebook      Группа ВКонтакте

Отправить другу

Методы сжатия данных в Сети: gzip

 

Автор: Николай Мациевский, технический директор облачного сервиса Айри.рф, продукта компании WEBO Group

Размер передаваемых данных является основным фактором, влияющим на «тяжесть» сайта, на его время загрузки. Все меры, обеспечивающее меньший объем передаваемых данных при сохранении объема информации или качества сайта, являются наиболее приоритетными при ускорении сайта. А методики, которые могут позволить такие меры применять, ценятся на вес золота. Сегодня мы разберемся, зачем нужно сжатие (или архивирование) данных на сайтах и как его правильно настроить.

На текущий момент существует большое количество алгоритмов сжатия (архивирования) данных, которые можно разделить на три основные группы:

1. Поточные алгоритмы. К этой группе относятся алгоритмы семейств RLE (run-length encoding), LZ* и др. При кодировании данных используется не информация о частотах символов в сообщении, а информация о последовательностях, встречавшихся ранее. Так работает, например, gzip (LZ77), bzip и compress.

2. Алгоритмы статистического (энтропийного) сжатия. Эта группа алгоритмов сжимает информацию, используя частоты, с которыми различные символы встречаются в сообщении. К алгоритмам этой группы относятся алгоритмы арифметического и префиксного кодирования (с использованием деревьев Шеннона-Фанно, Хаффмана, секущих). Алгоритм сжатия данных brotli использует, в том числе, кодирование Хаффмана совместно с LZ-алгоритмами.

3. Разностные алгоритмы. В отдельную группу можно выделить алгоритмы преобразования информации (включая использование словарей). Алгоритмы этой группы часто не производят непосредственного сжатия информации, но их применение значительно упрощает дальнейшее сжатие с использованием поточных и энтропийных алгоритмов. Алгоритм SDCH (VCDIFF) использует именно словари и разностное кодирование информации.

Поточные алгоритмы

 

Кодирование длин серий (RLE — Run-Length Encoding) — это один из самых простых и распространённых алгоритмов сжатия данных. В этом алгоритме последовательность повторяющихся символов заменяется символом и количеством его повторов.

Например, строку «ААААА», требующую для хранения 5 байт (при условии, что на хранение одного символа отводится байт), можно заменить на «5А», состоящую из двух байт. Очевидно, что этот алгоритм тем эффективнее, чем длиннее серия повторов и чем больше таких повторов в исходном (кодируемом) тексте.

Основным недостатком этого алгоритма является его крайне низкая эффективность на последовательностях неповторяющихся символов. Например, если рассмотреть последовательность «АБАБАБ» (6 байт), то после применения алгоритма RLE она превратится в «1А1Б1А1Б1А1Б» (12 байт). Для решения проблемы неповторяющихся символов существуют различные методы.

Алгоритмы LZ (название происходит от авторов Абрахама Лемпэла (Abraham Lempel) и Якоба Зива (Jacob Ziv)), в отличие от алгоритмов RLE, кодирует не количество повторов символов, а встречавшиеся ранее последовательности символов. Во время работы рассматриваемых алгоритмов динамически создаётся таблица со списком уже встречавшихся последовательностей и соответствующих им кодов. Эту таблицу часто называют словарём, а соответствующую группу алгоритмов называют поточно-словарными. К плюсам этой группы относится их большая, по сравнению, с RLE эффективность сжатия.

Наиболее известной реализацией этих алгоритмов является gzip-сжатие данных. Ранее различали два варианта использования в Сети: gzip и deflate. Единственное отличие между ними заключается в отправке (gzip) или не отправке (deflate) начала потока данных (файла), в котором описано, что это gzip-сжатые данные. Для упрощения работы gzip-сжатия (включая использование статического сжатия) от поддержки deflate сейчас почти везде отказались.

Как настроить gzip на сайте

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

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

Для nginx gzip-сжатие включается простыми директивами:

gzip on;
gzip_comp_level 7;
gzip_vary on;
gzip_types text/css text/javascript application/javascript;

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

Статическое сжатие nginx

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

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

Сжатие в Apache

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

<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css text/javascript application/javascript
DeflateCompressionLevel 7
</ifmodule>

Сжатие в IIS

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

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary> <Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
<dynamicTypes>
<add mimeType="text/*" enabled="true"/>
<add mimeType="*/*" enabled="false"/>
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true"/>
<add mimeType="*/*" enabled="false"/>
</staticTypes>
</httpCompression>

Проверка сжатия

Сжатие данных на сайте можно проверить большим количеством способов. Первый из них – простой тест на gzip . Второй – более общая проверка сайта на показатели скорости при помощи Google PageSpeed Insights. При отсутствия сжатия на сайте вы получите соответствующее уведомление (или список файлов, для которых сжатие не включено).

Выводы

1. Gzip-сжатие является самым распространенным способом сократить размер передаваемой в Сети информации и поддерживается почти всеми серверами и браузерами.
2. Включить сжатие на сайте очень просто: достаточно добавить в конфигурацию сайта несколько инструкций в зависимости от вашего веб-сервера.
3. Оптимальной степенью сжатия будет 5 или 7 (в зависимости от ваших процессорных ресурсов).
4. Проверить, использует ли ваш сайт сжатие, можно в течение минуты любым из указанных выше инструментов.

Директ вводит новый статус для групп объявлений — «Мало показов»

На следующей неделе в Яндекс.Директе группы объявлений с очень низким трафиком автоматически перейдут в новый статус «Мало показов». Группы с таким статусом приостанавливаются и не участвуют в аукционе на поиске и в сетях.

Статус «Мало показов» присваивается на основе свежей статистики запросов, пользовательских настроек и уже накопленных данных о показах и кликах по группе объявлений. Статус означает, что при текущих настройках группа показывается крайне редко или не показывается вообще. То есть формально активная реклама в реальности не отвечает интересам пользователей. Ее размещение временно блокируется, чтобы вы обратили внимание на слабые группы объявлений и могли провести ревизию настроек.

В интерфейсе появятся советы, как поменять настройки, чтобы группа вновь стала активной. При этом вносить изменения не обязательно — Яндекс.Директ сам вернет группу к показам, если пользователи начнут чаще искать хотя бы одно из ключевых слов в ней.

Самое интересное за неделю

AdWords напомнил о переходе на развёрнутые объявления с 31 января

Начиная с этой даты, рекламодатели больше не смогут создавать стандартные текстовые объявления.
 

В Google рассказали, что такое краулинговый бюджет

В компании объяснили, что понимается под этим термином, какие факторы влияют на краулинговый бюджет, что такое скорость сканирования и краулинговый спрос.
 

LinkedIn провела редизайн сайта

Этот шаг был призван привести десктопную версию сервиса в соответствие с мобильной и побудить пользователей проводить больше времени на платформе.
 

Мобильная аудитория Одноклассников увеличилась в 2016 году на 17%

В прошлом году Одноклассники так же поставили рекорд по проведенному времени на сайте (50 мин. в день), зафиксировали 3-х кратный рост видеотрансляций и рост количества гифок в 133 раза.
 

WSJ: Google продвигает собственные продукты в выдаче

Google покупает миллионы рекламных объявлений в AdWords и показывает свои продукты в топе выдачи по 91% релевантных запросов в США.
 

AdSense позволил показывать только самые эффективные объявления

Сделать это можно с помощью новой функции «Процент выполняемых запросов объявлений».
 

Общее число поисковых запросов к DuckDuckGo превысило 10 млрд

Из них 4 млрд было обработано только за последние 12 месяцев.
 

Рекламодатели myTarget получат доступ к аудиторным сегментам сторонних DMP

Рекламный сервис myTarget открывает регистрацию аккаунтов для провайдеров данных (DMP). Теперь они смогут предложить собственные аудиторные сегменты рекламодателям myTarget.
 

Минкомсвязи предложило уменьшить объем хранения данных по «закону Яровой»

Минкомсвязи может в десять раз снизить объемы информации, предназначенной для хранения в рамках «закона Яровой».

Мэтт Каттс ушёл из Google

Заслуженный разработчик и бывший глава команды по борьбе с веб-спамом Google Мэтт Каттс объявил о своём уходе из компании. По документам, последним его рабочим днём было 31 декабря 2016 года.

Новым местом работы Каттса стало подразделение Министерства обороны США Defense Digital Service, в котором он занял пост технического директора.

Подписаться на Twitter    Подружиться на Facebook    Отправить другу 
Copyright © 2017 Searchengines.ru,, All rights reserved.
Вы получили эту рассылку, поскольку регистрировались на сайте Searchengines.ru. Вы можете всегда отписаться от нее, переслать другу, а также обновить свой профиль подписчика.

Наш почтовый адрес:
Searchengines.ru, , Moscow, 65000, Russia
отписаться от этой рассылки    обновить настройки подписки 

Комментариев нет:

Отправить комментарий

«Проект небольшого дома» для пользователя Торговый Дом

Проект дома с мансардой 10x9 из газобетона (пеноблоков), c террасой, котельной и кухней-столовой + т     ...