Процент сжатия текстовой информации для всех файлов, как найти

Обновлено: 21.11.2024

Учащиеся используют виджет "Сжатие текста", чтобы поэкспериментировать со сжатием песен и стихов и попытаться найти для себя "лучшее личное" сжатие. Видео знакомит с важной лексикой для урока и демонстрирует все возможности виджета. Учащиеся выбирают текст, который, по их мнению, будет «легко» сжимать, и тот, который, по их мнению, будет «сложно», обращая внимание на то, почему некоторые тексты могут быть более сжимаемыми, чем другие. В завершение учащиеся обсуждают, какие факторы делают одни тексты более сжимаемыми, чем другие.

Цели

Студенты смогут:

  • Создавайте сжатие текстовых файлов без потерь
  • Анализ шаблонов данных для определения стратегии сжатия.

Цель

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

Ресурсы

Начало работы (5 минут)

Подсказка: в этом списке представлены несколько распространенных сокращений, используемых в текстовых сообщениях. Какие еще сокращения вы могли бы добавить в этот список?

Подсказка. Почему мы можем использовать сокращения при отправке сообщений? Каковы преимущества?

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

Активность (35 минут)

Введение в сжатие (5 минут)

Примечания

  • Я хочу отправить это сообщение другу:
  • Pitter_patter_pitter_patter_listen_to_the_rain_pitter_patter_pitter_patter_on_the_window_pane
  • Телефон моего друга может одновременно принимать не более 80 символов текста. Я заметил, что в этом шаблоне есть некоторое повторение, поэтому вместо того, чтобы отправлять все сообщение, я отправляю это:
  • 5listen_to1rain_5on1window_pane
  • 1 _the_
  • 2 лучше_
  • 3 Pi2
  • 4 Pi2
  • 5 3434

Подсказка: чем это сообщение отличается от первого? Что на самом деле отправляется моему другу?

Цель обсуждения

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

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

Примечания

  • Использование сокращений и символов — это форма сжатия, при которой мы пытаемся представить ту же информацию с меньшим количеством символов. Исходное сообщение состояло из 93 символов, но новое сообщение и ключ, также называемый словарем, содержат в общей сложности 56 символов. По сути, мы отправляем ту же информацию, но с меньшим количеством символов. Нашей целью сегодня будет создание собственного сжатия текста с использованием аналогичных методов.

Виджет для сжатия текста (15 минут)

Сделайте это: предоставьте учащимся ссылки на проект сжатия текста без потерь на веб-сайте Quorum Language.

Примечания

  • Этот виджет позволяет сжимать фрагмент текста. Вы можете ввести ввод, чтобы добавить новую запись в словарь. Когда вы это сделаете, текст будет обновляться с вашими символами. У вас есть 4 минуты, чтобы попытаться максимально сжать этот текст.

Рассылать: Помогите учащимся понять, как работает этот виджет, чтобы они могли успешно сжимать текст.Отметьте учащихся, которые нашли успешные стратегии, чтобы их можно было выделить в предстоящем обсуждении.

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

Подсказка. Какие стратегии вы используете для сжатия образца текста? Какие из них кажутся наиболее успешными?

Цель обсуждения

Учащиеся столкнулись с различными стратегиями, но некоторые из них стоит выделить для всего класса:

  • Ищите повторяющиеся слова, предложения или даже части слов (например, -ing или -th).
  • Вы можете вставлять символы в символы. Это было продемонстрировано в примере с питтер-паттером, где некоторые символы были "распакованы", чтобы включить другие символы.
  • Порядок словаря имеет значение, и попытка переупорядочить словарь после его создания может привести к проблемам.
  • Используемый виджет является примером сжатия без потерь.
  • Процент сжатия в нижней части экрана рассчитывается путем сравнения количества байтов в исходном сообщении и количества байтов в сжатом сообщении.

Сделайте это: дайте учащимся еще 4 минуты, чтобы применить стратегии, которые они только что видели, чтобы продолжить повышать процент сжатия.

Учебный совет

Соревнования. Чтобы получить наивысший рейтинг, вы можете организовать соревнование между одноклассниками (в небольших группах или всем классом), но это может изолировать учащихся и предполагает, что существует единственный "лучший" способ. сделать это. Альтернативная стратегия: когда учащиеся начинают во второй раз, пусть они соревнуются сами с собой, чтобы превзойти свой рейтинг в течение первых 4 минут. Таким образом, успех измеряется личностным ростом, и у каждого учащегося больше шансов почувствовать себя успешным.

