Skip to content

Releases: longbridge/quickjs-jit

v0.12.11

Choose a tag to compare

@huacnlee huacnlee released this 30 Sep 17:08

What's Changed

  • docs(bench): narrow README performance tables by @huacnlee in #32
  • fix(jit): restore gpui-shell performance regressed in 0.12.10 by @huacnlee in #33

Full Changelog: v0.12.10...v0.12.11

v0.12.10

Choose a tag to compare

@huacnlee huacnlee released this 30 Sep 02:43

What's Changed

  • perf(jit): V8/Bun roadmap and P0-P4 implementation by @huacnlee in #30
  • docs(bench): refresh three-engine matrix for 889f7c1 (P0–P4) by @huacnlee in #31

Full Changelog: v0.12.9...v0.12.10

v0.12.9

Choose a tag to compare

@huacnlee huacnlee released this 18 Sep 06:07

What's Changed

  • perf(jit): add bounded facts, effects, and exact recovery by @huacnlee in #29

Full Changelog: v0.12.8...v0.12.9

v0.12.8

Choose a tag to compare

@huacnlee huacnlee released this 16 Sep 14:02

What's Changed

  • perf: stabilize mixed workloads and reduce JIT overhead by @huacnlee in #24
  • docs(perf): require Bun comparisons and track mixed workload regression by @huacnlee in #25
  • perf(jit): specialize mixed calls and native property guards by @huacnlee in #26
  • feat: Introduce semantic SSA and bounded effect-free inlining by @huacnlee in #27

Full Changelog: v0.12.7...v0.12.8

v0.12.7

Choose a tag to compare

@huacnlee huacnlee released this 07 Sep 06:41

What's Changed

  • perf(jit): reduce native entry, feedback, and PC validation overhead by @huacnlee in #18
  • perf(jit): reuse native timing storage and settle Tier 2 benchmarks by @huacnlee in #19
  • perf(jit): consolidate feedback and tier-state lookups by @huacnlee in #20
  • docs(perf): compare main engines and set next optimization targets by @huacnlee in #21

Full Changelog: v0.12.6...v0.12.7

v0.12.6

Choose a tag to compare

@huacnlee huacnlee released this 03 Sep 02:08

What's Changed

  • jit: M2 core opcodes, exact slow paths, Tier 2 ownership fixes, and amortized native entry by @huacnlee in #16

Full Changelog: v0.12.5...v0.12.6

v0.12.5

Choose a tag to compare

@huacnlee huacnlee released this 02 Sep 11:28
0128440

What's Changed

  • jit: complete M1 element-loop and call-heavy optimizations by @huacnlee in #4
  • feat: categorize JIT failures and prepare 0.12.5 by @huacnlee in #15

Full Changelog: v0.12.2...v0.12.5

v0.12.2

Choose a tag to compare

@huacnlee huacnlee released this 01 Sep 09:22

What's Changed

Performance progress

Lower latency is better. Published results use five discarded warmup processes, 30 interleaved fresh processes, ten independent one-second throughput windows, and identical checksums across engines.

Focused compute kernels

Scenario QuickJS QuickJS + forced Tier 2 Bun 1.4.0 QuickJS vs JIT JIT vs Bun
Scalar loop 836.946 us 25.837 us 12.983 us JIT 32.39x faster JIT 1.99x slower
Numeric loop 823.818 us 25.715 us 12.358 us JIT 32.04x faster JIT 2.08x slower
Iterative Fibonacci, fib(40) x 2000 33.780 ms 753.907 us 1.093 ms JIT 44.81x faster JIT 1.45x faster

These kernels demonstrate a profitable machine-code path using guarded unboxed Int32/Float64 SSA, native arithmetic, loop-carried Phi values, exact deoptimization, and compiled-to-compiled scalar calls. They are focused forced-Tier-2 results, not a claim that arbitrary JavaScript is 30–45x faster.

Broad JavaScript matrix

The broad run compares interpreter, forced Tier 1, forced Tier 2, automatic tiering, and Bun using the same scripts and sampling policy. A JIT result is shown only if the worker actually entered native code; N/A means interpreter-only execution and is not reported as JIT performance.

Workload QuickJS Best native JIT Bun 1.4.0 Result
Float64-dense 2.829 ms 322.982 us (Tier 2) 462.551 us JIT 8.76x faster than QuickJS and 1.43x faster than Bun
Strings / RegExp 19.379 ms N/A 2.436 ms No native entry; Bun 7.96x faster than QuickJS
Arrays / TypedArrays 4.677 ms 13.141 ms (Tier 1) 770.318 us JIT 2.81x slower than QuickJS; Bun 17.06x faster than JIT
Objects / polymorphic shapes 6.687 ms N/A 829.039 us No native entry; Bun 8.07x faster than QuickJS
Calls / recursion / closures 7.389 ms N/A 1.595 ms No native entry; Bun 4.63x faster than QuickJS
JSON codec 79.053 ms N/A 8.844 ms No native entry; Bun 8.94x faster than QuickJS
Map / Set / BigInt 15.308 ms N/A 2.171 ms No native entry; Bun 7.05x faster than QuickJS
Exceptions / Promise / async 2.483 ms N/A 741.949 us No native entry; Bun 3.35x faster than QuickJS

Float64 is profitable and exceeds Bun for this specific kernel. Arrays/TypedArrays reach Tier 1 but remain substantially unprofitable. The other six workers provide honest QuickJS/Bun reference points and identify native-coverage work instead of presenting fallback timing as acceleration.

New Contributors

Full Changelog: https://github.com/longbridge/rquickjs/commits/v0.12.2