今天,我很高兴宣布我们正在采取的下一步,以从根本上提高打字稿的性能。
https://www.youtube.com/watch?v=pnlq-evld70
打字稿的核心价值主张是出色的开发人员体验。随着代码库的增长,打字稿本身的价值也随之增长,但是在许多情况下,Typescript无法扩展到最大的代码库。在大型项目中工作的开发人员可以体验长时间的负载和检查时间,并且必须在合理的编辑启动时间之间进行选择,或者完整地查看其源代码。我们知道开发人员会喜欢何时可以自信地重命名变量,找到对特定功能的所有参考,轻松浏览其代码库,并毫不拖延地完成所有这些事情。由AI提供动力的新体验受益于大的语义信息窗口,这些信息需要具有更严格的延迟限制。我们还希望快速命令行构建以验证您的整个代码库状况良好。
为了实现这些目标,我们已经开始在打字稿编译器和工具的本地港口上工作。本地实施将 大幅改善编辑器启动,将大多数构建时间减少10倍,并大大减少内存使用情况。通过移植当前代码库,我们希望能够预览本机实现 tsc
能够在2025年中期进行命令行打字,并在今年年底之前提供针对项目构建的功能完整解决方案和语言服务。
你可以 从我们的新工作回购中构建并运行GO代码,它是在与现有的打字稿代码库相同的许可下提供的。检查读书文件以获取有关如何构建和运行的说明 tsc
以及语言服务器,并查看到目前为止实施的内容的摘要。我们将发布定期更新,因为新功能可用于测试。
多少快?
我们的本地实施已经能够加载许多流行的打字稿项目,包括 打字稿编译器本身。这是运行的时间 tsc
在不同大小的github上的一些流行代码库上:
代码库 | 尺寸(LOC) | 当前的 | 本国的 | 加速 |
---|---|---|---|---|
VS代码 | 1,505,000 | 77.8s | 7.5s | 10.4倍 |
剧作家 | 356,000 | 11.1s | 1.1 | 10.1x |
typeorm | 270,000 | 17.5s | 1.3s | 13.5倍 |
date-fns | 104,000 | 6.5s | 0.7s | 9.5倍 |
trpc (服务器 +客户端) | 18,000 | 5.5s | 0.6s | 9.1x |
RXJS (可观察) | 2,100 | 1.1 | 0.1s | 11.0x |
尽管我们尚未完成功能完整,但这些数字代表了尺度级的改进顺序,您会看到检查大多数代码库。
我们对这种巨大速度提高的机会感到非常兴奋。曾经遥不可及的功能现在已经掌握了。该本地端口将能够在整个项目中提供即时,全面的错误列表,支持更高级的重构,并使以前太昂贵而无法计算的更深入的见解。这个新的基础超出了当今的开发人员体验,并将实现下一代AI工具,以增强开发,为可以学习,适应和改善编码体验的新工具提供动力。
编辑速度
大多数开发人员时间都花在编辑中,这是性能最重要的地方。我们希望编辑能够快速加载大型项目,并在所有情况下快速响应。只要基础语言服务也很快,例如Visual Studio和Visual Studio代码等现代编辑的性能就出色。通过我们的本地实施,我们将能够提供令人难以置信的快速编辑体验。
再次使用Visual Studio Codebase作为基准标准,当前将整个项目加载到快速计算机上的编辑器的时间约为9.6秒。使用本地语言服务,这将下降到约1.2秒 项目负载时间改善8倍 在编辑方案中。这意味着从打开编辑器到任何打字稿代码库中的第一个击键的时间,都可以更快地工作体验。我们希望所有项目都会看到加载时间的这种改善。
总体内存使用量似乎也大约是当前实施的一半,尽管我们尚未积极调查优化它,并希望实现进一步的改进。所有语言服务操作的编辑响应能力(包括完成列表,快速信息,转到定义并查找所有参考)也将看到显着的速度提高。我们还将转向语言服务器协议(LSP),这是一个长期存在的基础架构工作项目,以更好地使我们的实现与其他语言保持一致。
版本控制路线图
我们最近的打字稿版本是Typescript 5.8,即将推出TypeScript 5.9。基于JS的代码库将继续开发为6.x系列,Typescript 6.0将引入一些贬值和破坏更改,以与即将到来的本机代码库保持一致。
当本机代码库与当前的打字稿达到足够的奇偶校验时,我们将将其释放为 打字稿7.0。这仍在开发中,我们将在发生时宣布稳定性并具有里程碑。
为了清楚起见,我们将它们简单地称为Typescript 6(JS)和Typescript 7(本机),因为这将是可预见的未来的命名。您可能还会看到我们在内部讨论或代码注释中参考“ strada”(原始的打字稿代号)和“ CORSA”(这项工作的代号)。
虽然某些项目在发布时可能能够切换到打字稿7,但其他项目可能取决于某些API功能,旧版配置或其他需要使用Typescript 6的约束。识别打字条在JS开发生态系统中的关键作用,我们仍将在6.x行中维持JS CodeBase在6.x行中,直到7+ 7+达到足够的成熟度和收养。
我们的长期目标是使这些版本尽可能地保持一致,以便您在满足您的要求后立即升级到Typescript 7,或者在必要时降回TypeScript 6。
下一步
在接下来的几个月中,我们将分享更多有关这种激动人心的努力,包括更深入地研究性能,新的编译器API,LSP等。我们写了一些 常见问题解答 在GitHub存储库上,以解决我们希望您可能遇到的一些问题。我们还邀请您加入我们的AMA 打字稿社区不和谐 在 PDT上午10点| UTC下午5点 3月13日。
10倍的性能提高代表了打字稿和JavaScript开发经验的巨大飞跃,因此我们希望您像我们为此努力一样热情!