Anders Hejlsberg 于2025年3月11日发布了一篇关于 TypeScript 性能提升的博客(https://devblogs.microsoft.com/typescript/typescript-native-port),内容如下:
TypeScript 编译器原生代码重新移植以提升编译速度,通过 Go 语言重构编译器,解决大型项目性能瓶颈,代号 Corsa。
TypeScript Go 仓库地址:https://github.com/microsoft/typescript-go
里程碑:
测试场景 | 原始版本 | Go 重构版 | 提升幅度 |
---|---|---|---|
VS Code 构建时间 | 77.8s | 7.5s | 10.4x |
编辑器项目加载时间 | 9.6s | 1.2s | 8x |
内存占用峰值 | 4.2GB | 1.9GB | ↓55% |
项目 | 代码规模 | 原始耗时 | Go 版耗时 | 加速比 |
---|---|---|---|---|
TypeORM | 270k LOC | 17.5s | 1.3s | 13.5x |
Playwright | 356k LOC | 11.1s | 1.1s | 10.1x |
rxjs | 2.1k LOC | 1.1s | 0.1s | 11x |
模块 | 状态 | 备注 |
---|---|---|
语法解析 | ✅ 完成 | 完全兼容 TS 5.8 |
类型检查 | ✅ 完成 | 错误定位与原始版本一致 |
JSX 支持 | 🚧 开发中 | 基础解析完成(30%) |
声明文件生成 | 🚧 开发中 | 预计 2025 Q3 完成 |
LSP 协议支持 | 🚧 原型阶段 | 支持基础跳转/错误提示 |
今天,我们激动地宣布将采取下一步措施,对 TypeScript 的性能进行革命性提升。
https://devblogs.microsoft.com/typescript/typescript-native-port/
TypeScript 的核心价值主张是提供卓越的开发者体验。随着代码库的增长,TypeScript 的价值也会随之提升,但在许多情况下,TypeScript 未能有效扩展以支持超大规模的代码库。
在大型项目中工作的开发者可能会经历漫长的加载和检查时间,不得不在合理的编辑器启动时间与获取完整的源代码视图之间做出权衡。
我们深知开发者们非常重视能够自信地重命名变量、查找特定函数的所有引用、轻松导航代码库,以及所有这些操作都能即时完成的体验。由 AI 驱动的新型开发体验需要依赖大量语义信息窗口,这些信息必须满足更严格的时间延迟要求。
同时,我们也希望实现快速的命令行构建,以验证整个代码库的健康状态。
为实现这些目标,我们已着手开发 TypeScript 编译器和工具的原生移植版本。该原生实现将显著提升编辑器启动速度,将大多数构建时间缩短10倍,并大幅降低内存占用。
通过移植现有代码库,我们预计将在2025年年中前推出支持命令行类型检查的原生版tsc
预览版本,并计划在年底前完成涵盖项目构建和语言服务的完整功能解决方案。
您可以从我们新的工作存储库(https://github.com/microsoft/typescript-go)构建和运行 Go 代码,该存储库与现有 TypeScript 代码库采用相同的许可。查看 README 以获取有关如何构建和运行 tsc 和语言服务器的说明,并查看迄今为止已实现内容的摘要。我们将在新功能可供测试时定期发布更新。
我们的原生实现已经能够加载许多流行的TypeScript项目,包括 TypeScript 编译器本身(https://github.com/microsoft/TypeScript/tree/main/src/compiler)。
以下是 GitHub 上几个不同规模代码库运行tsc
的耗时对比:
代码库 | 规模(行数) | 当前版本 | 原生版本 | 加速倍数 |
---|---|---|---|---|
VS Code | 1,505,000 | 77.8秒 | 7.5秒 | 10.4倍 |
Playwright | 356,000 | 11.1秒 | 1.1秒 | 10.1倍 |
TypeORM | 270,000 | 17.5秒 | 1.3秒 | 13.5倍 |
date-fns | 104,000 | 6.5秒 | 0.7秒 | 9.5倍 |
tRPC(服务端+客户端) | 18,000 | 5.5秒 | 0.6秒 | 9.1倍 |
rxjs(observable) | 2,100 | 1.1秒 | 0.1秒 | 11.0倍 |
尽管尚未实现功能完备,但这些数据已能体现大多数代码库在类型检查时可预期的数量级性能提升。
我们对这项突破性加速带来的可能性感到无比兴奋。曾经看似遥不可及的功能如今已触手可及。原生移植将实现全项目范围的即时完整错误列表、支持更复杂的重构操作,并解锁以往因计算成本过高而无法实现的深度代码洞察。
这一全新基石不仅超越了当前的开发体验,更将赋能下一代AI工具革新开发流程——通过学习、适应和持续优化,打造更智能的编码辅助系统。
开发者大部分时间都在编辑器中工作,因此性能优化在此场景下至关重要。我们希望编辑器能够快速加载大型项目,并在所有操作中保持即时响应。现代编辑器如Visual Studio和Visual Studio Code在底层语言服务高效运行时,已能提供卓越性能。
而通过原生实现,我们将进一步突破极限,带来前所未有的编辑器体验。
仍以 VS Code 代码库为基准测试对象:当前在高性能计算机上加载整个项目耗时约9.6秒,而原生语言服务可将此时间缩短至约1.2秒,编辑器场景下的项目加载速度提升8倍。
这意味着从打开编辑器到在 TypeScript 代码库中输入首个字符,开发者将获得更迅捷的工作流体验。我们预期所有项目都将实现类似的加载速度提升。
整体内存占用也减少至当前实现的约一半,尽管我们尚未进行主动优化,未来仍有进一步改进空间。所有语言服务操作(包括自动补全、快速信息提示、跳转定义和查找所有引用)的响应速度都将显著提升。
此外,我们将迁移至语言服务器协议(LSP),这是与其它语言生态对齐的重要基础设施升级。
TypeScript 最新版本为 5.8,5.9 即将发布。基于 JavaScript 的代码库将持续更新至 6.x 系列,而 TypeScript 6.0 将引入部分弃用和重大变更,以与即将推出的原生代码库保持兼容。
当原生代码库与当前 TypeScript 实现功能对齐后,我们将发布 TypeScript 7.0 。该版本仍在开发中,我们将随着稳定性及功能里程碑的达成持续披露进展。
为明确起见,我们将分别称其为 TypeScript 6 (JS版)和 TypeScript 7 (原生版),此命名规则将在可预见的未来保持稳定。
您可能在内部讨论或代码注释中看到原代号 "Strada" (原TypeScript代号)与 "Corsa" (本次计划的代号)。
尽管部分项目可在 TypeScript 7 发布后立即迁移,但其他依赖特定API功能、旧版配置或特殊约束的项目可能仍需使用 TypeScript 6 。鉴于 TypeScript 在 JavaScript 生态中的关键地位,我们将在 TypeScript 7+ 成熟并广泛采用前,持续维护 6.x 系列代码库。
我们的长期目标是最大程度保持版本兼容性,使您能在 TypeScript 7 满足需求时无缝升级,或在必要时回退至 TypeScript 6 。
未来数月,我们将深入分享这一激动人心的计划,包括性能深度解析、全新编译器 API、LSP 进展等。GitHub 仓库中已发布,常见问题解答请前往仓库(https://github.com/microsoft/typescript-go/discussions/categories/faqs),可能涵盖您可能关心的问题。
我们还将于3月13日10:00 AM PDT(太平洋夏令时间)/ 5:00 PM UTC(世界协调时间)在 TypeScript 社区 Discord(https://discord.gg/typescript) 举办 AMA 问答活动,欢迎参与。
10倍性能提升将彻底革新 TypeScript 与 JavaScript 的开发体验,期待您与我们共同期待这一里程碑!