Casino88

JetStream 3: Reinventing WebAssembly Benchmarking

JetStream 3.0 is a collaborative cross-browser benchmark that reinvents WebAssembly testing, solving the infinite-score problem and aligning with modern web use cases.

Casino88 · 2026-05-10 06:47:16 · Reviews & Comparisons

Welcome to an in-depth look at JetStream 3.0, the latest cross-browser benchmark suite developed in close collaboration with Google and Mozilla. This update goes beyond a simple refresh—it fundamentally rethinks how we measure performance, especially for WebAssembly (Wasm) workloads. Below we answer key questions about the suite, the challenges it addresses, and the engineering breakthroughs it represents. Use the links to jump to each topic.

What is JetStream 3.0 and why does it matter?

JetStream 3.0 is a major update to the JetStream benchmark suite, jointly announced by Apple (WebKit team), Google, and Mozilla. It serves as a critical tool for browser engine developers to drive performance improvements. The suite covers a wide range of work—JavaScript, WebAssembly, and modern web application patterns. What makes JetStream 3 significant is its fundamental shift in how performance is measured, particularly for WebAssembly. Earlier benchmarks often rewarded optimizations that were too narrow or became obsolete as engines improved. JetStream 3 emphasizes real‑world relevance, scaling tests to match today’s web applications, and rethinking Wasm measurement to avoid past pitfalls like the “infinite score” problem. This collaborative effort ensures that as the web evolves, the benchmark stays aligned with developer needs and user experiences.

JetStream 3: Reinventing WebAssembly Benchmarking
Source: webkit.org

How did WebAssembly benchmarking evolve from JetStream 2 to 3?

In JetStream 2, WebAssembly was still in its infancy, and the benchmark focused on large C/C++ applications (e.g., video games) that tolerated slow startup for high throughput. It scored Wasm in two distinct phases: Startup and Runtime. By the time JetStream 3 was designed, browsers had become remarkably efficient at instantiating Wasm modules. Startup times for many workloads dropped to near zero, making the phased approach obsolete. JetStream 3 abandons the separate startup/runtime scoring and instead measures Wasm as a single, integrated workload. This reflects the modern reality where Wasm is used in libraries, image decoders, and UI frameworks—tasks where startup time matters just as much as runtime performance. The new benchmark stresses both instantiation speed and execution efficiency in a unified way, challenging engines to optimize for the whole lifecycle of a Wasm module.

What was the “infinity problem” in JetStream 2?

The “infinity problem” emerged because JetStream 2 calculated sub-scores using the formula Score = 5000 / Time, where time was measured with Date.now() (millisecond precision). As browser engines optimized WebAssembly instantiation, startup times for small workloads dropped below 1 ms. Because Date.now() rounds down to the nearest millisecond, a time of 0.4 ms became 0 ms, making the score infinity (5000/0). While this sounds like a triumph, it actually rendered the benchmark useless—the infinite score dwarfed all other test results and prevented meaningful comparisons. The JetStream team had to patch the harness (version 2.2) to clamp the maximum score to 5000. This workaround highlighted that the benchmark was no longer fit for purpose: modern WebAssembly engines had outgrown the measurement approach.

How did browsers outgrow JetStream 2’s Wasm subtests?

Over the years, browser engines—especially JavaScriptCore in WebKit—made tremendous progress in WebAssembly startup time. Optimizations that once shaved 0.1 ms off a 100 ms workload became indistinguishable from noise. But once initial startup was reduced to just 2 ms, that same 0.1 ms improvement suddenly represented a 5% gain. Engines pursued micro‑optimizations relentlessly, leading to a situation where for certain small workloads, startup time effectively reached zero. The JetStream 2 subtests were designed for an era when startup mattered less; they couldn’t distinguish between engines that were all “too fast.” This created a need for more demanding, realistic benchmarks that stress instantiation in the context of larger applications. JetStream 3 addresses this by using bigger Wasm modules and measuring total time from start to finish, ensuring that even tiny improvements still matter and are correctly captured.

What key improvements does JetStream 3 bring to modern web performance measurement?

JetStream 3 introduces several crucial changes: First, it replaces the two‑phase Wasm scoring with a unified metric that combines instantiation and execution. Second, it uses high‑resolution timing (e.g., performance.now()) to capture sub‑millisecond differences, eliminating the “infinity” problem. Third, the benchmark includes larger, more complex Wasm modules that better represent real‑world usage—such as image decoders, compression libraries, and UI code. Fourth, workload sizes are scaled to challenge modern hardware and engines, preventing premature saturation. Fifth, the suite is designed collaboratively across browser vendors, ensuring fairness and relevance. Finally, JetStream 3 incorporates a broader set of JavaScript benchmarks reflecting contemporary web patterns (e.g., async/await, proxy objects). These improvements mean that optimizations that help in JetStream 3 will likely benefit actual web applications, not just synthetic tests.

How does JetStream 3 reflect the real‑world use of WebAssembly today?

WebAssembly has moved beyond large game engines to become a staple in everyday web development. Libraries use Wasm for parsing, compression, and image processing; UI frameworks leverage it for performance‑critical rendering; and many mobile web apps rely on Wasm for offline capabilities. JetStream 3 adapts its workloads to mirror these scenarios: it includes benchmarks that simulate loading a Wasm‑based image decoder, instantiating a parsing library, and running a compact algorithm in a web worker. By measuring end‑to‑end performance (from fetch to execution), JetStream 3 captures the user‑perceived impact of Wasm—especially on page load. This shift ensures that improvements to Wasm startup and throughput directly translate into faster, more responsive web applications. It also pushes engine developers to optimize for the diverse, lightweight Wasm use cases that power today’s web.

Recommended