Мировая карта в 445 байтах: экстремальная компрессия данных с помощью deflate

Иво Кадзиела (с помощью Codex) продемонстрировал технику, позволяющую генерировать полноценную ASCII-карту мира, используя всего 445 байт сжатых данных. Ключевой приём, применение deflate-компрессии в сочетании с JavaScript-кодом, который распаковывает данные прямо в браузере. Разработчик обнаружил, что fetch() поддерживает data-URI с base64-закодированными сжатыми данными, что позволяет избежать дополнительных запросов. Код использует встроенный API DecompressionStream('deflate-raw') для распаковки, затем преобразует результат в текст и отображает в браузере как элемент
с подобранным размером шрифта. Это демонстрирует как мощь современных API компрессии, так и возможности минимизации кода за счёт встроенных браузерных средств.Ключевые факты
- Работающая мировая карта занимает всего 445 байт благодаря deflate-компрессии
- JavaScript-код использует fetch() с base64 data-URI для загрузки сжатых данных без дополнительных HTTP-запросов
- DecompressionStream API позволяет распаковать данные прямо в браузере с минимальным кодом
- Техника демонстрирует баланс между сжатием данных и сложностью кода
- Подход применим для встраивания больших данных в минимальное количество байт на клиенте
Почему это важно
Экстремальное сжатие данных имеет практическое значение в контекстах с ограничениями: мобильные приложения с медленным интернетом, встраивание ресурсов в код, контесты code golf, оптимизация под конкретные сценарии использования. Демонстрация показывает, что современные браузерные API (DecompressionStream, fetch с data-URI) позволяют уменьшить размер с помощью встроенных инструментов вместо внешних библиотек.
Кому это важно
Разработчикам фронтенда и оптимизаторам, работающим на снижение потребления памяти и трафика; специалистам по встраиванию данных в JavaScript; энтузиастам code golf и экстремальной оптимизации; создателям инструментов, требующих минимального размера дистрибутива.
Как это применить
Техника использует стандартный JavaScript и встроенные API без зависимостей. Для применения нужно: 1) сжать данные через deflate (например, через Node.js zlib), 2) закодировать результат в base64, 3) поместить в data-URI в fetch-запрос, 4) распаковать через DecompressionStream в браузере. Код применим к любым текстовым данным, где компактность важнее удобочитаемости исходного кода.
Можно ли доверять
Источник, техблог Simon Willison, зарекомендовавшего себя авторитетом в веб-разработке. Автор оригинальной идеи, Иво Кадзиела, используемые API (Compression Streams, fetch с data-URI), все существующие и документированные браузерные функции. Работающий пример подтверждает, что подход реально работает. Ограничение: техника применима не ко всем типам данных и использует специализированный подход, поэтому требует оценки целесообразности для каждого конкретного случая.
Риски и подводные камни
Используемый API DecompressionStream поддерживается не всеми браузерами (требует проверки caniuse для целевой аудитории). Сжатые данные в base64 в исходном коде могут усложнить отладку и поддержку. Техника усложняет кодовую базу ради размера, нужно взвесить затраты на поддержку против выигрыша в байтах, особенно если карта редко обновляется. Для динамических данных компрессия может дать меньше выигрыша, чем при статических картах.
«Я не знал, что fetch() поддерживает data-URI вот так»
— Simon Willison