Начать заново: при решении вычислительных задач иногда бывает полезно начать все сначала. Это задание может быть хорошим местом, чтобы предложить это учащимся, особенно тем, которые чувствуют себя особенно застрявшими или разочарованными - иногда перезапуск с самого начала открывает новые идеи и стратегии, которых мы не видели раньше.

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

Примечания

  • Мы приближаемся к «пределу» того, насколько сильно мы можем сжать это конкретное сообщение. Но не каждое сообщение можно сжать с высоким рейтингом. Мы собираемся выяснить, что делает некоторые сообщения более сжимаемыми, чем другие.

Сравнение компрессии

Примечания

  • Исследуйте другие тексты для сжатия. Ищите тексты, которые, по вашим прогнозам, будет "легко" сжимать, а тексты, которые, по вашему прогнозу, будут "трудными"

Группа: пусть учащиеся поработают над этим заданием со своим соседом. Разбейте учащихся на группы по 2 человека, но не более одной группы по 3 человека.

Выполните следующее: учащиеся работают вместе, чтобы сжать «простой» текст и «сложный» текст.

Совет для преподавателя

"aaaa. aaa": Многие группы, вероятно, попытаются использовать последний вариант, все буквы A, как их "легкий" текст - с этим текстом можно получить рейтинг сжатия до середины 80-х. Это хорошо, так как это по-прежнему подчеркивает один из важных выводов из этой деятельности: информацию с большим количеством повторений легче сжать. Тем не менее, разумно также попросить группы написать второй «простой» текст, как только они будут удовлетворены этим.

Приоритеты: не обязательно, чтобы все группы выбирали одинаковые тексты, и не важно находить самые «лучшие» сжатия. Вместо этого учащиеся должны сосредоточиться на качествах, которые, по их мнению, делают одни тексты «более легкими» или более «сложными», чем другие. Вы можете подчеркнуть это с помощью вопросов, которые вы задаете при распространении среди групп: "Что побудило вас выбрать это для вашего "легкого" текста? Что побудило вас выбрать это для вашего "сложного" текста?"

Подведение итогов (5 минут)

Синтез

Подсказка: что сделало некоторые сообщения "легче" для сжатия, чем другие? Что сделало некоторые сообщения более «сложными» для сжатия, чем другие?

Цель обсуждения

  • В «более простых» текстах обычно много повторов — повторяющихся слов, фраз или слогов. Полезной стратегией является использование этого повторения для создания сжатия.
  • В "сложных" текстах обычно меньше повторений, поэтому вероятность применения именно этого метода сжатия ниже. Некоторые стратегии могут на самом деле ухудшить сжатие, что может противоречить здравому смыслу.

Примечания

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

Журнал: попросите учащихся добавить определение сжатия без потерь в свой журнал

  • Сжатие без потерь. Процесс уменьшения количества битов, необходимых для представления чего-либо, без потери информации. Этот процесс обратим.

Оценка: проверка на понимание

Для учащихся: откройте документ Word или Google и скопируйте/вставьте следующие два вопроса.

Вопрос. Какое качество сжатия без потерь является наиболее важным?

Вопрос. Автор готовится отправить свою книгу издателю в виде вложения электронной почты. Файл на их компьютере составляет 1000 байт. Когда они прикрепляют файл к своему электронному письму, он отображается как 750 байт. Автор очень расстраивается, потому что он обеспокоен тем, что часть его книги была удалена по адресу электронной почты. Если бы вы могли поговорить с этим автором, как бы вы объяснили, что происходит с его книгой?

Соответствие стандартам

  • CSTA K-12 Computer Science Standards (2017): DA – Данные и анализ: 3A-DA-10 – Оценка компромиссов в том, как организованы элементы данных и где данные хранятся.
  • CSP2021: DAT-1.D.1, DAT-1.D.2, DAT-1.D.3, DAT-1.D.4

Сжатие без потерь и с потерями

Сжатие данных основано на использовании предсказуемых закономерностей и/или отказе от точности.


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

