同一个算法,JavaScript 和 Rust WASM 各跑一遍
每项先预热 1 次,再取 3 次运行的中位数 | 结果列 ✓ 表示两边算出的结果完全一致
把同一个算法分别用 JavaScript 和 Rust 写一遍,在同一个浏览器里各跑一次,直接比较耗时。两边的实现逐行对应,结果也必须完全一致,这样比较的才是语言和运行时本身,而不是算法差异。
fib(n) = fib(n−1) + fib(n−2) 的朴素递归,调用次数随 n 指数增长,几乎只有函数调用和整数加法,用来衡量函数调用开销。sort_unstable(模式消除快速排序),JS 使用 Uint32Array.prototype.sort。WASM 并不总是更快。现代 JS 引擎的 JIT 会把类型稳定的热点循环编译成接近原生的机器码,差距可能只有百分之几十;像 TypedArray.sort 这样的内置函数本身就是引擎用 C++ 实现的。WASM 的优势在于性能稳定、可预测:没有 JIT 预热,没有垃圾回收停顿,也不会因为类型变化而退回到慢速路径。
sieveJS、fibJS 等),用 performance.now() 计时。bench_sieve、bench_fib、bench_sort、bench_matmul)。它们只接收一个数字参数、返回一个数字,跨边界的开销可以忽略。opt-level = "s"(优化体积)和 LTO。改成 opt-level = 3 可能更快,但 .wasm 文件会更大。i × i 之前先检查 i ≤ n / i,因为 wasm32 上的 usize 只有 32 位。源码crates/algorithms/benchmark/src/lib.rswww/benchmark/index.js含逐行对应的 JS 版本