Абсурдно Быстрое Кодирование И Декодирование Base64

Об авторе: Дэниел Лемир — профессор информатики Университета Квебека (Канада).

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

Компьютеры хранят данные в виде потока битов.

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

Однако мы часто используем текстовые форматы; например, веб-страницы и электронные письма должны быть в текстовом формате.

Как мы отправляем изображения по электронной почте? Как вставлять изображения на веб-страницы? Один из вариантов — создать ссылку на реальный двоичный файл.

Другой типичный подход — встроить двоичный файл непосредственно в тело электронного письма или на веб-страницу с помощью база64 .

Base64 — это просто стандартный текстовый формат, который можно использовать для кодирования любых двоичных данных.

Точнее, base64 всегда является допустимым текстом ASCII (и, следовательно, также допустимым текстом UTF-8).

Каждый байт base64 содержит 6 бит данных.

То есть мы «теряем» примерно 2 бита на байт. Поэтому эквивалент двоичного файла в формате Base64 будет примерно на 33 % больше.

На практике такое увеличение размера редко является проблемой.

Насколько я знаю, вложения электронной почты почти всегда имеют кодировку Base64. При написании HTML мне показалось удобным вставлять изображения непосредственно в HTML-код, используя схему.

URI данных .

Например, в недавняя статья Я закодировал файл PNG таким образом.

Крупные веб-сайты, такие как Google, постоянно используют эту схему.

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

Но браузер сохраняет один сетевой запрос.

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

Эта клиентская база данных будет хранить изображения и произвольные данные, но все они должны быть закодированы в формате Base64. Большинство механизмов баз данных поддерживают двоичные данные, но некоторым в какой-то момент требуется кодировка Base64: MongoDB, Elasticsearch, Amazon SimpleDB и Amazon DynamoDB. Наверное, и некоторые другие.

Base64 обычно используется в криптографии для обмена ключами.

Форма base64 также используется для передачи произвольных данных как части URI. К счастью, кодирование и декодирование Base64 выполняется быстро.

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

Мэтт Крейн и Джимми Лин обнаруженный Медленное декодирование двоичных атрибутов base64 в Amazon DynamoDB. Насколько быстро вы можете декодировать данные в формате Base64? На новейшем процессоре Intel для этого требуется около двух циклов на байт (из кэша) при использовании быстрого декодера, подобного тому, который встроен в браузер Chrome. Этот быстрый декодер в основном занят вызовами таблиц.

Это намного медленнее, чем копирование данных в кэш (которое занимает менее 0,05 цикла на байт).

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

Войцех Мула, я и несколько коллег (включая Говарда и Курца) решили серьезно пересмотреть проблему.

Мула открыта веб-страница посвященный этой теме.

Мы обнаружили, что на новейших процессорах Intel при использовании векторных инструкций можно ускорить обработку в 10 раз и использовать всего около 0,2 цикла на байт. Это все еще больше, чем копирование, но гораздо меньше того предела, который может когда-либо стать самым большим узким местом системы.

Следует отметить, что в эти 0,2 такта на байт входит обработка ошибок: декодер должен декодировать и проверять входные данные (например, если обнаружены недопустимые символы, то декодирование прерывается).

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

Наша статья была опубликована на arXiv и принята к публикации в веб-издании ACM Transactions. Насколько я понимаю, наши хорошие результаты интегрированы в Библиотека base64 Кломпа .



Дополнительные материалы:

Войцех Мула, Дэниэл Лемир», Более быстрое кодирование и декодирование Base64 с использованием инструкций AVX2. ", веб-версия ACM Transactions (скоро) Теги: #base64 #Amazon DynamoDB #fastbase64 #AVX2 #векторные инструкции #открытый исходный код #Идеальный код #Оптимизация клиента #браузеры
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.