Недавно произошел некоторый шум в отношении формата изображения Fabrice Bellard BPG (http://bellard.org/bpg/), который (на основе демонстраций, представленных на его сайте ) обеспечивает лучшее сжатие, чем jpeg, webp и некоторые другие. Декодирование изображения выполняется в браузере с помощью JS, что означает, что он может быть использован немедленно, не дожидаясь принятия браузера. В целом это кажется хорошей идеей, и торговля некоторым временем процессора для более быстрой загрузки часто является эффективным компромиссом.
Метод используемый здесь для замены изображений, - это, на window.load, итерации по document.images, найти любой, где src атрибут содержит URL-адрес, заканчивающийся на ".bpg", и замените его на холст.
Это, безусловно, не единственный способ подойти к проблеме, и я вижу некоторые стороны этой техники, которые включают: а) холсты не имеют точно таких же правил компоновки, как изображения - например, установка атрибута width на нем означает что-то другое на img vs canvas, b) также кажется, что по крайней мере в Chrome, как масштабирование выполняется для изображений, которые уменьшены по сравнению с холстами, отличается.
Лучшее решение идеально соответствовало бы этим требованиям:
- Попытка не дублировать данные изображения в памяти больше, чем необходимо (а также не излишне использовать большее количество CPU, чем это необходимо), декодирование в JS уже требует многого по сравнению с обработкой собственных изображений)
- Совместимость браузера настолько же эффективна
- Используйте теги <img> вместо <canvas> (не требование, но, похоже, будет лучше)
- Обеспечьте простой способ не только обрабатывать изображения при загрузке документа, но и изображения, которые позже добавляются в документ (например, в ответ на активность пользователя).
- Все еще будет прост в использовании (существующая техника на Bellard.org, безусловно, легко интегрируется)
- EDIT: использование веб-работников для декодирования изображения без блокировки страницы также потенциально может быть хорошим способом.
Некоторые релевантные инструменты, которые приходят на ум, включают данные: и blob: urls.
У кого-нибудь есть примеры рабочего кода, который загружает BPG, используя такие "лучшие" методы? (То, как у Фабриса это в его примерах неплохо, и, конечно, подходы имеют компромиссы, но я думаю, что может быть что-то лучше для обобщенного использования.)