大家好,在本文中,我们将比较Node.js和RubyonRails在Web开发方面的优缺点。我写这篇文章的主要原因是我们的团队不断被问到哪种语言或哪种框架最好学。无论如何,我们从不给出简单的答案,因为没有明确的答案。我认为***是用事实和数据说话的。我们将探讨Node.js和RubyonRails作为服务器端技术的一些优缺点。在开始之前,我想说一下我的一些看法。批评者可能会质疑我们如何将作为运行时的Node.js与作为框架的RubyonRails进行比较?我接受这一点,但我正在比较两种服务器端技术和网络堆栈。我们需要弄清楚现在学什么更好,什么对企业更好。我并不是要直接比较RubyonRails和Node.js的特性,如果您觉得用Express或其他基于Node的框架替换Node.js会更好。无论如何,我们比较的是后端结构和堆栈,而不是个别技术。我们的团队使用了这两种技术,我们中的一些人同时喜欢这两种技术。我不偏袒另一个。重要的是要知道对我们有用的东西可能对您不起作用,反之亦然。另外,你应该记住每个人的大脑都是不同的。因此,并没有定论哪一个更好。首先让我们看一下这两种技术之间的一些相似之处。流行的服务器端技术。相当容易学习。高性能。供***网站/应用程序使用。强大的社区。基于类似MVC的结构。快速发展。Node.js和Rails都是备受推崇和流行的服务器端技术,它们可以做很多不同的事情。他们使用许多不同的堆栈和数据库等。两者都相当容易学习。Node使用JavaScript,而Rails使用Ruby。但Ruby和JavaScript比Java、C#或其他一些高级语言更容易学习。它们都是相当宽容的语言,有大量的资源来学习它们。Node.js和RubyonRails表现良好,因此我们将讨论性能水平。有许多流行的网站都使用这两种技术。Node和Rails拥有非常强大和持久的社区。Rails出现的时间稍长一些,并且有更多的老前辈。但是Node正变得越来越流行。现在MVC,Model-View-Controller已经成为一种设计模式。而且RubyonRails具有强大的MVC。模型、控制器和视图有一个文件夹。MVC可以通过Node中的一些框架来实现,比如Express。然而,Express比Rails更灵活。您只能采用MVC的某些方面。这不是唯一可能的结构。用于快速开发和原型制作的Node和Rails。Rails有一个很棒的折叠功能,当然Express也有生成器和命令行工具。Rails的优点一致的结构。非常自信。数据库迁移。发展速度。Ruby是一种伟大的语言。红宝石。成熟且受人尊敬的社区。首先,让我们看看RubyonRails的优点,然后是缺点。正如我所说,Rails具有非常强大的MVC结构。大多数Rails应用程序在核心文件和文件夹方面看起来非常相似。有了这个坚实的基础,然后在gem和自定义包和库之上构建。另外,Rails非常粘,这意味着它允许您坚持自己的做事方式。Rails假定您将以某种方式编写代码,有些人可能会说这种方式有点受限。但它也使代码更简单、更清晰,也不太可能产生错误和问题。从某种意义上说,你无法做出你想要的,但它是让你到达那里的方法。如果您以正确的方式进行操作,这可能是最简单的方法。Rails还有一个很好的数据库迁移功能。它们允许我们在数据库中创建和编辑表和列,而无需手动进入添加或更改内容。它还会为您提供一个不错的小日志或路径,使您能够准确查看对数据库结构所做的操作。现在让我们谈谈节点。有一些用于迁移的包或模块,如DB-migrate,效果很好,但不如Railschord迁移系统那么深入和易于使用。在原型设计和快速开发方面,没有多少技术可以击败Rails。因此,通过一些基本配置和一些脚手架命令,您可以拥有一个完整的CRUD应用程序。数据库迁移被添加到这个速度。如果您使用第三方工具和模块,Node.js和Express非常适合快速开发。但Rails具备所有这些开箱即用的功能。Ruby语言有其优点和缺点,但在大多数情况下,它是受人尊敬的并且非常干净。Ruby是一种多范式语言,可以使程序代码功能化,但大部分是面向对象的。一切都可以看作是一个对象。RubyGems是RubyonRails的包管理器,用于扩展框架的核心功能。这类似于Node.js的npm。所有Rails应用程序都有一个gem文件,您可以在其中指定您的gem。然后运行??bundler命令来安装它们,类似于Node.js的npminstall。RubyonRails的另一个好处是它已经存在了一段时间,因此拥有一个非常受人尊敬的智能社区。维护RubyonRails的开发人员非常聪明并且非常喜欢这个框架。核心框架上有大量资源,包括论坛、博客文章和文档,可帮助您解决问题。这些是RubyonRails的巨大优势。Rails性能的缺点过于简单声誉缺乏文档让我们谈谈Rails的一些缺点。我们所知道的关于RubyonRails的唯一抱怨是它相对较慢。Rails是一个具有很多很多特性的大型框架。除了一些轻量级框架外,还有gem和应用文件依赖因素。自动化和脚手架如此之多,以至于开发人员并没有真正了解Rails框架的工作原理。您可能了解Ruby语言,了解应用程序的语法或结构,但对于真正了解Rails工作原理的人来说,自动化和脚手架非常有用,因为它有助于快速开发。另一方面,一些开发人员确实需要更加努力才能真正理解某些事情。Rails对于大型项目来说也比小型应用程序更难。它也有一些缩放问题。所以另一个缺点是Rails不如Node.js流行。在这一点上,Node.js处于Web开发的最前沿,而Rails令人兴奋的日子已经过去了。我们认为,如果您正在找工作,那么我们强烈建议您学习Node,可能还有Express。雇佣JS开发人员的公司比任何其他语言都多。如果是在五年前,Rails或Ruby已经是最值得学习的前三大语言之一。但现在它不那么流行了。所以我之前简要提到过,核心Rails框架有一些非常好的文档和示例,可以让您学习简单的脚手架命令和数据库迁移。都很好。但是,当您尝试学习更高级的编程并尝试理解特定的精华时,有时感觉就像大海捞针。一些相当知名的平台已经或正在使用RubyonRails。推特就是这样的巨头之一。此外,由于一些扩展问题,他们已将大量后端服务转移到Scala和Java。但由于他们已经使用Rails很长时间了,我很确定他们仍在将它用于平台的其他方面,比如他们与Shopify的合作。此外,项目管理解决方案Basecamp表示,Rails是他们项目的核心和灵魂。运行GitHub的软件是基于Rails构建的。流行的流媒体服务Soundcloud和Hulu都是基于Rails构建的。从一开始,Groupon和LivingSocial、SlideShare和UrbanDictionary就在他们的开发中使用了Rails。Node.js的优点非常受欢迎。高性能。异步。非常可扩展。JavaScript前端和后端。灵活的文件结构。npm和模块。现在我们已经了解了Rails,让我们看看Node.js。我们将从它的优势开始。Node.js的一个巨大优势是它非常流行。它基本上是Web开发中最好的黑客技术。市场需求非常大。很受初创公司欢迎。围绕Node和Express框架有一个蓬勃发展的开源社区。在npm之上有很多完善的模块,在速度和性能方面,Node比Rails有绝对的优势。事实上,Node几乎是无与伦比的。它运行在快如闪电的GoogleJavaScript引擎上。Node用于构建几乎感觉像桌面应用程序的实时Web应用程序。其次,Node.js也是异步的。这意味着当程序向服务器发送请求时,它不必等待回复。它可以继续执行。Node在单线程上运行,不会像其他语言那样发送请求。这些语言需要等到请求完成后,再发送下一个,再次等待。所以Node.js的扩展性也非常好,在单线程中发挥了很大的作用。Node还可以与MongoDB等NoSQL数据库一起使用,这些数据库比MySQL等传统关系数据库更具可扩展性。我所知道的几乎每一家大公司都已迁移到Node.js,并且他们报告说生产力有了巨大的提高。Node的另一大优势是它使用JavaScript,它在许多Web堆栈中得到广泛使用。很多时候,前端的语言和后端的语言是不一样的,但是用Node.js就不是这样了。我们可以在前端和后端都使用JavaScript。有许多主导行业的客户端框架——React、Angular、Vue.js。所以这对Node.js来说是一个巨大的优势。显然,JavaScript也适用于非常流行的JSONAPI。Node.js、Express或Happy.js,这些框架中的任何一个都具有非常灵活的文件结构。它们允许您构建您想要的应用程序。您可以将所有内容都塞进应用程序的单个JS文件中。如果您想拥有更传统的MVC结构,则有利有弊。但大多数情况下,如果您知道自己在做什么,并且您是一名优秀的程序员,那么灵活性就是一件好事。与Rubygem一样,Node有自己的包管理器,称为npm或Node包管理器。npm和Rubygems之间的最大区别在于管理依赖项的方式。使用Ruby,依赖项是全局安装的。所以你必须使用捆绑器,并且必须自己管理它们。npm实际上会处理你所有的模块。它们被放入Node模块文件夹中。这些模块也可以有自己的Node模块文件夹,有自己的依赖。npm模块似乎也有更好的文档,至少根据我的经验。Node.js的缺点糟糕的CPU密集型任务。不一致。更新的技术。回调地狱。太模块化了。好的,现在我们了解了Node.js的优点,让我们来看看它的一些缺点。Node非常适合许多类似CRUD的应用程序,但对于CPU密集型应用程序来说,这绝对是一件糟糕的事情。原因是每当执行某些操作(例如CPU操作)需要一些时间时,它会将所有传入请求排队,因为它在单个线程上运行。那些有更多可用线程的系统,如Apache,将在它??们之间分配CPU时间。只有IO操作是并行的,因为它们是异步执行的。CPU密集型任务的例子有3D渲染、视频编码、科学建模等。对Node的另一个抱怨是它可能有点不一致。有些人觉得API不断变化。它有时不是很向后兼容。不仅如此,Express应用程序的结构通常非常自由和灵活。因此,有时它会让开发人员感到被困住了。Rails非常严格,所以很难写出糟糕的代码。由于Node是异步的,您将处理大量回调,它们通常会蜂拥而至并陷入所谓的回调地狱。对此的解决方案是异步工具和使用承诺。您还可以采取一些措施来防止它。我个人认为这不是问题,但我知道一些不习惯异步编程的开发人员确实对回调感到头疼。如您所见,两种后端选项各有利弊,但它们都是很棒的技术。我们应该具体情况具体分析,而不是断然说一个比另一个好。