Рис. 1: несжатое изображение. Это несжатое растровое изображение содержит $320\times240$ пикселей. Цвет каждого пикселя представлен 24 битами (по 8 бит на каждый цветовой канал RGB). Учитывая, что 8 бит — это 1 байт, а $2^$ байта — это 1 килобайт (кБ), можно подсчитать, что размер файла составляет $225 \text< kB>$. Вы также можете убедиться в этом факте, скачав изображение и проверив свойства его файла. Источник изображения.

Рис. 2: Сжатое изображение без потерь. Это изображение на рис. 1 сжато до размера $61,1 \text$ в формате PNG без потерь. Сжатие происходит без потерь, поскольку каждый пиксель в этом изображении имеет точно такой же цвет, как и соответствующий пиксель на рис. 1. Экономия размера файла достигается за счет представления предсказуемых шаблонов с небольшим количеством битов. Например, нижний левый угол представляет собой ровный цвет, а верхний правый угол содержит плавный цветовой градиент, оба из которых являются распространенными структурами в цифровых изображениях.

Рис. 3: Сжатое изображение с потерями. Это изображение на рис. 1 сжато до размера $11,6 \text$ в формате JPEG с потерями. Сжатие происходит с потерями, поскольку цвета отдельных пикселей на рис. 1 точно не сохраняются. Вы можете видеть, что детали более размыты, чем на рис. 1 или рис. 2. Вы также можете увидеть звенящие артефакты, окружающие яркие части изображения.

Изображение Формат Размер файла (КБ) DCR Экономия в процентах
Рис. 1 несжатое растровое изображение 225 $\ frac=1$ $\left( 1 - \frac\right) \times 100\% = 0\%$
Рис. 2 < /td> PNG без потерь 61,1 $\frac \ приблизительно 3,68$ $\left( 1 - \frac\right) \times 100\% \приблизительно 72,8\%$
Рис. 3 JPEG с потерями 11,6 $\frac \приблизительно 19,4$ $\left( 1 - \frac\right) \times 100\% \приблизительно 94,8\%$

Энтропия — это мера количества информации в битах.


Чтобы точно сохранить данные, теперь мы знаем, что сжатие без потерь может уменьшить количество битов, используемых для представления данных. Но есть предел (называемый энтропией) того, сколько битов необходимо. Энтропия — это количество информации, реально присутствующей в данных. Если вы попытаетесь сжать данные ниже энтропии, вы гарантированно потеряете часть информации. Посмотрите короткое видео ниже, чтобы концептуально понять энтропию и узнать, как получается ее формула. (В этом видео есть ошибка на 1:26. Вопрос «Это B?», который появляется на экране, должен быть «Это C?»)

Энтропия данных $H$ зависит от вероятностей $p_1, p_2, \ldots, p_n$ значений, которые могут принимать данные.
\begin
\begin
H=\sum_^n p_i \log_2 \left( \frac \right) \text
\end \label
\end
Обратите внимание, что формула энтропии представляет собой средневзвешенное значение членов $\log_2(1/p_i)$, каждое из которых взвешено по вероятности $p_i$ соответствующего значения, индексируемого $i$.

Рис. 4: Кегли. Эта коллекция конфет состоит из 105 конфет Skittles: 18 со вкусом лимона, 14 со вкусом лайма, 28 со вкусом апельсина, 26 со вкусом клубники и 19 со вкусом винограда. Источник изображения.


Предположим, вы закрываете глаза и случайным образом выбираете одну из кеглей на рис. 4. Чтобы вычислить энтропию вкуса этого кегля, вычислите вероятность $p_i$ выбора вкуса $i$ как: количество кеглей вкуса $i$, деленное на общее количество кеглей.

Аромат $i$ Количество кеглей вкуса $i$ Вероятность $p_i$< /th>

Затем используйте эти пять значений $p_i$ для оценки энтропии $H$.
\begin
H &= 0,171 \log_2 \left( \frac \right) + 0,133 \log_2 \left( \frac \right) + \cdots + 0,181 \log_2 \left( \frac \right) )\\
&\приблизительно 2,28 \text \label
\end
Другими словами, количество информации, представленной ароматом случайно выбранного Skittle, составляет 2,28 бита. Если вы повторите выбор Skittle много раз (каждый раз возвращая выбранный обратно в стопку), вы не сможете без потерь сжать последовательность выбранных вкусов менее чем в 2,28 бита на выбор.

Код Хаффмана — это код без потерь со средней длиной кодового слова, близкой к энтропии.


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

