Об авторе: Дэниел Лемир — профессор информатики Университета Квебека (Канада).
Его исследования связаны с производительностью программного обеспечения и разработкой данных.
Компьютеры хранят данные в виде потока битов.
И изображения, и аудио- или видеофайлы, и двоичные файлы могут содержать практически любую последовательность битов.
Однако мы часто используем текстовые форматы; например, веб-страницы и электронные письма должны быть в текстовом формате.
Как мы отправляем изображения по электронной почте? Как вставлять изображения на веб-страницы? Один из вариантов — создать ссылку на реальный двоичный файл.
Другой типичный подход — встроить двоичный файл непосредственно в тело электронного письма или на веб-страницу с помощью база64 .
Base64 — это просто стандартный текстовый формат, который можно использовать для кодирования любых двоичных данных.
Точнее, base64 всегда является допустимым текстом ASCII (и, следовательно, также допустимым текстом UTF-8).
Каждый байт base64 содержит 6 бит данных.
То есть мы «теряем» примерно 2 бита на байт. Поэтому эквивалент двоичного файла в формате Base64 будет примерно на 33 % больше.
На практике такое увеличение размера редко является проблемой.
Насколько я знаю, вложения электронной почты почти всегда имеют кодировку Base64. При написании HTML мне показалось удобным вставлять изображения непосредственно в HTML-код, используя схему.
Например, в недавняя статья Я закодировал файл 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 #векторные инструкции #открытый исходный код #Идеальный код #Оптимизация клиента #браузеры-
Отличные Струйные Принтеры Для Дома И Офиса
19 Oct, 24 -
Лаосский Язык
19 Oct, 24 -
Яндекс.диск Синхронизирует Локальные Папки
19 Oct, 24 -
Магазин-Прокси
19 Oct, 24 -
Сравнение Методов Проверки Кода
19 Oct, 24 -
Гиганты Обеспокоены Проблемой Поиска
19 Oct, 24