Как Bergamot перенёс локальный перевод в WebAssembly

Движок Bergamot для дополнения Firefox Translations выполнял перевод на компьютере пользователя. В техническом разборе Mozilla описала, как систему на базе C++‑фреймворка Marian адаптировали для работы в браузере через WebAssembly.

От прототипа к загрузке по требованию

Первый прототип включал модели и словари в виртуальную файловую систему Emscripten, из‑за чего при добавлении языков увеличивался весь пакет: пользователь загружал и ненужные модели. Разработчики заменили такую упаковку API, принимающим отдельные байтовые буферы, — благодаря этому дополнение стало загружать только нужные языковые пары независимо от движка.

Где искали ускорение

Профилирование показало узкие места в матричных умножениях с 8‑битными операндами и накладные расходы при обработке исключений. Команда оптимизировала эти участки и инструментальную цепочку сборки. В одном из приведённых тестов перевод с английского на немецкий ускорился примерно с 95 до 870 слов в секунду на той же конфигурации ноутбука.

Это измерения разработчиков дополнения и конкретных моделей; они не гарантируют такой же скорости на других устройствах или для других языковых пар. Описанные экспериментальные инструкции и отключённая многопоточность относятся к этой реализации, а не к универсальным ограничениям WebAssembly.