这将是一篇简短的文章......但希望后续能有更长的文章。
寒假期间我有时间做了一个实验:
使用 C#/.NET 创建的 Web 工具能否产生与 Rust / Go / Zig ...相当的性能?
所以我做了一些编码...(你可以在 GitHub 上找到)
我从一个粗略的捆绑器逻辑开始:
结果很简单:使用 AoT(提前编译).NET 当然可以用于高性能的 Web 项目。
所以我继续做了一点实验;用实际的代码理解替换正则表达式。
答案是:是的! ?
捆绑器目前功能不完整,但第一个结果非常强大。自述文件中显示的基准表明其性能绝对与其他工具处于同一水平。够快了。
就我个人而言,我认为 C#/.NET 比 Rust 简单得多,而且比 Go 更强大。它也有一些缺点 - 不是说谎。
C#/.NET 能够在该领域可行的主要原因是 AoT。如果没有 AoT,启动性能(以及运行时要求)就会扼杀整个想法。
另一方面,AoT 也带来了一些挑战。有些库无法使用或需要进行一些工作才能集成。因此,.NET 的一些灵活性无法使用。
对于 rspack 等工具也使用的最大测试项目,我们得到以下结果:
请注意,即使捆绑器的功能不完整,但它的设计足以在项目上产生有效的结果。因此,尽管目前所有结果都是初步的,但至少有一定的有效性。
Test | esbuild | rspack | Vite | 网络包 |
---|---|---|---|---|
Small lib | 326ms | 611ms | 601ms | 359ms |
Small project | 670ms | 912ms | 1658ms | 418ms |
Medium project | 1931ms | 2877ms | 10601ms | 974ms |
Large project | 2189ms | 2422ms | 13710ms | 1357ms |
所以,是的,网络包 已经击败了竞争对手,甚至有可能获得更好的性能。虽然它可以进一步优化,但当引入诸如源映射或树摇动之类的东西时,它也会损失一些性能。现在我确信,由于潜在的优化(例如 JS AST 生成中的流式传输),总体上应该与现在大致相同。
目前最大的障碍是它只支持 JS(X) - 还没有 TypeScript (它尝试解析这些文件,但一旦使用类型就会失败)。它“相当”容易支持,但我需要为此分叉 Acornima,而且只有当该项目有足够的讨论度时我才会这样做。
还有很多事情可以参与其中,那就太好了。不过,需要先弄清楚一些基础知识。诸如源映射、TypeScript 支持或者配置系统之类的东西会很棒。
这个实验中有一些其他捆绑器没有做的事情。例如,如果您的 HTML 入口点有一个导入映射,那么导入映射中的条目将自动视为外部。同样,您可以将某些依赖项设置为共享 - 在这种情况下,会自动生成导入映射条目/在生成的 HTML 中创建导入映射。相当整洁。
将来,捆绑器将对 SASS、CSS 模块、CSS-in-JS 以及模块联合和本机联合提供本机(即开箱即用)支持。
你有什么想法?您认为这是一个可行的想法还是只是垃圾?我们需要一个具有合理默认值的快速 .NET 原生捆绑器吗?
以上是网络包的详细内容。更多信息请关注PHP中文网其他相关文章!