Чтобы начать построение дерева Хаффмана, каждый символ связывается с узлом, помеченным его частотой, которая является либо его вероятностью, либо подсчетом количества раз, когда он встречается. Затем процесс чередуется между двумя этапами: SORT и LINK.

На этапе SORT узлы сортируются в порядке убывания частоты.

На этапе LINK два наименее частых узла соединяются ветвями с родительским узлом, помеченным их общей частотой. Таким образом, два узла объединяются в один для следующего шага SORT. На этапе LINK мы также помечаем ветви кодовыми битами 0 и 1.Для согласованности мы назначаем кодовый бит 1 ветви, ведущей к более частому узлу, и кодовый бит 0 — ветви, ведущей к менее частому узлу.

Этапы SORT и LINK повторяются до тех пор, пока все исходные узлы не будут подключены к единой древовидной структуре, как показано в приведенном ниже примере на основе частот ароматов Skittle на рис. 4.

< td>СОРТИРОВКА
Шаг Построение дерева Хаффмана Объяснение

Каждый символ теперь сопоставляется с кодовым словом путем считывания битов кода на ветвях, ведущих от корневого узла (вверху дерева) вниз к символу. Кодовые слова и их длины $L_i$ для примера разновидности Skittle показаны ниже.

Артикул $i$ Кодовое слово Длина кодового слова $L_i$ (биты)

Обратите внимание, что более распространенные ароматы (апельсин, клубника и виноград) имеют более короткие кодовые слова, чем менее распространенные (лимон и лайм). Следовательно, по сравнению с использованием кодовых слов равной длины, для представления последовательности разновидностей в среднем используется меньшее количество битов. Фактически средняя длина кодового слова $L_>$ представляет собой средневзвешенное значение длины кодового слова $L_i$, каждое из которых взвешено по вероятности $p_i$ из таблицы 2.
\begin
L_> & = \sum_^n p_i L_i \\
&= (0,171)(3) + (0,133)(3) + (0,267)(2) + (0,248)(2) + (0,181)(2)\ \
&\приблизительно 2,30 \text < бит>
\end
Заметим, что средняя длина кодового слова $L_> \приблизительно 2,30 \text< бит>$ близка (но не меньше чем) энтропия $H \примерно 2,28 \text$ из $\eqref$. Этот результат в целом верен для сжатия без потерь:
\begin
\begin
L_> \geq H
\end \label
\end
< бр />

Коды Хаффмана не содержат префиксов, что гарантирует однозначность их декодирования.


Расшифровка данных, закодированных по методу Хаффмана, проста. Рассмотрим неизвестную последовательность ароматов, которая была сжата с использованием кода Хаффмана в таблице 5. Чтобы разбить последовательность битов на кодовые слова, читайте последовательность битов слева направо, пока не увидите кодовое слово. Затем продолжайте в том же духе, пока не увидите следующее кодовое слово и так далее.

Рис. 5: декодирование Хаффмана. Чтобы декодировать $110101000$ с помощью таблицы 5, прочтите биты следующим образом: первый бит равен $1$ (не кодовое слово); первый и второй биты равны $11$ (тоже не кодовое слово); биты с первого по третий равны $110$ (это кодовое слово для вкуса лайма). Продолжая таким образом, последовательность битов разбивается на кодовые слова $110,10,10,00$, которые соответствуют последовательности вкусов: лайм, апельсин, апельсин, виноград.

Обратите внимание, что в декодировании нет двусмысленности. Нет другого способа разбить последовательность битов $110101000$ на кодовые слова, поскольку первое кодовое слово $110$ имеет префиксы $1$ и $11$, которые сами по себе не являются кодовыми словами, и так далее для последующих кодовых слов. Фактически ни одно кодовое слово в таблице 5 не является префиксом другого кодового слова. Такой код называется кодом без префиксов.

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

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

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

Чтобы получить лучшие результаты, необходимо скупить всю эту технику.

  • Сжатие - это процесс кодирования информации с использованием меньшего количества битов.
  • Удаление ненужных данных всегда приносит лучший результат.
  • Существует множество различных технологий и алгоритмов видео.
  • Чтобы получить доступ к видео, вам необходимо использовать несколько методов.

Сжатие данных - это процесс объединения их размера. Многие специалисты всю жизнь занимались исследованиями в этой области. Они работали над алгоритмами, технологиями и методами, улучшая коэффициент усиления, скорость и системные требования различных компрессоров. Конечно, мы не собираемся подробно собирать все темы, но важно понимать, как работает оптимизация и какие методы нам уменьшаются для объединения размеров ресурсов на страницах.

