Vercel推出scriptc:TypeScript直接编译原生二进制,云成本直降,网站速度起飞
scriptc 是 Vercel 开源的 TypeScript 到原生编译工具,能将 TS 后端代码直接编译为独立二进制文件,无需 Node.js 运行时,大幅降低云服务器成本,同时提升网站响应速度。本文介绍其核心用途、使用门槛及与 Bun、Deno 编译方案的对比,适合想用 TypeScript 做高性能后端的开发者。
开篇:TypeScript 后端跑在 Node 上,烧钱又慢?
很多用 TypeScript 写后端的小伙伴都遇到过这种尴尬:代码写得爽,部署起来却头疼。Node.js 运行时吃内存、冷启动慢,在 serverless 或容器环境里,光 runtime 就占去不少资源,云账单蹭蹭涨。要是能把 TypeScript 直接编译成原生二进制,摆脱 Node 的束缚,那该多好?
最近 Vercel 在 GitHub 上开源了一个叫 scriptc 的项目,号称是 TypeScript-to-Native Compiler,虽然目前还处于早期阶段,但 star 数已经冲到 1.8k,关注度相当高。这套方案瞄准的就是上面说的痛点,让 TypeScript 代码编译成独立可执行文件,直接跑在操作系统上,没有中间商赚差价。
scriptc 是什么?一句话:TypeScript 的 AOT 编译器
简单来说,scriptc 是一个把 TypeScript(严格说是它的一个静态子集)编译成原生机器码的工具。它不像 ts-node 或 tsx 那样在运行时即时编译,也没有用 V8 引擎去解释执行,而是走 提前编译(AOT) 路线,直接把代码翻译成 LLVM IR,再生成目标平台的二进制文件。
这么干的好处很明显:
- 启动速度极快:没有 JIT 预热,二进制一跑起来就是全速。
- 内存占用低:不需要加载整个 Node.js 运行时,轻量得一批。
- 部署简单:一个二进制文件 scp 过去就能跑,不用装一堆依赖。
- 云成本直降:同样的机器配置,能扛更多请求;serverless 场景下冷启动时间缩短,费用更低。
不过要注意,scriptc 目前处理的是 TypeScript 的一个 受限子集,不支持动态类型、any、eval、Reflect 等高度动态的特性。它更像是一个系统编程级的 TypeScript,适合写网络服务、CLI 工具、边缘计算函数这类性能敏感的场景。
实际能用来做什么?副业/工具/效率视角的玩法
虽然 scriptc 离生产 ready 还有段距离,但它的方向很有搞头。从副业和效率工具的角度看,这几个应用场景值得关注:
1. 构建高性能 API 服务,省下大笔云账单
如果你在接外包或做自己的 SaaS 产品,后端用 TypeScript 写,通常得部署在 Node 容器里。换成 scriptc 编译成原生二进制后,同样的业务逻辑,内存占用可能从几百 MB 降到几十 MB,CPU 利用率也更高。这意味着你可以用更便宜的云实例,或者在同一台机器上塞更多服务,成本直接打下来。
2. 边缘计算函数:冷启动不再是噩梦
Vercel Edge Functions、Cloudflare Workers 这类边缘运行时,对冷启动时间很敏感。虽然它们本身已经很快,但如果你有复杂的计算逻辑,用 scriptc 编译成 Wasm 或原生模块,性能还能往上提一截。据项目介绍,scriptc 可以输出 LLVM bitcode,进一步编译到 Wasm,这就很适合在边缘跑一些轻量级但计算密集的任务,比如图片处理、加解密、实时数据转换。
3. CLI 工具开发:分发更简单
很多前端工具链用 TypeScript 写,发布到 npm 后用户还得装 Node。如果用 scriptc 编译成单个可执行文件,Windows/Mac/Linux 用户下载就能用,体验丝滑。这对于做效率工具、自动化脚本的副业项目来说,是个不错的加分项。
4. 嵌入式/物联网场景
Node.js 很难跑在资源受限的设备上,但 scriptc 编译的二进制可以。如果你在搞智能硬件、树莓派小项目,用 TypeScript 写逻辑然后编译进去,既享受了 TS 的类型安全,又不用操心 runtime 资源占用。
使用门槛高不高?
坦白讲,目前门槛不低。scriptc 还在早期开发阶段,需要手动编译 LLVM 依赖,配置工具链,而且只支持 TypeScript 的子集。如果你习惯了 Node 生态里 require 各种包,直接迁移大概率会碰壁。
不过对于喜欢折腾的开发者,官方提供了 Docker 镜像,能在容器里快速体验。基本流程是:
- 把 TS 代码写成符合 scriptc 规范的风格(强类型、无动态特性)
- 用
scriptc compile命令编译 - 得到原生可执行文件
项目本身是用 TypeScript 写的编译器,代码结构清晰,如果你对编译原理感兴趣,啃源码也能学到不少东西。
替代/相关方案对比:scriptc vs Bun vs Deno compile
提到 TypeScript 编译成本地代码,大家可能会想到 Bun 和 Deno 的 compile 功能。这里简单对比一下:
- Bun compile:Bun 能把 JS/TS 文件打包成一个可执行文件,但本质上还是带了一个 JavaScriptCore 引擎,运行时依然有 GC、JIT 等开销。它解决的是“分发方便”问题,没有完全摆脱 runtime。
- Deno compile:类似,Deno 编译出的可执行文件内嵌了 V8 引擎,生成的文件体积较大,启动时仍需加载运行时。
- scriptc:走的是纯原生编译路线,没有 JS 引擎,没有 GC(目前采用引用计数),性能更接近 C/Rust 写的程序。代价是舍弃了动态特性和庞大的 npm 生态。
所以,scriptc 定位更底层,适合对性能有极致要求、且愿意接受语言子集限制的场景。Bun/Deno compile 则更适合“能跑就行,但想方便分发”的普通应用。
总结:敢吃螃蟹的人,先享受降本增效
scriptc 不是要取代 Node.js,而是在“TypeScript 也能写系统级程序”这个方向上探路。对于想优化云成本、提升网站响应速度的开发者来说,这套方案提供了一个全新思路:用你熟悉的 TS 语法,编译出轻量高效的二进制,直接部署到生产环境。
虽然目前它还处于早期,生态几乎为零,但 Vercel 出品、社区关注度高涨,后续发展值得蹲一波。如果你手头有对性能敏感的小项目,不妨拿 scriptc 练练手,说不定就能把服务器账单砍掉一大截。
项目地址:https://github.com/vercel-labs/scriptc
注意:使用前请仔细阅读文档,了解当前支持的 TypeScript 子集和限制。
如果文章对你有帮助,欢迎请作者喝杯咖啡
评论(0)