Javascript引擎node bun deno比较

在寻找高速Javascript引擎时,看到网上这篇比较文章,于是把它们都下载下来测试。

  1. node 下载和安装

    wget https://nodejs.org/dist/v24.12.0/node-v24.12.0-linux-arm64.tar.xz
    2025-12-16 08:52:05 (12.0 MB/s) - 已保存 "node-v24.12.0-linux-arm64.tar.xz" [29724424/29724424])

    cd /par/node
    tar xf ../node-v24.12.0-linux-arm64.tar.xz

    export PATH=$PATH:/par/node/node-v24.12.0-linux-arm64/bin

    node
    Welcome to Node.js v24.12.0.
    Type ".help" for more information.

  2. bun 下载和安装

    wget https://github.com/oven-sh/bun/releases/latest/download/bun-linux-aarch64.zip

    2025-12-16 10:40:19 (72.2 KB/s) - 已保存 "bun-linux-aarch64.zip" [37796247/37796247])

    cd /par/deno
    unzip ../bun-linux-aarch64.zip
    export PATH=$PATH:/par/bun/bun-linux-aarch64

    bun
    Bun is a fast JavaScript runtime, package manager, bundler, and test runner. (1.3.4+5eb2145b3)

    Usage: bun <command> [...flags] [...args]

    Commands:
    run ./my-script.ts Execute a file with Bun
    lint Run a package.json script
    test Run unit tests with Bun
    x next Execute a package binary (CLI), installing if needed (bunx)
    repl Start a REPL session with Bun
    exec Run a shell script directly with Bun

    install Install dependencies for a package.json (bun i)
    add tailwindcss Add a dependency to package.json (bun a)
    remove left-pad Remove a dependency from package.json (bun rm)
    update elysia Update outdated dependencies
    audit Check installed packages for vulnerabilities
    outdated Display latest versions of outdated dependencies
    link [<package>] Register or link a local npm package
    unlink Unregister a local npm package
    publish Publish a package to the npm registry
    patch <pkg> Prepare a package for patching
    pm <subcommand> Additional package management utilities
    info @shumai/shumai Display package metadata from the registry
    why hono Explain why a package is installed

    build ./a.ts ./b.jsx Bundle TypeScript & JavaScript into a single file

    init Start an empty Bun project from a built-in template
    create elysia Create a new project from a template (bun c)
    upgrade Upgrade to latest version of Bun.
    feedback ./file1 ./file2 Provide feedback to the Bun team.

    <command> --help Print help text for command.

    Learn more about Bun: https://bun.com/docs
    Join our Discord community: https://bun.com/discord

  3. deno 下载和安装

    curl -fsSL https://deno.land/x/install/install.sh -o deno.txt
    curl -s https://dl.deno.land/release-latest.txt
    v2.6.1
    wget https://dl.deno.land/release/v2.6.1/deno-aarch64-unknown-linux-gnu.zip

    2025-12-16 13:55:57 (66.0 KB/s) - 已保存 "deno-aarch64-unknown-linux-gnu.zip" [44736082/44736082])
    cd /par/deno
    unzip ../deno-aarch64-unknown-linux-gnu.zip

    export PATH=$PATH:/par/deno

可见三种引擎的大小类似,都是30-40MB左右。不带任何参数执行命令,node进入交互式环境,bun输出帮助信息,deno无输出。

  1. 性能比较

采用前文的block_solver_core.js求解程序,注释掉原文的随机打乱函数调用,以保持各次测试的一致性。

再把原文

复制代码
// 如果直接运行此文件,执行主函数
if (typeof module !== 'undefined' && module.exports) {
    module.exports = {
        parseInput,
        solveBlockPuzzle,
        formatMatrix,
        BLOCKS,
        BLOCK_SIZES
    };
    
    // 如果通过命令行调用,执行主函数
    if (require.main === module) {
        main();
    }
}

// 浏览器环境直接执行
if (typeof window !== 'undefined') {
    main();
}

改为直接调用main();以适应不同的引擎。

小数据量测试

