11

我了解什么是线程框架(Rails、Django、Symfony2、……)。而且我了解什么是事件驱动框架(Node.js、EventMachine、Twisted ……)以及为什么它对实时、聊天、速度等非常有用……此外,它们似乎不会对正常用例造成问题。所以:

  • 事件驱动框架的缺点是什么?
  • 什么时候我应该更喜欢 Rails 而不是 Node.js?
  • 为什么不是所有新的 Web 服务器都使用 EventMachine、Twisted 或 Node.js 编写?
  • Django 或 Rails 等著名框架会成为事件驱动还是消亡?
4

1 回答 1

15

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

  1. 熟悉。因为事件驱动的 Web 编程是如此不同,程序员需要一段时间才能适应它。当您在截止日期前工作时,使用您所知道的、行之有效的东西会更容易。
  2. 图书馆支持。Node 拥有数量惊人的模块,但要赶上 Ruby 和 Python 还有很长的路要走更新:Node 现在有比 Python 或 Ruby 更多的已发布模块可用
  3. 部署。IT 人员习惯于线程化框架。要利用事件驱动的框架,您需要自上而下地异步。现在您可以使用 Node.js 进行开发,但是您是否能够有效地部署它,或者您是否必须管理自己的服务器?
  4. 毫无根据的担忧。看起来像问题但实际上并非如此的事情:
    • 事件驱动编程对 CPU 密集型应用程序不利:原因是 CPU 密集型计算会阻塞服务器。这是绝对正确的,但实际上,它可以通过生成另一个进程并将其视为 I/O 来克服,例如,通过使用 Node 的child_process.exec.
    • 事件驱动编程仅适用于需要高并发的应用程序:这里的原因是事件驱动编程比传统的 Web 应用程序编程“更难”,所以除非你有充分的理由,否则不值得去做。我个人认为情况并非如此——事件驱动编程不再困难,但它却大不相同。在某个时候,大量的程序员会熟悉事件驱动的方法,这种担忧就会消失。
    • 事件驱动编程是一堆嵌套回调。当您第一次学习它时可能是这样,但最终您会发现如何以可读的方式构建您的代码。
  5. 文档。Node 及其第 3 方库的文档很糟糕,通常只包含一个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)。

于 2012-05-22T23:04:10.977 回答