Сочетая несколько методов, мы получили следующий результат:

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

Минификация: предварительная обработка и оптимизация на основе контекста

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

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

Посмотрите на простую HTML-страницу сверху и на три типа ресурсов, которые в большинстве случаев встречаются: HTML-разметка, CSS-стили и JavaScript. Для всех типов есть разные правила написания, обозначения, комментарии и т.д. д. Как уменьшить размер таких страниц?

  • • Комментарии в коде относятся к разработчику, но совершенно не нужны в браузере. Просто удалите комментарии CSS ( /* . */ ), HTML ( ) и JavaScript ( // . ), и размер файла значительно уменьшится.
  • Продвинутый CSS-компрессор может обнаружить, что мы используем неэффективный метод определения правил для .awesome-container. Он объединит два объявления в одно без изменений других стилей и сэкономит еще больше байтов.
  • Пробелы и табуляции нужны только для удобства разработчика. Дополнительный компрессор может удалить их.

После применения шагов шага страница уменьшилась с 406 до 150 символов. Мы сэкономили 63%! Конечно, теперь ожидается код ожидания, но это и не нужно. Мы можем сохранить оригинальную страницу в качестве версии для разработчика и реализовать описанные выше шаги, когда мы хотим опубликовать ее на сайте.

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

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

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

Сжатие текста с помощью GZIP

  • GZIP лучше всего сжимает текстовые ресурсы: CSS, JavaScript и HTML.
  • Все современные отчеты и автоматически запрашивают сжатие GZIP.
  • На сервер должно быть настроено сжатие GZIP.
  • В некоторых сетях поставки должны быть проверены, включено ли сжатие GZIP.

GZIP — это стандартный компрессор, который может применяться к любому потоку байтов. Он запоминает собранный ранее контент, а затем находит и заменяет повторяющиеся фрагменты данных. Прочитать подробное описание работы GZIP можно здесь. GZIP лучше всего сжимает текстовые ресурсы, часто достигая коэффициента производительности 70-90% при работе с большими файлами. Однако, если вы уменьшаете размер ресурсов, уже сжатых с помощью альтернативных алгоритмов, (например, изображений), не становится практически никакой эффективности.

Библиотека Размер Размер после видео Коэффициент видео
jquery-1.11.0.js 276 КБ 82 КБ 70%
jquery-1.11.0 .min.js 94 КБ 33 КБ 65%
angular-1.2.15.js 729 КБ 182 КБ 75%
angular-1.2.15.min.js 101 КБ 37 КБ 63%
bootstrap-3.1.1.css 118 КБ 18 КБ 85%
bootstrap-3.1.1.min.css 98 КБ 17 КБ 83%
Foundation-5.css 186 КБ 22 КБ 88%
foundation-5.min.css 146 КБ 18 КБ 88%

В таблице выше показано, насколько увеличился размер нескольких популярных библиотек JavaScript и CSS-фреймворков в игре GZIP. Коэффициент наблюдения составляет от 60 до 88%, а при обработке минифицированных файлов (в названии которых есть .min) он становится ещё выше.

  1. Сначала применялись методы обнаружения распространения: CSS-, JS- или HTML-минификаторы.
  2. Используйте GZIP для видеозаписи минифицированных файлов.

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

Какая подойдет вашему серверу лучше всего? В проекте HTML5 Boilerplate размещены примеры файлов для самых популярных серверов с подробными комментариями для всех параметров и настроек. Появляется в списке требуемых серверов, загляните в раздел GZIP и убедитесь, что на подходе к рассмотрению требующих внимания параметров.

Чтобы посмотреть результаты работы GZIP, корпоративные инструменты разработчика в Chrome и найти столбец Size/Content (Размер/контент) на сетевой панели (Сеть). Число - это вес переносого ресурса, а содержание - вес несжатого ресурса. Например, GZIP жалует ограниченный HTML-ресурс из примера выше на 24,8 КБ.

По завершении мы будем предупреждать вас. Большинство серверов автоматически сжимают ресурсы при передаче. Однако при сборе некоторых сетей доставки необходимо самостоятельно получить доступ к GZIP-ресурсу. Ваш сайт уверен, что все ресурсы действительно сжимаются.

Если не указано иное, содержимое этой страницы предоставляется по лицензии Creative Commons Attribution 4.0, а образцы кода — по лицензии Apache 2.0. Подробнее см. в Правилах сайта Google Developers. Java является зарегистрированным товарным знаком Oracle и/или ее дочерних компаний.

Сжатие без потерь и с потерями

Сжатие данных основано на использовании предсказуемых закономерностей и/или отказе от точности.


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

Рис. 1: несжатое изображение. Это несжатое растровое изображение содержит $320\times240$ пикселей. Цвет каждого пикселя представлен 24 битами (по 8 бит на каждый цветовой канал RGB). Учитывая, что 8 бит — это 1 байт, а $2^$ байта — это 1 килобайт (кБ), можно подсчитать, что размер файла составляет $225 \text< kB>$. Вы также можете убедиться в этом факте, скачав изображение и проверив свойства его файла. Источник изображения.

Рис. 2: Сжатое изображение без потерь. Это изображение на рис. 1 сжато до размера $61,1 \text$ в формате PNG без потерь. Сжатие происходит без потерь, поскольку каждый пиксель в этом изображении имеет точно такой же цвет, как и соответствующий пиксель на рис. 1.Экономия размера файла достигается за счет представления предсказуемых шаблонов с небольшим количеством битов. Например, нижний левый угол представляет собой ровный цвет, а верхний правый угол содержит плавный цветовой градиент, оба из которых являются распространенными структурами в цифровых изображениях.

Рис. 3: Сжатое изображение с потерями. Это изображение на рис. 1 сжато до размера $11,6 \text$ в формате JPEG с потерями. Сжатие происходит с потерями, поскольку цвета отдельных пикселей на рис. 1 точно не сохраняются. Вы можете видеть, что детали более размыты, чем на рис. 1 или рис. 2. Вы также можете увидеть звенящие артефакты, окружающие яркие части изображения.

Изображение Формат Размер файла (КБ) DCR Экономия в процентах
Рис. 1 несжатое растровое изображение 225 $\ frac=1$ $\left( 1 - \frac\right) \times 100\% = 0\%$
Рис. 2 < /td> PNG без потерь 61,1 $\frac \ приблизительно 3,68$ $\left( 1 - \frac\right) \times 100\% \приблизительно 72,8\%$
Рис. 3 JPEG с потерями 11,6 $\frac \приблизительно 19,4$ $\left( 1 - \frac\right) \times 100\% \приблизительно 94,8\%$

Энтропия — это мера количества информации в битах.


Чтобы точно сохранить данные, теперь мы знаем, что сжатие без потерь может уменьшить количество битов, используемых для представления данных. Но есть предел (называемый энтропией) того, сколько битов необходимо. Энтропия — это количество информации, реально присутствующей в данных. Если вы попытаетесь сжать данные ниже энтропии, вы гарантированно потеряете часть информации. Посмотрите короткое видео ниже, чтобы концептуально понять энтропию и узнать, как получается ее формула. (В этом видео есть ошибка на 1:26. Вопрос «Это B?», который появляется на экране, должен быть «Это C?»)

Энтропия данных $H$ зависит от вероятностей $p_1, p_2, \ldots, p_n$ значений, которые могут принимать данные.
\begin
\begin
H=\sum_^n p_i \log_2 \left( \frac \right) \text
\end \label
\end
Обратите внимание, что формула энтропии представляет собой средневзвешенное значение членов $\log_2(1/p_i)$, каждое из которых взвешено по вероятности $p_i$ соответствующего значения, индексируемого $i$.

Рис. 4: Кегли. Эта коллекция конфет состоит из 105 конфет Skittles: 18 со вкусом лимона, 14 со вкусом лайма, 28 со вкусом апельсина, 26 со вкусом клубники и 19 со вкусом винограда. Источник изображения.


Предположим, вы закрываете глаза и случайным образом выбираете одну из кеглей на рис. 4. Чтобы вычислить энтропию вкуса этого кегля, вычислите вероятность $p_i$ выбора вкуса $i$ как: количество кеглей вкуса $i$, деленное на общее количество кеглей.

Аромат $i$ Количество кеглей вкуса $i$ Вероятность $p_i$< /th>

Затем используйте эти пять значений $p_i$ для оценки энтропии $H$.
\begin
H &= 0,171 \log_2 \left( \frac \right) + 0,133 \log_2 \left( \frac \right) + \cdots + 0,181 \log_2 \left( \frac \right) )\\
&\примерно 2.28 \text < bits>\label
\end
Другими словами, количество информации, представленной вкусом случайно выбранного Skittle, составляет 2,28 бита. Если вы повторите выбор Skittle много раз (каждый раз возвращая выбранный обратно в стопку), вы не сможете без потерь сжать последовательность выбранных вкусов менее чем в 2,28 бита на выбор.

