【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
背景
上篇 blog
【Agent】【OpenCode】源码构建(Bun安装方式)
介绍了 Bun 工具集的安装方式,提到 curl https://.../install | bash 这种命令是现代开源工具中非常常见且标准化的安装方式,然后详细分析了该命令,其管道 | 的前半部分 curl 只是下载一个安装脚本,而不是 Bun 工具集本身,然后第二步 | bash 才是把下载到的脚本内容直接传给 bash 执行,安装脚本主要做三件事:检测系统,下载 Bun 二进制包,解压并配置环境变量,然后提到这种安装方式的风险点,建议可以先查看脚本内容后,再决定是否运行,最后分析了下安装脚本执行完后,几个可预见的变化,下面继续分析
OpenCode
上篇 blog 分析了 Bun 工具集的安装方式,下面再和其他安装方式对比下
| 方式 | 命令 | 优点 | 缺点 |
|---|---|---|---|
| 官方安装脚本 | `curl ... | bash` | 块,简单,自动配置 PATH |
| 包管理器 | sudo apt install bun |
安全,可审计 | Ubuntu 官方源暂未收录,且更新会比较慢 |
| 手动下载 | wget + unzip + chmod | 完全可控 | 需手动配置 PATH |
| npm 安装 | npm install -g bun |
传统经典 | 依赖 Node.js,速度较慢 |
目前综合来看,推荐官方脚本进行安装
安装成功之后

重启终端,输入
bash
bun --version
就可以看到 bun 工具集的安装信息

另外,之前 blog 【Agent】【OpenCode】源码构建(Bun介绍) 说,bun 的速度比 node/npm 快很多(包括启动速度,包安装速度等),下面正好来对比下
首先刚才上面确认了 bun 版本为 1.3.11,再看下 node 版本,为 v18.19.1

先测 node,在终端输入
bash
time node -e "console.log('hello')"
可以看到其实际耗时 62ms

再看 bun,终端输入
bash
time bun -e "console.log('hello')"

可以看到耗时 8ms,其速度大概是 node 的 8 倍,这种速度优势对小脚本尤其明显,这种性能上的提升有几大核心原因,之前简单提了下,下面详细分析下
首先核心原因之一:bun 用 Zig 语言写的,而不是 C++
Node.js:基于 V8(C++)+ libuv(C),启动时要加载大量的动态库 ,另外,JavaScript 引擎,事件循环,文件系统,网络模块等,都是不同团队写的,拼凑在一起,所以启动一个空的time node -e "console.log('hello')"也要花 50~100msBun:整个运行时用 Zig 语言从头写(作者 Jarred Sumner 自己写的 JS 引擎),零依赖,单二进制文件 (bun只有约 30MB,而 Node.js 要搭配npm,core modules 等),说到底,Node.js 绑定的东西太多,太重载了
核心原因二:Bun 的包管理器是数据库式的设计,而不是单纯文件复制
npm / yarn:安装依赖的过程 = 递归下载 tarball → 解压 → 复制文件到 node_modules,每个包都要完整拷贝,即使多个包依赖同一个子包,也会重复存储,此外,这些访问还是 I/O 密集型操作,在机械硬盘上尤其慢Bun:把所有包缓存为一个 SQLiTE 数据库(~/.bun/install.cache),bun install只写一个符号链接,并更新 JSON lockfile,所有代码在内存中通过共享内存映射直接读取,几乎不碰硬盘
OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Agent】【OpenCode】源码构建(TypeScript&JavaScript)