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

我对这种东西是陌生的,但是最近我已经听到很多关于Node.js有多出色的信息。考虑到我一般喜欢使用 jQuery 和 JavaScript 有多少,我不禁想知道如何决定何时使用 Node.js。我想到的 Web 应用程序有点像Bitly-需要一些内容,然后将其存档。

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

  • 是一种命令行工具,可以作为常规 Web 服务器运行,并且可以运行一个 JavaScript 程序
  • 利用强大的V8 JavaScript 引擎
  • 需要同时做几件事时非常好
  • 是基于事件的,因此所有出色的类似于 Ajax的工作都可以在服务器端完成
  • 让我们在浏览器和后端之间共享代码
  • 让我们与 MySQL 对话

我遇到的一些来源是:

考虑到 Node.js 几乎可以直接在亚马逊的 EC2实例上运行,我试图了解 Node.js 需要哪种类型的问题,而不是像PHPPythonRuby这样的强大之王。我知道这确实取决于一个人在某种语言上的专业知识,但是我的问题更多地归结为以下一般类别:什么时候使用特定框架,它特别适合什么类型的问题?

答案

在总结 Node.js 的出色功能方面,您做了出色的工作。我的感觉是,Node.js 特别适合希望从浏览器回到服务器的持久连接的应用程序。使用一种称为“长轮询” 的技术 ,您可以编写一个向用户实时发送更新的应用程序。在Ruby on RailsDjango 之类的许多 Web 巨人上进行长时间的轮询会在服务器上产生巨大的负载,因为每个活动的客户端都要吃掉一个服务器进程。这种情况相当于一次沥青袭击。使用 Node.js 之类的服务器时,服务器无需为每个打开的连接维护单独的线程。

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

值得一提的是,Ruby 和 Python 都具有执行此类操作的工具(分别是eventmachinetwisted ),但是 Node.js 从头开始就表现出色。 JavaScript 在基于回调的并发模型中处于特殊位置,并且在这里很有用。而且,能够使用客户端和服务器都原生的 JSON 进行序列化和反序列化非常漂亮。

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

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

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

我认为 Node.js 最适合实时应用程序:在线游戏,协作工具,聊天室或任何一个用户(或机器人?或传感器?)对应用程序有什么要求的其他用户必须立即看到的任何东西,没有页面刷新。

我还应该提到,与长轮询相比,将 Socket.IO 与 Node.js 结合使用将减少您的实时延迟。在最坏的情况下,Socket.IO 将退回到长时间轮询,如果可用,则改用 Web 套接字,甚至使用 Flash。

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

同样,Ryan Dahl 在一次谈话中说,我曾经参加过,对于常规的旧 HTTP 请求,Node.js 基准测试与 Nginx 紧密竞争。因此,如果我们使用 Node.js 进行构建,则可以非常有效地服务于我们的常规资源,并且当我们需要事件驱动的东西时,就可以对其进行处理。

再加上所有时间都是 JavaScript。 Lingua Franca 整个筹码量。

使用 NodeJS 的原因:

  • 它运行 Javascript,因此您可以在服务器和客户端上使用相同的语言 ,甚至在它们之间共享一些代码(例如,用于表单验证或在任一端呈现视图)。

  • 与传统的多线程Java或 ROR 框架相比,即使一次处理大量请求, 单线程事件驱动的系统也非常快捷

  • 通过 NPM 可以访问不断增长的软件包池,包括客户端和服务器端库 / 模块,以及用于 Web 开发的命令行工具。其中大多数都方便地托管在 github 上,有时您可以在其中报告问题,并在数小时内发现问题!将所有内容都放在一个屋顶下非常好,它具有标准化的问题报告和轻松的分支。

  • 它已成为事实上的标准环境,可以在其中运行与 Javascript 相关的工具以及与其他Web 相关的工具 ,包括任务运行程序,缩小程序,美化程序,短毛绒,预处理程序,打包程序和分析处理器。

  • 它似乎非常适合原型设计,敏捷开发和快速产品迭代

