typescript 要重写了?速度提升十倍!!

206 阅读4分钟

微软将 TypeScript 编译器及工具链移植到 Go 语言的决策,确实是软件开发领域的重要事件。结合搜索信息和技术背景,对用户分析的评估如下:

image.png

背景分析的正确性

用户对 TypeScript 性能瓶颈的描述准确。根据微软官方博客,随着项目规模扩大,现有 JavaScript/TypeScript 实现的编译器在处理超大型代码库时出现显著延迟,导致开发者不得不牺牲编辑器响应速度或代码检查的完整性。这一痛点是移植的核心驱动力。

image.png

选择 Go 语言的原因补充 ||为什么不用 rust 构建(doge)

用户列出的三点原因(代码结构相似性、内存管理、性能优势)均符合官方解释,但需补充以下细节:

  1. 代码可迁移性:微软强调需长期维护 JavaScript 和 Go 两个版本,Go 的语法和结构与 TypeScript 更接近,便于代码双向迁移。
  2. 生态兼容性:Go 的静态类型和简洁性使其适合构建高性能工具链,同时为未来与语言服务器协议(LSP)及 AI 工具集成奠定基础。
  3. 社区与工具支持:Go 的成熟工具链(如构建、测试)和活跃社区为大型项目的持续开发提供保障。 为何不用 rust?看此视频: x.com/i/status/18…

重构挑战的完善

用户提到的功能一致性性能优化是关键挑战,但需补充:

  • API 兼容性:需设计新的 JS API 以确保旧项目平滑过渡,同时保持灵活性。
  • 开发成本:移植 150 万行代码需要团队熟悉 Go 语言特性,可能面临学习曲线问题。
  • 生态适配:需确保与现有 TypeScript 生态(如 VS Code 插件)的兼容性,避免开发者迁移阻力。

性能提升的成果验证

CodebaseSize (LOC)CurrentNativeSpeedup VS
Code1,505,00077.8s7.5s10.4x
Playwright356,00011.1s1.1s10.1x
TypeORM270,00017.5s1.3s13.5x
date-fns104,0006.5s0.7s9.5x
tRPC (server + client)18,0005.5s0.6s9.1x
rxjs (observable)2,1001.1s0.1s11.0x

用户引用的 “编译速度提升 10 倍” 和 “编辑器加载时间缩短至 1.2 秒” 的数据与微软官方测试一致。此外,内存使用量减半、语言服务操作响应速度提升也是重要成果。需注意的是,这些数据基于特定场景(如 VS Code 代码库),实际效果可能因项目而异。

总结的补充

用户总结的核心观点正确,但需强调:

  • 战略意义:移植不仅解决性能问题,还为 TypeScript 的长期演进(如 TypeScript 7.0 原生版本)和 AI 驱动工具铺路。
  • 行业影响:为其他大型项目(如 Babel、Webpack)的语言选择提供参考,推动 “性能优先” 的工具链重构趋势。
  • 过渡策略:微软承诺维护 TypeScript 6.x 直至 7.x 成熟,确保开发者平滑迁移,这一兼容性策略至关重要。

结论

TypeScript选择使用Go进行重构的原因主要包括以下几点:

  1. 移植的舒适度: Go语言在移植TypeScript代码时能够保持代码结构的相似性,使得开发者在迁移过程中能够更顺利地适应。而Rust在这方面的表现则较为复杂,可能需要大量的unsafe代码,增加了开发的难度和风险。

  2. 性能提升: TypeScript团队在使用Go进行移植后,性能提升了10倍。Go的单核性能与Rust相当,并且在内存管理方面表现良好,避免了复杂的内存管理问题。

  3. 开发效率: Go的编译速度快,交叉编译方便,能够减少开发者的心智负担。相比之下,C#的AOT(Ahead-of-Time)编译在成熟度上还有待提高,这使得Go成为一个更合适的选择。

  4. 避免不必要的争议: 选择Go可以有效避免“为什么不选择Rust”的质疑,同时保持API接口的开放性,便于未来的扩展和维护。

  5. 团队的技术选型: TypeScript团队在选择语言时,考虑了团队的技术栈和开发者的熟悉程度。Go的语法和结构与TypeScript的函数式编程风格更为契合,而C#虽然与TypeScript语法相似,但在团队中并不是首选。

用户的分析框架基本正确,但需补充技术细节(如代码迁移策略、API 设计、生态适配)和战略影响(如 AI 工具集成)。总体而言,微软的决策是对 TypeScript 性能瓶颈的务实回应,Go 语言的选择在技术适配性和长期生态发展上具有合理性。

原文章阅读地址:devblogs.microsoft.com/typescript/…