Код Хаффмана — это код без потерь со средней длиной кодового слова, близкой к энтропии.


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

Чтобы начать построение дерева Хаффмана, каждый символ связывается с узлом, помеченным его частотой, которая является либо его вероятностью, либо подсчетом количества раз, когда он встречается. Затем процесс чередуется между двумя этапами: SORT и LINK.

На этапе SORT узлы сортируются в порядке убывания частоты.

На этапе LINK два наименее частых узла соединяются ветвями с родительским узлом, помеченным их общей частотой. Таким образом, два узла объединяются в один для следующего шага SORT. На этапе LINK мы также помечаем ветви кодовыми битами 0 и 1. Для согласованности мы назначаем кодовый бит 1 ветви, ведущей к более частому узлу, и кодовый бит 0 ветви, ведущей к менее частому узлу.

Этапы SORT и LINK повторяются до тех пор, пока все исходные узлы не будут подключены к единой древовидной структуре, как показано в приведенном ниже примере на основе частот ароматов Skittle на рис. 4.

< td>СОРТИРОВКА
Шаг Построение дерева Хаффмана Объяснение

Каждый символ теперь сопоставляется с кодовым словом путем считывания битов кода на ветвях, ведущих от корневого узла (вверху дерева) вниз к символу. Кодовые слова и их длины $L_i$ для примера разновидности Skittle показаны ниже.