使用 NodeJS 的原因:

  • 它运行 Javascript,而 Javascript 没有编译时类型检查。对于大型的,复杂的,对安全至关重要的系统,或者包括不同组织之间的协作在内的项目,从长远来看,鼓励合同界面并提供静态类型检查的语言可以为您节省一些调试时间(和爆炸时间)。 (尽管 JVM 始终使用null ,但请在您的核反应堆中使用 Haskell。)

  • 除此之外,NPM 中的许多软件包都有些原始 ,并且仍在快速发展中。一些用于较旧框架的库已经过了十年的测试和错误修复,并且目前非常稳定Npmjs.org 没有对包进行评分的机制 ,这导致了做相同事情的包激增,其中很大一部分不再被维护。

  • 嵌套回调地狱。 (当然,对此有20 种不同的解决方案 ...)

  • 不断增长的软件包池可以使一个 NodeJS 项目与下一个完全不同 。由于存在大量可用的选项(例如 Express / Sails.js / Meteor / Derby ),因此实现的多样性很大。有时候,这会使新开发人员更难以加入 Node 项目。与Rails开发人员加入现有项目相反:他应该能够很快熟悉该应用程序,因为鼓励所有 Rails 应用程序使用类似的结构

  • 处理文件可能会有些麻烦。在其他语言中琐碎的事情,例如从文本文件中读取一行,对于使用 Node.js来说是很奇怪的 ,因此有 80 个以上的表决存在 StackOverflow 问题。 没有简单的方法可以一次从 CSV 文件读取一条记录 。等等。

我喜欢 NodeJS,它快速,狂野且有趣,但是我担心它对可证明的正确性兴趣不大。希望我们最终能够融合两全其美。我渴望看到将来将取代 Node 的... :)

简而言之:

Node.js 非常适合于具有大量并发连接的应用程序,并且每个请求仅需要很少的 CPU 周期,因为事件循环(与所有其他客户端一起)在函数执行期间被阻塞。

Mixu 的技术博客很好地介绍了 Node.js 中的事件循环:了解 node.js 事件循环

我有一个使用 Node.js 的真实示例。我工作的公司有一位客户希望拥有一个简单的静态 HTML 网站。该网站用于使用PayPal出售一件商品,客户还希望拥有一个可以显示所售商品数量的柜台。客户预计将有大量访问该网站的访客。我决定使用 Node.js 和Express.js框架进行计数。

Node.js 应用程序很简单。从Redis数据库获取已售商品数量,在售出商品时增加计数器,并通过API将计数器值提供给用户。

在这种情况下选择使用 Node.js 的一些原因

  1. 它非常轻巧且快速。在三个星期内,该网站的访问量已超过 200000,并且最少的服务器资源已能够处理所有这些。
  2. 计数器很容易成为实时计数器。
  3. Node.js 易于配置。
  4. 有许多免费的模块。例如,我找到了 PayPal 的 Node.js 模块。

在这种情况下,Node.js 是一个了不起的选择。

使用 Node 启动下一个项目的最重要原因...

  • 所有最酷的家伙都加入其中... 所以一定很有趣。
  • 您可以在凉爽的地方闲逛,并有很多值得夸耀的 Node 冒险。
  • 当涉及到云托管成本时,您是一分钱 pin。
  • 曾经在那里与 Rails 做到这一点
  • 您讨厌 IIS 部署
  • 您过去的 IT 工作变得越来越乏味,您希望自己处于崭新的起步阶段。

期待什么...

  • 借助 Express,您将感到安全无忧,而无需使用您不需要的所有服务器膨胀软件。
  • 像火箭一样运行,并且缩放良好。
  • 你梦到了。您已安装。节点软件包 repo npmjs.org是世界上最大的开源库生态系统。
  • 您的大脑将在嵌套的回调中浪费时间...
  • ... 直到您学会遵守诺言
  • SequelizePassport是您的新 API 朋友。
  • 调试大多数异步代码将变得非常有趣
  • 是所有提名人掌握Typescript 的时间

谁使用它?

  • 贝宝,Netflix,沃尔玛,LinkedIn,Groupon,Uber,GoDaddy,道琼斯
  • 这就是为什么他们切换到 Node的原因。

