微软 TypeScript 团队推出了 'tsc-go',这是一个用 Go 编写的 TypeScript 编译器的实验性原生移植。此举旨在显著改善开发者体验,将构建时间缩短至十分之一,降低首次启动编辑器延迟,并通过消除 Node.js 运行时依赖来减少内存占用。在 VS Code(100 万行代码)等大型代码库上的性能基准测试表明,类型检查时间从 77 秒降至 7.5 秒。该移植项目仍处于实验阶段,尚缺少部分功能,但计划最终作为 TypeScript 7.0 发布,并提供完善的迁移策略。此举措旨在解决大型项目的可扩展性挑战,并支持需要更快语义分析的 AI 驱动的全新开发者体验。我们鼓励开发者积极参与预览体验和贡献。
主要内容
1. 原生 Go 编译器移植带来显著的性能提升
'tsc-go' 项目旨在通过消除 TypeScript 编译器的 Node.js 运行时开销,将构建时间提升至 10 倍并减少内存占用。
2. 已验证大型代码库的类型检查性能可提升至 10 倍
在 VS Code 和 Playwright 等大型项目上的测试表明,类型检查时间减少了一个数量级,从而解决了大型代码库的可扩展性问题。
3. 解决关键开发者体验难题,赋能 AI 应用
更快的编译器性能缩短了大型项目的编辑器启动时间,并能够以更低的延迟进行语义分析,从而支持现代 AI 驱动的开发者工具。
4. 实验性移植是 TypeScript 7.0 的技术先导
原生移植目前处于实验阶段,代表了微软未来的发展方向,并计划在即将发布的 TypeScript 7.0 中采用完善的迁移策略。
微软发布 TypeScript 原生编译器 tsc-go:性能提升10倍
微软 TypeScript 团队宣布推出实验性原生编译器端口 tsc-go,旨在将 TypeScript 编译器(tsc)的构建时间缩短10倍,显著减少编辑器冷启动时间,并大幅优化内存使用。此项目通过用 Go 语言重写编译器,消除了 Node.js 运行时的开销。
项目背景与动机
TypeScript 项目首席架构师 Anders Hejlsberg 阐述了 tsc-go 的开发动机:
“TypeScript 的核心价值在于提供出色的开发者体验。随着代码库规模扩大,TypeScript 在超大规模项目中的性能表现有时无法满足需求。开发者在大项目中需要在合理的编辑器启动时间与获取完整代码视图之间做出取舍。AI 驱动的新体验需要更低的延迟来处理大量语义信息。我们还希望通过快速的命令行构建验证整个代码库的健康状态。”
传统的 tsc 编译器运行在 Node.js 上,在大型项目或频繁的小型构建中,启动时间较长。新的 tsc-go 编译器使用 Go 语言编写并编译为原生代码,无需 Node.js 的启动开销。
性能表现
微软在博客中展示了 tsc-go 的性能提升:
- VS Code 代码库(100万行):类型检查时间从 77秒 减少到 7.5秒,性能提升10倍。Playwright 代码库(35.6万行):类型检查时间从 11秒 减少到 1秒。RxJS 代码库(2100行):类型检查时间从 1.1秒 减少到 0.1秒。
此外,tsc-go 在编辑器场景下的项目加载时间也提升了 8倍(以 Visual Studio 代码库为例),显著缩短了从打开编辑器到代码库完全加载的等待时间,提升了开发者体验。博客中未提供增量构建的性能数据。
项目现状与未来规划
tsc-go(代号 Corsa)目前仍为实验性项目,尚缺乏部分功能,如增量构建支持(详见 What works so far)。微软计划在原生代码库达到与现有 TypeScript 足够的兼容性后,将其作为 TypeScript 7.0 发布,并提供平滑的迁移路径:
“我们将继续维护 6.x 版本的 JavaScript 代码库,直到 TypeScript 7+ 达到足够的成熟度和采用率。”
社区反响与技术选择
开发者在 Reddit 和 Hacker News 上讨论了为何选择 Go 而非 Rust。TypeScript 开发负责人 Ryan Cavanaugh 解释道:
“我们面临两个选择:用 Rust 从头重写,可能耗费数年且生成不兼容的 TypeScript 版本;或用 Go 进行端口移植,大约一年内完成,保持高度的语义兼容性和极具竞争力的性能。”
Cavanaugh 的完整回答可在相关讨论串中查看。
获取与贡献
tsc-go 已在 GitHub 上以 Apache 2.0 许可证 开源,欢迎开发者贡献和建议(详见 Contributor License Agreements)。项目遵循 Microsoft 开源行为准则,更多信息可查看 Code of Conduct FAQ。
开发者可通过以下方式体验 tsc-go:
- 预览版:通过 npm 安装
@typescript/native-preview
。VS Code 扩展:在 VS Code 市场获取预览扩展。详细介绍:观看 Anders Hejlsberg 在 YouTube 上的项目讲解视频,或访问 GitHub 仓库。结语
tsc-go 的发布标志着 TypeScript 在性能优化上的重大突破,特别是在大型代码库和 AI 驱动场景下的应用。通过 Go 语言的原生编译,tsc-go 显著提升了编译速度和编辑器体验,为开发者提供了更高效的工具。虽仍处于实验阶段,但其潜力已引发社区广泛关注。随着 TypeScript 7.0 的推进,tsc-go 有望成为前端开发的重要里程碑。
关键词:TypeScript, tsc-go, 原生编译器, 性能优化, Go 语言, 大型代码库, 开发者体验, AI 驱动开发