Артикул $i$ Кодовое слово Длина кодового слова $L_i$ (биты)

Обратите внимание, что более распространенные ароматы (апельсин, клубника и виноград) имеют более короткие кодовые слова, чем менее распространенные (лимон и лайм). Следовательно, по сравнению с использованием кодовых слов равной длины, для представления последовательности разновидностей в среднем используется меньшее количество битов. Фактически средняя длина кодового слова $L_>$ представляет собой средневзвешенное значение длины кодового слова $L_i$, каждое из которых взвешено по вероятности $p_i$ из таблицы 2.
\begin
L_> & = \sum_^n p_i L_i \\
&= (0,171)(3) + (0,133)(3) + (0,267)(2) + (0,248)(2) + (0,181)(2)\ \
&\приблизительно 2,30 \text < бит>
\end
Заметим, что средняя длина кодового слова $L_> \приблизительно 2,30 \text< бит>$ близка (но не меньше чем) энтропия $H \примерно 2,28 \text$ из $\eqref$. Этот результат в целом верен для сжатия без потерь:
\begin
\begin
L_> \geq H
\end \label
\end
< бр />

Коды Хаффмана не содержат префиксов, что гарантирует однозначность их декодирования.


Расшифровка данных, закодированных по методу Хаффмана, проста. Рассмотрим неизвестную последовательность ароматов, которая была сжата с использованием кода Хаффмана в таблице 5. Чтобы разбить последовательность битов на кодовые слова, читайте последовательность битов слева направо, пока не увидите кодовое слово. Затем продолжайте в том же духе, пока не увидите следующее кодовое слово и так далее.

Рис. 5: декодирование Хаффмана. Чтобы декодировать $110101000$ с помощью таблицы 5, прочтите биты следующим образом: первый бит равен $1$ (не кодовое слово); первый и второй биты равны $11$ (тоже не кодовое слово); биты с первого по третий равны $110$ (это кодовое слово для вкуса лайма). Продолжая таким образом, последовательность битов разбивается на кодовые слова $110,10,10,00$, которые соответствуют последовательности вкусов: лайм, апельсин, апельсин, виноград.

Обратите внимание, что в декодировании нет двусмысленности. Нет другого способа разбить последовательность битов $110101000$ на кодовые слова, поскольку первое кодовое слово $110$ имеет префиксы $1$ и $11$, которые сами по себе не являются кодовыми словами, и так далее для последующих кодовых слов. Фактически ни одно кодовое слово в таблице 5 не является префиксом другого кодового слова. Такой код называется кодом без префиксов.

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

Читайте также: