我对这类东西很陌生,但最近我听到了很多关于Node.js有多好的消息。考虑到我非常喜欢使用jQuery和JavaScript,我不禁想知道如何决定何时使用Node.js。

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

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

我遇到的一些来源是:

深入Node.js–介绍和安装了解NodeJS按示例列出的节点(存档.is)让我们制作一个Web应用程序:NodePad

考虑到Node.js几乎可以在Amazon的EC2实例上开箱即用,我试图了解Node.js需要什么类型的问题,而不是PHP、Python和Ruby等强大的王者。我知道这确实取决于一个人对语言的专业知识,但我的问题更多地属于一般范畴:什么时候使用特定的框架,它特别适合什么类型的问题?


当前回答

它可以用于

高度事件驱动且严重受I/O限制的应用程序处理与其他系统的大量连接的应用程序实时应用程序(Node.js是从一开始就为实时和简单而设计的使用。)应用程序可以处理来自其他来源的大量信息流高流量、可扩展的应用程序移动应用程序必须与平台API和数据库通信,而无需处理大量数据分析构建网络应用程序需要经常与后端通信的应用程序

在移动方面,黄金时段公司的移动解决方案依赖Node.js。看看为什么?

LinkedIn是一个杰出的用户。他们的整个移动堆栈都建立在Node.js上。他们从在每台物理机器上运行15个服务器和15个实例,到只运行4个实例,可以处理双倍的流量!

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

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

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

其他回答

我为新项目选择Node.js的另一个原因是:

能够进行纯云开发

我使用Cloud9IDE已经有一段时间了,现在我无法想象没有它,它涵盖了所有的开发生命周期。你只需要一个浏览器,你可以随时随地在任何设备上进行编码。您不需要在一台计算机(如在家中)中签入代码,然后在另一台计算机中签出(如在工作场所)。

当然,可能有其他语言或平台的基于云的IDE(cloud 9 IDE也增加了对其他语言的支持),但使用cloud 9进行Node.js开发对我来说真的是一种很棒的体验。

做石棉长内裤。。。

昨天我的标题是Packt Publications,Reactive Programming with JavaScript。它实际上不是一个以Node.js为中心的标题;前几章旨在涵盖理论,后几章则涉及实践。因为我真的认为不给读者一个Web服务器是不合适的,所以Node.js似乎是最明显的选择。案件甚至在开庭前就已结案。

我本可以对我使用Node.js的经历给出一个非常乐观的看法。相反,我诚实地讲述了我遇到的好点和坏点。

让我在这里引用几句相关的话:

警告:Node.js及其生态系统很热——热到足以让你严重烧伤!当我还是一名数学助教时,有人告诉我一个不明显的建议,那就是不要告诉学生什么是“容易的”。回想起来,原因有点明显:如果你告诉人们什么是容易的,没有找到解决方案的人可能会觉得(甚至更)愚蠢,因为他们不仅不知道如何解决问题,但他们太愚蠢而无法理解的问题很简单!Python/Django中的一些陷阱不仅会惹恼来自Python/Django的人,如果你做了任何更改,它会立即重新加载源代码。对于Node.js,默认行为是,如果您进行了一次更改,旧版本将继续处于活动状态,直到时间结束或手动停止并重新启动服务器。这种不恰当的行为不仅惹恼了蟒蛇爱好者;这也激怒了提供各种变通方法的本地Node.js用户。StackOverflow问题“在Node.js中自动重新加载文件”在撰写本文时获得了超过200个赞成票和19个答案;编辑会将用户引导到保姆脚本、节点主管,主页位于http://tinyurl.com/reactjs-node-supervisor.这个问题为新用户提供了很大的机会,让他们觉得自己很愚蠢,因为他们认为自己已经解决了这个问题,但旧的错误行为完全没有改变。而且很容易忘记跳出服务器;我已经做过多次了。我想传达的信息是, “不,你并不傻,因为Node.js的这种行为让你背上了背;只是Node.js设计人员认为没有理由在这里提供适当的行为。请尝试应对它,也许可以从节点主管或其他解决方案那里获得一些帮助,但请不要觉得自己很傻。你不是有问题的人;问题是Node.js默认的行为。”经过一番辩论后,这一部分被保留了下来,正是因为我不想给人一种“这很容易”的印象。我在工作时反复剁手,我不想克服困难,让你相信让Node.js及其生态系统正常运行是一件简单的事,如果这对你来说也不简单,你不知道你在做什么。如果您在使用Node.js时没有遇到令人讨厌的困难,那就太好了。如果你这样做了,我希望你不要走开时觉得,“我很傻,一定是我出了什么问题。”如果你在处理Node.js时遇到了令人讨厌的意外,那你就不傻了。不是你!这是Node.js及其生态系统!

在最后几章和结论中,我并不真正想要附录,它讲述了我在生态系统中找到的东西,并为愚蠢的文学主义提供了一个变通方法:

另一个看起来非常适合的数据库,也可能是可赎回的,是HTML5键值存储的服务器端实现。这种方法具有API的主要优势,大多数优秀的前端开发人员都非常了解该API。就这一点而言,它也是大多数不太好的前端开发人员都足够理解的API。但是对于节点localstorage包,虽然不提供字典语法访问(您希望使用localstorage.setItem(key,value)或localstorage.getItem(key),而不是localstorage[key]),但实现了完整的localstorage语义,包括默认的5MB配额,为什么?服务器端JavaScript开发人员是否需要自我保护?对于客户端数据库功能,每个网站5MB的配额确实是一个巨大而有用的喘息空间,可以让开发人员使用它。您可以设置一个低得多的配额,并且仍然可以为开发人员提供比蹒跚学步和cookie管理更大的改进。5MB的限制对大数据客户端处理来说并不是很快,但有一个非常慷慨的空间,足智多谋的开发人员可以利用它做很多事情。但另一方面,在最近购买的大多数磁盘中,5MB并不是一个特别大的部分,这意味着如果您和某个网站对磁盘空间的合理使用存在分歧,或者某个网站过于贪婪,那么这并不会给您带来太大的成本,除非您的硬盘已经太满,否则您不会面临被淹没的危险。如果平衡稍微少一点或多一点,也许我们会更好,但总体而言,这是解决客户端环境内在紧张的一个不错的解决方案。然而,可能需要指出的是,当您是为服务器编写代码的人时,您不需要任何额外的保护,以免数据库的大小超过可容忍的5MB。大多数开发人员既不需要也不希望工具充当保姆,保护他们存储超过5MB的服务器端数据。5MB的配额是客户端的黄金平衡,在Node.js服务器上有点傻。(而且,对于本附录所述的多个用户的数据库,可能会有点痛苦地指出,除非您在磁盘上为每个用户帐户创建一个单独的数据库,否则每个用户帐户的容量不是5MB;这是所有用户帐户共享的5MB。如果您病毒传播,这可能会很痛苦!)文档中指出,配额是可定制的,但一周前发给开发者的一封电子邮件,询问如何更改配额,这封邮件没有得到回复,StackOverflow的问题也是如此。我能找到的唯一答案是在Github CoffeeScript源代码中,它被列为构造函数的可选第二个整数参数。所以这很简单,您可以指定一个等于磁盘或分区大小的配额。但是,除了移植一个没有意义的特性之外,该工具的作者还完全没有遵循一个非常标准的惯例,即将0解释为变量或函数的“无限”,其中整数将指定某些资源使用的最大限制。处理此错误功能的最佳方法可能是指定配额为无限:

if (typeof localStorage === 'undefined' || localStorage === null)
  {      
  var LocalStorage = require('node-localstorage').LocalStorage;
  localStorage = new LocalStorage(__dirname + '/localStorage',
    Infinity);
  }

按顺序交换两个注释:

人们不必要地不断使用JavaScript作为一个整体来攻击自己的脚,而JavaScript成为一种值得尊敬的语言的一部分,正如道格拉斯·克罗克福德(Douglas Crockford)所说,“JavaScript作为一种语言,有一些真正好的部分,也有一些真正坏的部分。这里有好的部分。请忘记其他任何东西。“也许炙手可热的Node.js生态系统会发展出自己的”Douglas Crockford“,他会说,”Node.js的生态系统是一个编码狂野的西部,但有一些真正的宝石可以找到。这里有一个路线图。这里有一些几乎不惜任何代价都可以避免的领域。这里有任何语言或环境中都可以找到的一些最有钱的领域。”也许其他人可以把这些话当作一个挑战,跟随克罗克福德的领导,为Node.js及其生态系统写下“好的部分”和/或“更好的部分”。我会买一本!考虑到所有项目的热情程度和纯粹的工作时间,可能需要在一年、两年或三年内对本文撰写时关于不成熟生态系统的任何言论进行严厉的批评。五年后说:“2015年Node.js生态系统有几个雷区。2020年Node.jss生态系统有多个天堂。”

你总结了Node.js的优点,做得很好。我的感觉是,Node.js特别适合那些希望保持浏览器与服务器之间持久连接的应用程序。使用称为“长轮询”的技术,您可以编写一个实时向用户发送更新的应用程序。在Ruby on Rails或Django等网络巨头上进行长时间的轮询会给服务器带来巨大的负载,因为每个活动客户端都会消耗一个服务器进程。这种情况相当于停机坪袭击。当您使用Node.js之类的东西时,服务器不需要为每个打开的连接维护单独的线程。

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

值得一提的是,Ruby和Python都有做这类事情的工具(分别是eventmachine和twisted),但Node.js从一开始就做得非常好。JavaScript非常适合基于回调的并发模型,并且在这里表现出色。此外,能够使用客户端和服务器上的JSON进行序列化和反序列化是非常不错的。

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

值得指出的是,Node.js也非常适合在客户机/服务器之间重用大量代码的情况。Meteor框架使这变得非常简单,许多人都认为这可能是web开发的未来。根据经验,我可以说在Meteor中编写代码非常有趣,其中很大一部分是花更少的时间思考如何重组数据,这样浏览器中运行的代码就可以轻松地处理数据并将其传递回去。

这是一篇关于金字塔和长轮询的文章,事实证明,在gevent:TicTacToe和长轮询与金字塔的帮助下,这很容易设置。

它可以用于

高度事件驱动且严重受I/O限制的应用程序处理与其他系统的大量连接的应用程序实时应用程序(Node.js是从一开始就为实时和简单而设计的使用。)应用程序可以处理来自其他来源的大量信息流高流量、可扩展的应用程序移动应用程序必须与平台API和数据库通信,而无需处理大量数据分析构建网络应用程序需要经常与后端通信的应用程序

在移动方面,黄金时段公司的移动解决方案依赖Node.js。看看为什么?

LinkedIn是一个杰出的用户。他们的整个移动堆栈都建立在Node.js上。他们从在每台物理机器上运行15个服务器和15个实例,到只运行4个实例,可以处理双倍的流量!

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

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

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

我认为没有人提到Node.js的另一个伟大之处是它的社区、包管理系统(npm)以及存在的模块数量,只需将它们包含在package.json文件中即可。