没有像银弹一样的东西。一切都带来了与之相关的一些成本。就像你吃油腻的食物,你会损害你的健康,健康的食物不会像油性食物一样。无论他们是否想要健康或香料,都是个人选择。 Node.js考虑在特定场景中使用的方式相同。如果您的应用不适合该方案,则不应将其视为您的应用开发。我只是想到了同样的想法:
的 何时使用Node.JS 强>
的 何时不使用Node.JS 强>
的 Node.JS的可扩展性考虑 强>
的 Node.JS替代品 强>
但是,还有其他选项可用于代替Node.JS Vert.x 似乎非常有前途,并有许多额外的功能,如polygot和更好的可扩展性考虑因素。
你做了很好的总结Node.js的精彩内容。我的感觉是Node.js特别适合于您希望保持从浏览器到服务器的持久连接的应用程序。使用一种称为的技术 “长轮询” ,您可以编写一个实时向用户发送更新的应用程序。对许多网络巨头进行长时间的轮询,比如 Ruby on Rails 要么 Django的 ,会在服务器上产生巨大的负载,因为每个活动客户端都会占用一个服务器进程。这种情况相当于一个 焦油坑 攻击。当您使用Node.js之类的东西时,服务器不需要为每个打开的连接维护单独的线程。
这意味着你可以创建一个 基于浏览器的聊天应用程序 在Node.js中,几乎没有系统资源来为很多客户端提供服务。任何时候你想做这种长轮询,Node.js是一个很好的选择。
值得一提的是,Ruby和Python都有工具来做这类事情( EventMachine的 和 扭曲 ,分别),但Node.js非常好,并从头开始。 JavaScript非常适合基于回调的并发模型,并且在这方面表现优异。此外,能够使用本机的JSON序列化和反序列化客户端和服务器是非常好的。
我期待在这里阅读其他答案,这是一个很棒的问题。
值得指出的是,Node.js对于在客户端/服务器间隙中重复使用大量代码的情况也很有用。该 流星框架 这让这很容易,很多人都认为这可能是Web开发的未来。我可以从经验中说,在Meteor中编写代码非常有趣,其中很大一部分是花更少的时间考虑如何重构数据,因此浏览器中运行的代码很容易操纵它并将其传回去。
这是一篇关于金字塔和长轮询的文章,结果很容易在gevent的帮助下进行设置: TicTacToe和长金字塔轮询 。
我可以分享几点,以及为什么要使用节点js。
缺点:-
结论:- Nodejs最适合用于简单和实时的应用程序..如果你有非常大的业务逻辑和复杂的功能,那么最好不要使用nodejs。 如果您想构建一个应用程序以及聊天和任何协作功能..节点可以在特定部分使用,并保持应该与您的便利技术。
使用NodeJS的原因:
它运行Javascript,所以你可以使用 的 同一种语言 强> 在服务器和客户端上,甚至在它们之间共享一些代码(例如,用于表单验证,或在两端呈现视图。)
该 单线程 事件驱动系统是 的 快速 强> 即使在处理大量请求时,与传统的多线程相比也很简单 Java的 或ROR框架。
不断增长的游泳池 的 包 可通过NPM获取 强> ,包括客户端和服务器端库/模块,以及用于Web开发的命令行工具。其中大多数都方便地托管在github上,有时您可以报告问题并在几小时内找到它!把所有东西放在一个屋檐下很好,标准化的问题报告和简单的分叉。
它已成为运行的事实标准环境 的 与Javascript相关的工具 强> 和别的 的 与网络相关的工具 强> ,包括任务运行器,minifiers,美化器,linters,预处理器,捆绑器和分析处理器。
它似乎非常适合原型设计,敏捷开发和 的 快速的产品迭代 强> 。
原因 的 不 强> 使用NodeJS:
它运行Javascript,没有编译时类型检查。对于大型,复杂的 的 安全关键 强> 系统或项目,包括不同组织之间的合作,鼓励的语言 的 合同接口 强> 并提供 的 静态类型检查 强> 可以节省一些调试时间(和 爆炸 ) 长期来说。 (尽管JVM仍然坚持使用 null ,请将Haskell用于您的核反应堆。)
null
除此之外,NPM中的许多软件包都有一点 的 生的 强> ,仍处于快速发展阶段。旧框架的一些库已经历了十年的测试和错误修正,而且非常 的 稳定 强> 目前为止。 Npmjs.org没有评估包的机制 这导致包装的增加或多或少地发生相同的事情,其中很大一部分不再维持。
嵌套回调地狱。 (当然有 20种不同解决方案 这...)
不断增长的软件包可以使一个NodeJS项目出现 的 根本不同 强> 从下一个。由于可用的选项数量众多(例如Express /),因此在实施方面存在很大差异 Sails.js / 流星 / 德比 )。这有时会使新开发人员更难进入Node项目。与之对比 的 轨道 强> 开发人员加入现有项目:他应该能够很快熟悉应用程序,因为鼓励所有Rails应用程序使用 的 类似的结构 强> 。
处理文件可能会有点痛苦。在其他语言中微不足道的事情,比如从文本文件中读取一行,就是 很奇怪,Node.js 有80多个upvotes的StackOverflow问题。有 没有简单的方法从CSV文件一次读取一条记录 。等等。
我喜欢NodeJS,它既快速又狂野又有趣,但我担心它对可证明的正确性几乎没有兴趣。让我们希望我们最终可以融合两全其美。我很想知道将来取代Node会有什么...... :)
Node非常适合快速原型,但我从来没有再用它来做任何复杂的事情。 我花了20年时间与编译器建立关系,我肯定想念它。
Node对于维护一段时间没有访问过的代码特别痛苦。类型信息和编译时错误检测是好事。为什么抛出这一切?为了什么?当dang,当某些东西向南移动时,堆栈痕迹通常完全没用。
我的 的 还有一个原因 强> 为新项目选择Node.js是:
的 能够进行基于纯云的开发 强>
我用过 Cloud9 IDE 有一段时间,现在我无法想象没有它,它涵盖了所有的开发生命周期。您所需要的只是一个浏览器,您可以随时随地在任何设备上进行编码。您无需在一台计算机中签入代码(如在家中),然后在另一台计算机(例如在工作场所)结账。
当然,可能有基于云的IDE用于其他语言或平台(Cloud 9 IDE也增加了对其他语言的支持),但使用Cloud 9进行Node.js开发对我来说真的是一次很棒的体验。
我相信Node.js最适合实时应用:在线游戏,协作工具,聊天室,或者其他用户需要立即看到一个用户(或机器人?或传感器?)对应用程序做什么的任何事情,没有页面刷新。
我还应该提一下,Socket.IO与Node.js相结合,可以比长轮询更进一步减少实时延迟。 Socket.IO将在最糟糕的情况下回退到长轮询,而是使用Web套接字甚至Flash(如果可用的话)。
但是我还应该提一下,使用Node.js可以更好地解决代码可能由于线程而阻塞的任何情况。或者您需要应用程序进行事件驱动的任何情况。
此外,Ryan Dahl在一次谈话中说,我曾经参加过Node.js基准测试与Nginx的常规旧HTTP请求密切相关。因此,如果我们使用Node.js构建,我们可以非常有效地服务我们的常规资源,当我们需要事件驱动的东西时,它就可以处理它了。
加上它一直都是JavaScript。 Lingua Franca整个堆栈。
我有一个真实世界的例子,我使用Node.js.我工作的公司有一个客户希望拥有一个简单的静态HTML网站。本网站用于销售一件商品 贝宝 并且客户还希望有一个显示已售商品数量的柜台。客户预计会有大量访问者访问本网站。我决定使用Node.js来制作计数器 Express.js 框架。
Node.js应用程序很简单。从a获取已售商品金额 Redis的 数据库,在商品售出时增加计数器,并通过商品向用户提供计数器值 API 。
的 在这种情况下我选择使用Node.js的一些原因 强>
在这种情况下,Node.js是一个很棒的选择。
如果您的应用程序主要使用web apis或其他io频道,提供或采用用户界面,node.js可能是一个公平的选择,特别是如果你想要挤出最大的可扩展性,或者,如果你的生活中的主要语言是javascript(或各种javascript转换器)。如果你构建微服务,node.js也没关系。 Node.js也适用于任何小型或简单的项目。
它的主要卖点是允许前线负责后端的东西,而不是典型的鸿沟。另一个合理的卖点是,如果您的员工以javascript为导向开始。
但是,除了某一点之外,如果没有可怕的黑客攻击强制模块化,可读性和流量控制,就无法扩展代码。有些人喜欢那些黑客,特别是来自事件驱动的javascript背景,他们似乎熟悉或可原谅。
特别是,当您的应用程序需要执行同步流程时,您会开始放弃一半的解决方案,这会使您在开发过程中大大减慢速度。如果您的应用程序中有计算密集型部件,请谨慎选择(仅限)node.js.也许 http://koajs.com/ 与我最初使用node.js或写这篇文章时相比,或其他新奇事物可以缓解那些最初棘手的问题。
节点提供的另一件事是能够使用节点的子进程创建多个v8节点的节点( childProcess.fork() 每个都需要10mb内存(根据文档),因此不会影响运行服务器的主进程。因此,卸载需要大量服务器负载的后台作业变成了孩子的游戏,我们可以在需要时轻松杀死它们。
我一直在使用节点,在我们构建的大多数应用程序中,同时需要服务器连接,因此网络流量很大。框架之类的 Express.js 和新的 Koajs (删除了回调地狱)使得在节点上工作变得更加容易。