翻译|朱宪忠策划|EthanNode.js可能是业界最流行的后端技术。国际知名公司如Twitter、LinkedIn、Uber等都选择使用Node.js作为其主要的服务器端技术,或者将其与其他语言相结合。Node.js有很多与之相关的优势,比如它有一个庞大的社区,一个很好的生态系统,特别是能够为前端和后端使用相同的开发语言等。由于C#和.NET是我的主要编程语言;所以,我想通过这篇文章来尝试弄清楚我是否在使用一种被低估的技术,它的市场趋势是否被看好。事实上,ASP.NET(.NETServerFramework)本身就很流行。自从.NET运行时成为开源和跨平台平台以来,它一直在改进和流行,但就目前而言,Node.js似乎仍然处于领先地位。那么,为什么我仍然建议初创公司应该考虑.NET而不是Node?这是我的7个理由。1..NET性能更好性能问题是Node.js技术最大的弱点。我并不是说Node.js慢得让人无法忍受;但是,当您开发需要后端支持计算功能或高吞吐量请求的系统时,Node.js不是一个好的选择。主要原因:它的运行时是单线程的,这对于当今允许许多操作并行执行的多核处理器来说绝对是一种巨大的浪费。Techpower最近的基准测试结果表明,Node.js远远落后于ASP.NETCore。当然,.NET也不是最快的技术。如果只强调“最快”,答案很可能属于极简的Rust语言或C++实现。但在主流Web框架中(不包括Just或may_minihttp等小众项目),.NET是最快的框架之一。主要原因主要在于性能测试在三个方面的优势:单查询基准、多查询基准和Cookie基准。2.Node.js需要混搭语言来实现性能补偿。当你深入研究选择Node.js的公司的技术栈时,你会发现他们的微服务架构技术方案中几乎总是有其他语言和运行时。Go、Rust、Java、Python等语言的组合。Node.js和JavaScript非常适合用于向数据库、队列或其他服务发送查询的高级REST服务器。但是,当你需要做一些计算工作时,比如运行一个算法或者使用一个文件系统,这样的技术选择并不好。相比之下,C#和.NET运行时速度快且功能丰富。在大多数使用场景中,您不需要使用像Rust或C++这样的本地语言来获得额外的性能优势。这意味着您可以节省为项目的技术栈添加额外语言的开销。因此,在实际开发中,最好尽量避免使用另一种新语言,因为那样你将需要更多的专家和更多的基础设施,导致开发团队变得不那么“多才多艺”。3.C#是一门神奇的语言很难说哪种语言更好,因为每个人都有自己的喜好和偏见。但是,我认为C#是目前业界最强大、最高效、最流行的语言之一,原因如下:它是一种高级C风格的面向对象语言。对于大多数开发人员来说,这将是熟悉且富有成效的。尽管它是一种高级语言,但它允许在性能优化需要时对敏感代码进行低级控制。如果需要,您可以使用指针和直接访问内存访问。它具有丰富的函数式语言特性,例如LINQ和扩展方法。它是类型安全的,比TypeScript安全得多;但它在需要时也具有像JavaScript这样的动态特性。它有广泛的技术文档和庞大的社区支持;虽然没有JavaScript开发领域那么大,但仍然很大。业界成功使用C#开发项目的几个例子是Bing搜索引擎、StackOverflow和Unity(最流行的游戏引擎),所有这些都允许您使用C#作为编程语言。4.最好的工具我认为C#提供了世界上最好的工具,包括最好的IDE,最好的调试体验,最好的测试器等等。JavaScript或TypeScript没有C#的强类型特性;因此,高级代码导航和重构是不可能的。在许多情况下,要知道谁实现了您的接口或谁引用了您的类的函数是不可行的。通常情况下,Node.js必须依赖基本的文本搜索;而在C#IDE中,可以通过快捷键导航到相应的用法和实现源码。强大的重构能力也是如此,比如实现接口、添加参数、提取函数或类。如果您长期使用VisualStudio或Rider,那么在迁移到VisualStudioCode时,您可能会遇到真正的生产力损失。就调试问题而言,ChromeDevTools调试器或VSCode调试器并不接近VisualStudio体验。然而,在调试Node.js程序时,我是一个相当普通的用户。5.更简单的内置开发周期在Node.js中,你可以使用Babel、Webpack、ESLint等工具以任意方式构建开发环境管道。您可以使用不同的JavaScript版本,将所有内容打包到单个文件或多个切片中,缩小它们等。这是一个高度可定制的过程。管道的每个部分都有许多不同的工具。例如,Webpack可以用Rollup或Parcel代替,ESLint可以变成更漂亮的工具等等。构建JavaScript项目的方式有数百万种,每个公司似乎都有自己独特的设置,并且需要一个大量的开发和维护。尽管我不得不承认,有许多现代方法可以快速启动和运行丰富的开发环境,例如Vite。在.NET中情况正好相反。构建设置中没有太多技术选择,因为您将始终使用Microsoft的MSBuild、.NETSDK和VisualStudio。当然,您可以进行一些自定义,但这与JavaScript项目完全不同。唯一要做出的“选择”是使用哪个.NET版本,哪个版本始终是最新的,以及构建什么类型的项目:ASP.NETWebAPI或ASP.NETMVC,这应该是一个明显的选择,具体取决于取决于你想如何开发前端。因此,将Node.js的灵活性视为其优势之一是合理的。但是,您也可以将其视为负担。在.NET开发中,除了非常大的项目或特殊情况外,开发环境不需要做太多事情。VisualStudio和MSBuild运行良好,它们可以毫无问题地处理大型企业应用程序和服务器。6.稳定的生态系统如前所述,Node.js和JavaScript拥有非常丰富的生态系统,包括开发工具、库、文档等。无论好坏,这个生态系统大多是开源的,由社区开发。在很多情况下,公司所依赖的库是由一个小团队甚至一个人开发的。如果此人决定停止从事该项目,公司将损失惨重。当然,可以由别人代劳,也可以自己动手,补上自己需要的部分;然而,这对于快速构建他们的第一个产品的初创公司来说是一个大问题。当然,这不是小型开源项目的唯一问题。当他们引入错误或安全漏洞时会发生什么?如果他们的爱好项目对您的初创公司造成损害,维护人员不完全负责,对吗?我并不是说大公司的产品没有错误。据我所知,他们的产品可能更多。但你可以投诉、开罚单,甚至起诉微软。您可以确定一个项目将在很长一段时间内继续得到支持,如果停止支持,您会提前几年收到通知。在稳定性和可靠性方面,我敢打赌Microsoft.NET运行时及其所有工具比大多数Node.js开源库都经过更好的测试!这可能会减慢产品版本发布,但会产生更稳定的产品。话虽如此,有许多维护良好的开源库,有许多贡献者和大公司的大力支持。7.合规性、隐私和安全性争论主要基于常识,而不是我的经验或专业知识。如果我做出了一些错误的假设,请让我提前道歉。创业时,您可能认为合规问题不重要或特别有趣。我想创始人会专注于制作产品、招聘、筹集资金以及为公司选择标志。然而,这只是该产品最重要的方面之一。在某些行业,例如医疗保健、军事和政府,您的应用程序的安全性、保护个人信息并遵守HIPAA和ISO27001等标准至关重要。让我们回到技术选择的话题:如果您选择Node.js或ASP.NET,合规性/隐私/安全重要吗?在这两种技术上运行的应用程序是否符合标准、安全且受隐私保护?但是当您选择Node.js时,您还可以选择使用开源库和生态系统。某些开源库更有可能存在安全或隐私漏洞。而且,这些项目很可能不会遵守微软为自己设定的疯狂标准。即使你正在采取最好的措施来保护你的应用程序,例如进行渗透测试等,你也无法与微软的声誉竞争。如果G端客户知道你们都在使用微软的技术栈,他们就更有可能信任你的应用。8.总结到目前为止,我希望我已经说服你至少接受我上面提出的一些观点。然而,很多争论都是主观的,比如谁有更好的工具,或者哪种编程语言更好。实际上,我会是第一个承认Node.js比ASP.NET更好的人。你怎么看待这件事?欢迎在文章后留下你的评论。原文链接:https://img.ydisp.cn/news/20221224/s0l50pylckxid="hce1b53f-A5L0Eosj"data-id="hce1b53f-iZsUoLqM">译者介绍朱宪忠,社区编辑,专家博主,讲师,潍坊一号高校计算机教师,自由编程老手。
