Google представила Cross-Origin Storage API для устранения дублирования загрузки ИИ-моделей в браузере
Текущая архитектура браузеров заставляет пользователей скачивать идентичные модели ИИ весом до 177 МБ при каждом переходе на новый сайт, расходуя трафик и замедляя запуск приложений. Google предлагает устранить эти потери через общее хранилище, где файлы идентифицируются криптографическим хешем, а не адресом ресурса, делая повторную загрузку мгновенной.
Google представила экспериментальное решение Cross-Origin Storage API (COS), призванное устранить дублирование загрузки тяжелых файлов искусственного интеллекта в веб-браузерах. Проблема заключается в том, что современные стандарты безопасности изолируют кэш для каждого сайта, заставляя пользователя скачивать одни и те же модели ИИ (например, для распознавания речи) заново при переходе на другой ресурс. В примере с библиотекой Transformers.js это приводит к повторной загрузке 177 МБ данных, хотя файлы идентичны. Предложенный механизм позволяет хранить файлы в общем хранилище, идентифицируя их не по адресу сайта, а по криптографическому хешу, что делает загрузку мгновенной при повторном обращении к ресурсу.
Механика проблемы и предлагаемое решение
Текущая архитектура браузеров, в частности Chrome, использует ключи изоляции сети (Network Isolation Key) для защиты от утечек данных через тайминг запросов. Это означает, что даже если два сайта обращаются к одному и тому же файлу на сервере Hugging Face или jsDelivr, браузер считает их разными ресурсами.
В результате возникают следующие последствия:
- Дублирование трафика: Пользователь скачивает один и тот же файл ort-wasm-simd-threaded.asyncify.wasm (весом 4,733 КБ) каждый раз, когда заходит на новый сайт, использующий ИИ.
- Перерасход места: На жестком диске накапливаются копии одинаковых моделей, так как кэш не объединяет их.
- Замедление работы: При каждом новом визите приложение тратит время на загрузку, вместо того чтобы использовать уже имеющиеся данные.
API Cross-Origin Storage меняет логику работы. Вместо привязки к URL файл сохраняется под уникальным хешем SHA-256. Если приложение А скачало модель и записало её в хранилище, приложение Б, работающее на совершенно другом домене, сможет найти этот файл по хешу и использовать его без повторной загрузки.
Важный нюанс: Система работает на основе хешей, а не ссылок. Это гарантирует, что файл будет распознан как идентичный, даже если он был загружен с разных серверов или зеркал, при условии, что его содержимое не изменилось ни на бит.
Управление доступом и безопасность
Разработчики получили инструменты для тонкой настройки видимости файлов, чтобы балансировать между эффективностью и безопасностью. При сохранении файла можно указать параметр origins, определяющий, кто имеет право его читать:
- *Глобальный доступ (`origins: «»`):** Файл виден всем сайтам в интернете. Это оптимальный выбор для общедоступных моделей ИИ и библиотек, где выгода от общей кэшизации максимальна.
- Ограниченный доступ: Можно указать конкретный список доменов (например,
[«site1.com», «site2.com»]). Это подходит для проприетарных моделей, которые компания хочет использовать на своих ресурсах, но не хочет делать общедоступными. - Внутренний доступ: Если параметр не указан, файл доступен только сайтам внутри одного домена.
Существует важное правило безопасности: права доступа можно расширять, но нельзя сужать. Если файл был сохранен как общедоступный, попытка ограничить доступ к нему позже будет проигнорирована. Это предотвращает сценарий, когда злоумышленник может скрыть общедоступный ресурс, пересохраняя его с ограничениями.
Для защиты конфиденциальности пользователей браузер может скрывать факт наличия файла, если он встречается слишком редко. Если ресурс есть только на одном-двух сайтах, его использование может стать цифровым идентификатором пользователя. В таких случаях браузер вернет ошибку, как будто файла нет, заставляя приложение загрузить его заново. Это предотвращает отслеживание истории посещений через наличие кэшированных файлов.
Стоит учесть: Ошибка при попытке получить файл из кэша не всегда означает его отсутствие. Это может быть защитная мера браузера. Приложения должны быть готовы обработать такую ошибку и автоматически переключиться на загрузку из сети.
Практическое применение в экосистеме ИИ
Библиотека Transformers.js уже интегрировала поддержку этого API в виде экспериментального режима. Для его активации разработчикам достаточно добавить одну строку кода перед инициализацией модели:
env.experimental_useCrossOriginStorage = true
После этого библиотека автоматически вычисляет хеш для каждого файла модели (например, весов Xenova/whisper-tiny.en) и пытается найти его в общем хранилище. Если файл найден, он подгружается мгновенно. Если нет — происходит обычная загрузка с последующим сохранением в общее хранилище для будущих обращений.
Этот подход также открывает возможности для гибкого выбора моделей. Приложение может проверить, какие версии модели (например, легкая или тяжелая версия Whisper) уже есть в кэше пользователя, и выбрать наиболее подходящую, не тратя время на загрузку.
На фоне этого: Внедрение технологии делает работу с тяжелыми ИИ-моделями в браузере экономически выгоднее и быстрее для всех участников рынка, так как снижает нагрузку на каналы связи и устройства пользователей.
Операционные последствия и скрытые нюансы
- Требование к инфраструктуре: Для тестирования и использования функционала на текущем этапе требуется установка специального расширения браузера, так как нативная поддержка в браузерах еще не реализована.
- Верификация целостности: При записи файла в хранилище браузер автоматически проверяет соответствие хеша содержимому. Это исключает риск подмены данных при загрузке с ненадежных источников, так как несоответствие приведет к ошибке записи.
- Риск для разработчиков: Использование флага
experimental_означает, что API может измениться без предупреждения. Код, зависящий от текущей реализации, может потребовать доработки после стандартизации. - Влияние на пользовательский опыт: Пользователи, посещающие множество сайтов с ИИ-функциями, получат заметное ускорение работы приложений после первой загрузки моделей, так как последующие запуски будут использовать общее хранилище.
Данное решение находится на ранней стадии, и команда Chrome приветствует обратную связь для доработки спецификации перед внедрением в ядро браузера.