Benchmark JavaScript and TypeScript Instantly

Write, share, and compare JavaScript or TypeScript snippets in the browser, then inspect QuickJS, V8, Node, Deno, Bun, and Node JIT artifacts with Deep Analysis.

10k+

Tests Created

1M+

Benchmarks Run

100%

Free & Open Source

0

Ads or Tracking

Everything you need to test code speed

Built from the ground up for modern JavaScript development with a focus on speed, accuracy, and developer experience.

Lightning Fast Runner
Powered by a modern, secure iframe sandbox and optimized benchmark engine based on tinybench for highly accurate ops/sec calculations.
Share & Compare
Easily save and share your test cases with a simple URL. Compare different approaches and browsers to find the absolute fastest solution.
JavaScript + TypeScript Snippets
Write plain JavaScript or TypeScript with typed setup data, generic helpers, and discriminated unions. TypeScript is compiled where engines need JavaScript, while Deno and Bun can run native `.ts`.
Deep Analysis Engine
Go beyond browser results with server-side analysis using dual engines — QuickJS-WASM for deterministic baselines and V8 Firecracker microVMs for realistic JIT profiling.
Memory Response
See how snippets behave under QuickJS memory-limit sweeps while V8 stays on a canonical single-core JIT run for apples-to-apples results.
Node JIT Viewer
Capture V8 optimized-code output during Node runs, then inspect source-linked optimized blocks, assembly, and hot JIT paths in a shareable viewer.
Node CPU Profiles
Capture Chrome DevTools-compatible `.cpuprofile` files during Node runtime runs, then inspect hot functions, call frames, and burn charts in CPUpro.
Open Source & Free
Completely free to use, ad-free, and open source. Join the community to help improve the next generation of jsPerf.
Node CPU profiling

Open real CPU profiles from benchmark runs

Deep Analysis can capture a Node `.cpuprofile` alongside runtime results. Open it in jsPerf's profile page, download it for Chrome DevTools, or inspect flame graphs and burn charts in CPUpro.

Profile the benchmark loop

The profiler starts around the measured Node run, so setup and teardown noise stay out of the primary sample window.

Store once, share by URL

Large profile payloads live as separate CPU profile documents while result cards keep lightweight references.

Use a profile with real work

The synthetic commerce example gives the profiler a richer workload than the older slim sample profile.

CPUpro report · Node.js profile
CPUpro report showing Node.js profiling time, samples, call frames, and flame graph controls
Burn chart, hot paths, and call-frame tables
Node JIT artifact viewer

Inspect the optimized code Node actually runs

Deep Analysis can capture V8 optimized-code output alongside Node runtime results. Open the JIT viewer to map optimized blocks back to benchmark source, search generated assembly, and share the exact artifact with teammates.

Source-linked optimized blocks

Jump between V8 optimized-code sections and the original benchmark lines that triggered them.

Store once, share by URL

Large JIT artifacts live separately while benchmark result cards keep lightweight references to each captured output.

Pair JIT evidence with runtime data

Use the synthetic commerce benchmark to compare ops/sec, CPU-profile refs, and optimized-code captures in one workflow.

JIT source map viewer · Node.js V8
Optimized blocks
18

Captured from the Node runtime path for the commerce benchmark.

normalizePolymorphic
hot path
routingBySku.get
inline cache
total += order.quantity
TurboFan
Source mapped assemblyf727ef...
// synthetic commerce benchmark
const route = routingBySku.get(order.sku) ?? 0
total += order.quantity * route

--- Optimized code ---
0x...  movq rdx,[rbp-0x38]
0x...  cmpq [rdx+0x17],rax
0x...  jnz  deopt_inline_cache
Source map, optimized blocks, and raw V8 output
TypeScript support

Benchmark typed code without rewriting it to JavaScript first

Write TypeScript setup, teardown, and test bodies directly. jsPerf keeps the original typed source for sharing and reports, then prepares the right runtime form for each engine.

Typed snippets in the editor

Use interfaces, discriminated unions, generics, typed arrays, and type annotations in benchmark cases.

Comparable runtime behavior

Browser, QuickJS, V8, and Node run compiled JavaScript. Deno and Bun can run native TypeScript for cross-runtime comparison.

Seed benchmarks included

Start from the synthetic commerce benchmark, then adapt the typed setup and runtime-friendly data shape to your real workload.

jsperf.net/synthetic-commerce-jit-cpu-profile
TypeScript benchmarkTS
type Product = {
  category: 'book' | 'tool' | 'game'
  price: number
  stock: number
}

function sumBy<T, K extends string>(
  items: T[],
  keyOf: (item: T) => K,
  valueOf: (item: T) => number
) {
  // benchmark typed helpers
}

Browser

compiled JS

Node/V8

compiled JS

Deno/Bun

native TS

Server-Side Engine

Deep Performance Analysis

Browser benchmarks vary with every run. Deep Analysis runs your code in controlled server-side environments to deliver reproducible, canonical results with predictive insights.

QuickJS-WASM

A deterministic JavaScript interpreter compiled to WebAssembly. No JIT, no GC pauses, no variance — pure algorithmic cost measurement for reproducible baselines.

DeterministicReproducible

V8 Firecracker MicroVM

Full V8 engine inside an isolated Firecracker microVM. Captures real JIT compilation behavior, inline caching, and garbage collection effects.

JIT ProfilingIsolated

Static Complexity

Estimates time and space complexity for each benchmark, including loops, collection helpers, allocations, and async scheduling signals.

Big-OTime + space

Prediction Model

Compares interpreter memory sweeps with canonical V8 JIT results to estimate JIT amplification, memory response, and engine-specific behavior.

MemoryPrediction
Brand New

Turn benchmarks into shareable presentation reports

Turn any benchmark run into a polished slide deck. Walk teammates through the methodology, the numbers, the JIT amplification, and the recommendation — on screen, in fullscreen presenter mode, or printed straight to PDF.

  • Full-bleed slide viewer with keyboard navigation, fullscreen, and a mobile-optimized layout.
  • One immutable share URL — send it to a Slack channel, embed in a doc, or open in a meeting.
  • Print-ready PDF export with light theme baked in for crisp handouts.
See an example reportDonor-supported feature
jsperf.net/r/rvtu7jfm
Slide 4 of 7 — Recommendationjsperf.net

for...of with Map.entries() is the winner

Outperforms forEach() by 2.3× under canonical V8 with stable JIT amplification.

QuickJS

412k ops/s

V8

9.4M ops/s

JIT amp.

22.8×

Help keep jsPerf.net free, fast, and ad-free

Deep Analysis runs on real Firecracker microVMs, multi-runtime workers, Benchmark Doctor checks, and static complexity analysis — all of it costs real money to operate. If jsPerf saves you time, please consider supporting the project. Donors get higher rate limits, a Boosted badge, Benchmark Doctor guidance, and access to shareable presentation reports with complexity slides.

Already donated? to claim your boost.