Набор тестов производительности JetStream 3.0 стал первым крупным обновлением за более чем шесть лет — предыдущая версия JetStream 2 вышла в 2019 году. Над новой версией совместно работали инженеры Apple, Google, Mozilla и других компаний, развивающих браузерные движки JavaScript и WebAssembly. JetStream 3 перешёл на более крупные, приближённые к реальности тесты, значительно расширил покрытие WebAssembly и обновил методику подсчёта результатов.

Зачем нужен JetStream и чем он отличается от Speedometer
JetStream входит в тройку основных браузерных бенчмарков проекта BrowserBench наряду со Speedometer и MotionMark. Если Speedometer измеряет отзывчивость интерфейса и работу с DOM, то JetStream фокусируется на вычислительно ёмких задачах: парсинге, форматировании, алгоритмах, интерпретаторах, симуляциях, криптографии и игровых движках.
BrowserBench — открытый проект, объединяющий несколько браузерных бенчмарков (JetStream, Speedometer, MotionMark). Разрабатывается совместно инженерами основных браузерных движков по модели открытого управления на основе консенсуса.
JetStream можно запускать не только в браузере, но и в оболочках движков (например, d8 для V8) — без полноценного браузера. Это позволяет разработчикам движков быстрее итерировать и получать стабильные результаты, а производителям оборудования — тестировать платформы в эмуляторах.
Открытая разработка и масштаб изменений
Как и Speedometer 3, JetStream 3 создавался по модели открытого управления: новые тесты добавлялись только при согласии всех участников. За полтора года разработки в репозиторий проекта влили более 200 pull request, затронувших свыше 500 файлов в 70 с лишним тестах.
Команда BrowserBench объясняет необходимость обновления так называемым законом Гудхарта: когда показатель становится целью, он перестаёт быть хорошим показателем. Со временем движки оптимизируются под конкретные паттерны бенчмарка, и результаты теряют корреляцию с реальной производительностью.
Сдвиг к реальным приложениям
Главное изменение в JetStream 3 — переход от микробенчмарков к крупным, приближённым к реальности нагрузкам. Микробенчмарки полезны для отлова регрессий, но в долгосрочной перспективе приводят к переоптимизации под конкретные паттерны, которая иногда вредит общей производительности.
Часть мелких тестов удалена (например, HashSet-wasm), а часть понижена в весе (SunSpider объединён в один элемент). Также исправлены тесты, в которых генерация случайных входных данных занимала больше времени, чем сам алгоритм.
WebAssembly: 12 тестов и новые возможности
WebAssembly получил наибольшее внимание в этом обновлении. JetStream 3 включает 12 тестов WebAssembly — теперь они составляют 15-20% от общего набора против 7% в JetStream 2. Тесты охватывают пост-MVP возможности: SIMD, обработку исключений и WasmGC.
WasmGC (WebAssembly Garbage Collection) — расширение спецификации WebAssembly, которое добавляет структуры и массивы как типы данных. Языки со сборкой мусора (Java, Kotlin, Dart, C#) при компиляции в WebAssembly могут использовать сборщик мусора хостовой виртуальной машины, а не включать собственный в скомпилированный модуль.
Набор инструментариев компиляции расширен с одного лишь C++ (через Emscripten) до пяти новых: J2CL (Java), Dart2wasm, Kotlin/Wasm, Rust и .NET (C#). Старые тесты asm.js удалены — WebAssembly полностью замещает эту устаревшую технологию.
Среди новых тестов WebAssembly — криптографическое хеширование паролей (argon2), клиентское машинное обучение с SIMD (Transformers.js), кросс-платформенные UI на Dart и Kotlin с WasmGC, база данных SQLite3, а также интерпретатор .NET как пример полноценной языковой среды выполнения поверх WebAssembly.
Новые тесты JavaScript
Набор JavaScript-тестов тоже значительно расширен. Появились тесты начального запуска (startup), которые измеряют парсинг и первое выполнение кода — ситуацию, близкую к реальной загрузке страницы.
Новые тесты JavaScript включают: ядро 3D-движка Babylon.js, стресс-тест BigInt на эллиптических кривых (bigint-noble-ed25519), асинхронные паттерны на промисах и async-функциях (doxbee), токенизатор JavaScript и JSX (js-tokens), реализацию DOM на чистом JavaScript с библиотекой D3 (jsdom-d3-startup), стресс-тест генераторов (lazy-collections), начальный запуск библиотеки управления состоянием MobX, подсветку синтаксиса через PrismJS, тесты прокси-объектов, приватные и публичные поля классов ES6 (raytrace classes), систему частиц на Three.js, компиляцию TypeScript v5.9, валидацию строк через validator.js и серверный рендеринг React (web-ssr).
SIMD (Single Instruction, Multiple Data) — набор инструкций процессора, который позволяет выполнять одну операцию сразу над несколькими элементами данных. В контексте WebAssembly SIMD ускоряет вычисления в задачах машинного обучения, обработки изображений, криптографии и физических симуляций.
Изменения в методике подсчёта
Система оценки WebAssembly-тестов переработана. Теперь время компиляции и создания экземпляра модуля учитывается в первой итерации, а не измеряется отдельно. В JetStream 2 движки оптимизировали время запуска настолько агрессивно, что для мелких модулей оно достигало нуля миллисекунд — и формула подсчёта давала бесконечный результат.
Большие артефакты тестов теперь загружаются в сжатом виде и распаковываются до начала измерений, что снижает сетевой трафик. Для агрегации результатов используется геометрическое среднее — оно гарантирует, что пятипроцентное ускорение любого подтеста одинаково влияет на общий балл.
Заключение
JetStream 3.0 отражает текущее состояние веб-платформы: WebAssembly используется не только в играх, но и в библиотеках, декодерах изображений и UI-фреймворках, а JavaScript-приложения работают с 3D-движками, серверным рендерингом и компиляцией TypeScript. Запустить тест можно прямо в браузере — результат покажет, насколько эффективно движок справляется с вычислительно ёмкими задачами. Команда BrowserBench планирует обновлять JetStream регулярнее, в том числе пересобирая тесты актуальными инструментариями.