如何决定何时使用 Node.js?

2022-08-29 21:52:19

我是这种东西的新手,但最近我听到了很多关于Node.js有多好的消息。考虑到我有多喜欢使用jQuery和JavaScript,我不禁想知道如何决定何时使用Node.js。我心目中的Web应用程序类似于Bitly - 获取一些内容,将其存档。

从我过去几天做的所有作业中,我获得了以下信息。节点.js

  • 是一个命令行工具,可以作为常规Web服务器运行,并允许运行JavaScript程序
  • 利用伟大的 V8 JavaScript 引擎
  • 当你需要同时做几件事时,是非常好的
  • 是基于事件的,所以所有精彩的Ajax类的东西都可以在服务器端完成
  • 让我们在浏览器和后端之间共享代码
  • 让我们与 MySQL 交谈

我遇到的一些来源是:

考虑到Node.js几乎可以在亚马逊的EC2实例上运行,我试图了解哪种类型的问题需要Node.js而不是PHPPythonRuby等任何强大的国王。我知道这实际上取决于一个人对一种语言的专业知识,但我的问题更多地属于一般类别:何时使用特定的框架以及它特别适合哪种类型的问题?


答案 1

你在总结Node.js的优点方面做得很好。我的感觉是,Node.js特别适用于您希望保持从浏览器到服务器的持久连接的应用程序。使用称为“长轮询”的技术,可以编写一个实时向用户发送更新的应用程序。对许多网络巨头(如Ruby on RailsDjango)进行长时间的轮询会在服务器上产生巨大的负载,因为每个活动客户端都会占用一个服务器进程。这种情况相当于鞑靼人攻击。当您使用 Node.js 之类的东西时,服务器无需为每个打开的连接维护单独的线程。

这意味着您可以在Node中创建基于浏览器的聊天应用程序.js该应用程序几乎不需要任何系统资源即可为大量客户端提供服务。每当你想做这种长轮询时,Node.js都是一个不错的选择。

值得一提的是,Ruby和Python都有工具来做这种事情(分别是事件机器扭曲),但是Node.js做得非常好,而且从头开始。JavaScript 非常适合于基于回调的并发模型,并且在这里表现出色。此外,能够使用客户端和服务器原生的JSON进行序列化和反序列化是非常漂亮的。

我期待在这里阅读其他答案,这是一个很棒的问题。

值得指出的是,Node.js也适用于您将在客户端/服务器间隙中重用大量代码的情况。Meteor框架使这变得非常容易,很多人都认为这可能是Web开发的未来。根据经验,我可以说,用Meteor编写代码非常有趣,其中很大一部分是花更少的时间思考如何重构数据,因此在浏览器中运行的代码可以轻松操作它并将其传递回去。

这是一篇关于金字塔和长轮询的文章,事实证明,在gevent的帮助下,设置起来非常容易:TicTacToe和Long Polling with Pyramid


答案 2

我相信Node.js最适合实时应用程序:在线游戏,协作工具,聊天室,或者任何用户(或机器人?或传感器?)对应用程序执行的操作需要立即被其他用户看到而无需页面刷新的任何内容。

我还应该提到,Socket.IO 与Node.js相结合,将比长轮询更能降低您的实时延迟。Socket.IO 将作为最坏的情况回退到长时间轮询,而是使用Web套接字甚至Flash(如果可用)。

但我还应该提到,几乎任何可能由于线程而阻塞代码的情况都可以通过Node.js更好地解决。或者需要应用程序由事件驱动的任何情况。

此外,Ryan Dahl在我曾经参加过的一次演讲中说,Node.js基准测试在常规的旧HTTP请求方面与Nginx非常接近。因此,如果我们使用Node.js构建,我们可以非常有效地为正常资源提供服务,当我们需要事件驱动的东西时,它已经准备好处理它。

另外,它一直都是JavaScript。整个堆栈上的通用语。