没有什么比银子弹更像了。一切都伴随着一些成本。就像您吃油腻的食物一样,您会损害自己的健康,健康的食物不会像油腻的食物那样带有香料。他们是想要健康还是在食物中添加香料是个人选择。 Node.js 被认为用于特定场景的方式相同。如果您的应用程序不适合这种情况,则不应在应用程序开发中考虑它。我只是将我的想法放在相同的地方:

何时使用 Node.JS

  1. 如果您的服务器端代码需要很少的 cpu 周期。在其他情况下,您正在执行非阻塞操作,并且没有繁重的算法 / 作业,因此不占用大量 CPU 周期。
  2. 如果您来自 Javascript 领域,并且喜欢像客户端 JS 一样编写单线程代码。

何时不使用 Node.JS

  1. 您的服务器请求取决于占用大量 CPU 的算法 / 作业。

Node.JS 的可伸缩性注意事项

  1. Node.JS 本身并未利用底层系统的所有核心,并且默认情况下它是单线程的,因此您必须自己编写逻辑以利用多核处理器并使之成为多线程。

Node.JS 替代品

还有其他选项可以代替 Node.JS,但是Vert.x似乎很有前途,并具有诸如 polygot 和更好的可伸缩性考虑之类的许多附加功能。

我认为没有人提到过 Node.js 的另一件事是令人惊叹的社区,程序包管理系统(npm)以及只需将它们包含在 package.json 文件中就可以包含的现有模块数量。

我的作品:nodejs 非常适合制作实时系统,例如分析,聊天应用程序,api,广告服务器等。该死,我在 2 小时内使用 nodejs 和 socket.io 制作了我的第一个聊天应用程序,而考试周也是如此!

编辑

自从我开始使用 nodejs 以来已经有好几年了,我已经将它用于制作许多不同的东西,包括静态文件服务器,简单的分析,聊天应用程序等等。这是我何时使用 nodejs 的观点

何时使用

在制作强调并发性和速度的系统时。

  • 仅套接字服务器,例如聊天应用程序,irc 应用程序等。
  • 社交网络强调实时资源,例如地理位置,视频流,音频流等。
  • 像分析网络应用程序一样,真正快速地处理小数据块。
  • 公开仅 REST 的 api。

什么时候不使用

它是一种非常通用的 Web 服务器,因此您可以在任何地方使用它,但可能不在这些地方。

  • 简单的博客和静态站点。
  • 就像静态文件服务器一样。

请记住,我只是在挑剔。对于静态文件服务器,apache 更好,主要是因为它广泛可用。这些年来,nodejs 社区变得越来越大,越来越成熟,可以肯定地说,如果您有自己的托管选择,那么 nodejs 几乎可以在任何地方使用。

可以在哪里使用

  • 高度事件驱动且受 I / O 约束的应用程序
  • 处理与其他系统的大量连接的应用程序
  • 实时应用程序(Node.js 专为实时而设计,并且易于使用。)
  • 杂乱地往返于其他来源的信息流的应用程序
  • 高流量,可扩展的应用程序
  • 无需进行大量数据分析即可与平台 API 和数据库进行通信的移动应用程序
  • 构建联网的应用程序
  • 需要经常与后端对话的应用程序

在移动方面,黄金时段公司依靠 Node.js 来提供移动解决方案。 找出原因?

LinkedIn是杰出的用户。他们的整个移动堆栈都基于 Node.js。他们从在每台物理机上运行 15 台服务器(每个实例有 15 个实例)到仅 4 个实例–可以处理两倍的流量!

eBay推出了用于 HTTP API 的网络查询语言 ql.io,该语言使用 Node.js 作为运行时堆栈。他们能够调整常规的开发人员质量的 Ubuntu 工作站,以每个 node.js 进程处理超过 120,000 个活动连接,每个连接消耗大约 2kB 内存!

沃尔玛重新设计了其移动应用程序以使用 Node.js,并将其 JavaScript 处理推到了服务器上。

有关更多信息,请访问: http//www.pixelatingbits.com/a-closer-look-at-mobile-app-develop-with-node-js/