何时使用线程框架比事件驱动框架更好?(即,何时使用Rails比Node.js更好?)

12

我了解什么是线程框架(Rails,Django,Symfony2等)。 我也知道什么是事件驱动框架(Node.js,EventMachine,Twisted等),以及为什么它对于实时聊天,速度等很有用。此外,它们似乎不会对普通使用情况造成问题。所以:

  • 事件驱动框架有哪些缺点?
  • 什么情况下应该优先选择Rails而不是Node.js?
  • 为什么并不是所有新的Web服务器都使用 EventMachine、Twisted 或 Node.js 编写?
  • 著名的框架如 Django 或 Rails 是否会变成事件驱动或消失?

哦,那么在这种情况下,我们需要一些管理员清理过期的评论。 - jcolebrand
1个回答

16

那么,事件驱动框架的缺点在哪里呢?

  1. 熟悉度。 因为事件驱动的Web编程方式非常不同,程序员需要一段时间才能适应它。当你面临截止日期时,使用你已经熟悉的东西更容易而且可行。
  2. 库支持。 Node.js拥有惊人数量的模块,但与Ruby和Python相比仍有很长的路要走更新:Node.js现在拥有比Python或Ruby更多的已发布模块
  3. 部署。IT工作人员习惯于使用线程框架。要利用事件驱动框架,您需要从上到下异步处理。现在您可以在Node.js中开发,但是您能有效地部署它吗,还是您必须管理自己的服务器?
  4. 无根据的担忧。 看似是问题,但实际上并不是:
    • 事件驱动编程对CPU密集型应用程序不好:原因是CPU密集型计算会阻塞服务器。这是绝对正确的,但实践上可以通过生成另一个进程并将其视为I/O来克服,例如使用Node的child_process.exec
    • 事件驱动编程仅适用于需要高并发的应用程序:这里的原因是,事件驱动编程比传统Web应用程序编程要“困难”,因此除非你有充分的理由,否则不值得这样做。我个人认为这不是事实-事件驱动编程并不更难,但它确实非常不同。在某个时候,大量的程序员会熟悉事件驱动的方法,这种担忧将消失。
    • 事件驱动编程是嵌套回调的混乱。 当你刚学习时,这可能是真的,但最终你会发现如何以可读性良好的方式构建代码结构。
  5. 文档。 Node及其第三方库的文档很差,通常只包括一个README.md。对于来自Python世界的人来说,我们习惯于优秀的文档,这是一个很大的缺点。这种情况正在慢慢改善(我们需要更多像这样的文档)。

在什么情况下应该选择Rails而不是Node.js?

  • 当您或您的团队只偏爱Ruby而不是JavaScript时。
  • 当您或您的团队不熟悉Node但需要完成工作时。
  • 当您需要使用Rails中有而Node尚未具备的功能时。
  • 当您需要部署到现有的基于Rails的基础架构时。
  • 当您必须说服管理层应该使用Node.js,但如果项目失败,您又不想成为责任人时。

为什么所有新的Web服务器都不是用EventMachine、Twisted或Node.js编写的?

请见上面的回答。

著名的框架如Django或Rails会转向事件驱动或消失吗?

Django和Rails将长期存在。这些框架中有很多应用程序,没有理由重新编写它们。而且拥有大量的人才库,这通常是开发新Web应用程序时要考虑的因素。

(但请参见Django首席开发人员在Quora上的回答,认可Node的优势)。


作为一名Rails开发者,我想说的是,在许多情况下,当前的npm包比Ruby Gems更好,并且呈上升趋势。 - Maximilian Stroh
5
针对 Quora 链接的一个想法:Node.js 还有另一个关键特性,甚至是一个不公平的优势,“一种语言掌控全局”。一旦你熟悉了 Node.js 和 JavaScript 本身,你就能够编写前端/客户端应用程序、服务器端代码、移动应用程序(例如使用 PhoneGap)、桌面应用程序(例如使用 Node-Webkit),查询数据库(MongoDB 的查询语言就是JavaScript),并且可以轻松地处理 Web 服务和 JSON,因为在从头到尾使用 JS 时,这几乎是一个简单易行的过程。 - Maximilian Stroh
这是一个非常好的答案。应该在所有线程中回显 :) - Richard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接