复制代码
node block_solver_core.js "4,4,[A,4,B,6]"
求解 4x4 网格的方块覆盖问题...
方块配置: {"A":4,"B":6}
求解时间: 4.61ms

找到解决方案:
A A A A
B B B B
B B B B
B B B B

bun block_solver_core.js "4,4,[A,4,B,6]"
求解 4x4 网格的方块覆盖问题...
方块配置: {"A":4,"B":6}
求解时间: 5.38ms

找到解决方案:
A A A A
B B B B
B B B B
B B B B

deno block_solver_core.js "4,4,[A,4,B,6]"
求解 4x4 网格的方块覆盖问题...
方块配置: {"A":4,"B":6}
求解时间: 20.92ms

找到解决方案:
A A A A
B B B B
B B B B
B B B B

速度是 node >bun > deno。

中等数据量

复制代码
node block_solver_core.js "10,6,[C,2,D,4,L,2,O,2,S,2,T,2,X,2]"
求解 10x6 网格的方块覆盖问题...
方块配置: {"C":2,"D":4,"L":2,"O":2,"S":2,"T":2,"X":2}
求解时间: 105.62ms

找到解决方案:
D D X C C C X C C C
D X X X D X X X O O
O O X T D D X L O O
O O T T T L L L L L
D S S S S T T T D L
D D S S S S T D D L
bun block_solver_core.js "10,6,[C,2,D,4,L,2,O,2,S,2,T,2,X,2]"
求解 10x6 网格的方块覆盖问题...
方块配置: {"C":2,"D":4,"L":2,"O":2,"S":2,"T":2,"X":2}
求解时间: 116.51ms

找到解决方案:
D D X C C C X C C C
D X X X D X X X O O
O O X T D D X L O O
O O T T T L L L L L
D S S S S T T T D L
D D S S S S T D D L
deno block_solver_core.js "10,6,[C,2,D,4,L,2,O,2,S,2,T,2,X,2]"
求解 10x6 网格的方块覆盖问题...
方块配置: {"C":2,"D":4,"L":2,"O":2,"S":2,"T":2,"X":2}
求解时间: 60.66ms

找到解决方案:
D D X C C C X C C C
D X X X D X X X O O
O O X T D D X L O O
O O T T T L L L L L
D S S S S T T T D L
D D S S S S T D D L

大数据量,这里有个现象,如果打乱,有可能在短时间內求出解,也有可能超时求不出解,如果不打乱,一定超时求不出解,为了避免求不出解的情况,把原文

复制代码
class DancingLinksSolver {
    constructor(columns, maxTimeMs = 10000) {

中的10000改为100000。"20,30,[C,20,D,40,L,20,O,20,S,20,T,20,X,20]"仍然求不出来,只得出了最多时间的结果。

相关推荐
逑之38 分钟前
C语言笔记10:sizeof和strlen,指针与数组
c语言·笔记·算法
求梦82042 分钟前
【力扣hot100题】旋转图像(15)
算法·leetcode·职场和发展
king王一帅3 小时前
Incremark Solid 版本上线:Vue/React/Svelte/Solid 四大框架,统一体验
前端·javascript·人工智能
C雨后彩虹5 小时前
任务最优调度
java·数据结构·算法·华为·面试
SmartRadio7 小时前
CH585M+MK8000、DW1000 (UWB)+W25Q16的低功耗室内定位设计
c语言·开发语言·uwb
rfidunion7 小时前
QT5.7.0编译移植
开发语言·qt
少林码僧7 小时前
2.31 机器学习神器项目实战:如何在真实项目中应用XGBoost等算法
人工智能·python·算法·机器学习·ai·数据挖掘
钱彬 (Qian Bin)7 小时前
项目实践15—全球证件智能识别系统(切换为Qwen3-VL-8B-Instruct图文多模态大模型)
人工智能·算法·机器学习·多模态·全球证件识别
rit84324997 小时前
MATLAB对组合巴克码抗干扰仿真的实现方案
开发语言·matlab
大、男人7 小时前
python之asynccontextmanager学习
开发语言·python·学习