如何决定何时使用Node.js?
我对这类东西很陌生,但最近我听到很多关于Node.js的好处。 考虑到我一般喜欢用jQuery和JavaScript工作,我不禁想知道如何决定何时使用Node.js. 我脑海中的Web应用程序就像Bitly - 需要一些内容,将其归档。
从过去几天我所做的所有功课中,我获得了以下信息。 Node.js的
我遇到的一些来源是:
考虑到Node.js几乎可以在亚马逊的EC2实例上直接运行,我想了解什么类型的问题需要Node.js而不是像PHP,Python和Ruby那样的强大国王。 我明白,这实际上取决于人们对语言的专业知识,但是我的问题更多地归因于以下一般类别:何时使用特定框架以及它特别适合的类型问题?
你在总结Node.js真棒的方面做得很好。 我的感觉是,Node.js特别适用于想要维护从浏览器到服务器的持久连接的应用程序。 使用称为“长轮询”的技术,您可以编写一个实时向用户发送更新的应用程序。 长时间轮询许多网络巨头,比如Ruby on Rails或Django,会在服务器上造成巨大的负担,因为每个活动客户端都会吃掉一个服务器进程。 这种情况相当于一次临时攻击。 当你使用像Node.js这样的东西时,服务器不需要为每个打开的连接维护单独的线程。
这意味着您可以在Node.js中创建基于浏览器的聊天应用程序,几乎不需要系统资源即可为大量客户端提供服务。 任何时候你想要做这种长轮询,Node.js是一个很好的选择。
值得一提的是,Ruby和Python都有工具可以完成这种事情(分别是事件机器和扭曲),但是Node.js的表现非常好,并且从头开始。 JavaScript特别适合基于回调的并发模型,并且它在这里非常出色。 另外,能够使用本地客户端和服务器的JSON序列化和反序列化非常漂亮。
我期待着在这里阅读其他答案,这是一个很棒的问题。
值得指出的是,Node.js对于在整个客户端/服务器间隙重复使用大量代码的情况也非常有用。 Meteor框架使这非常简单,许多人认为这可能是Web开发的未来。 我可以从经验中得知,在Meteor编写代码是一件非常有趣的事情,其中很大一部分时间花在考虑如何重构数据上的时间较少,因此浏览器中运行的代码可以很容易地操纵它并将其传回。
这里有一篇关于金字塔和长轮询的文章,结果很容易在gevent的帮助下建立起来:TicTacToe和金字塔长轮询。
我相信Node.js最适合于实时应用程序:在线游戏,协作工具,聊天室或其他用户(或机器人或传感器)对应用程序执行的任何操作都需要立即被其他用户看到,没有页面刷新。
我还应该提到,与Node.js结合使用Socket.IO将使您的实时延迟比使用长轮询时的延迟时间更长。 作为最糟糕的情况,Socket.IO将回退到长轮询,并且如果可用,则使用web套接字甚至Flash。
但是我还应该提到,几乎所有可能由于线程而阻塞代码的情况都可以通过Node.js更好地解决。 或者您需要应用程序为事件驱动的任何情况。
另外,Ryan Dahl在一次谈话中表示,我曾参与过Node.js基准与Nginx的常规旧HTTP请求的竞争。 因此,如果我们使用Node.js构建,我们可以非常有效地为普通资源提供服务,而当我们需要事件驱动的东西时,就可以处理它。
再加上它一直都是JavaScript。 Lingua Franca在整个堆栈。
使用NodeJS的理由:
它运行Javascript,因此您可以在服务器和客户端上使用相同的语言 ,甚至可以在它们之间共享一些代码(例如,用于表单验证或在任一端呈现视图)。
与传统的多线程Java或ROR框架相比,即使在同时处理大量请求时,单线程事件驱动系统也很快速 ,并且也很简单。
通过NPM可访问的软件包不断增多,包括客户端和服务器端库/模块以及用于Web开发的命令行工具。 大多数这些都可以方便地在github上进行托管,有时您可以报告问题并在几小时内找到问题! 把所有东西都放在一个屋檐下,用标准化的问题报告和简单的分岔很好。
它已经成为运行Javascript相关工具和其他网络相关工具的事实标准环境,其中包括任务运行者,缩小者,美化者,短裤,预处理器,捆绑器和分析处理器。
它似乎非常适合原型设计,敏捷开发和快速产品迭代 。
不使用NodeJS的原因:
它运行Javascript,它没有编译时类型检查。 对于大型,复杂的安全关键系统或包括不同组织间协作的项目,鼓励合同界面和提供静态类型检查的语言可以为您节省一些调试时间(以及爆炸)。 (尽管JVM卡住了null
,所以请将Haskell用于您的核反应堆。)
除此之外,NPM中的很多软件包都有些粗糙 ,并且仍在快速发展。 一些旧版框架库经历了十年的测试和修复,现在非常稳定 。 Npmjs.org没有机制对软件包进行评分,这导致软件包的扩散程度差不多,但其中很大一部分不再被维护。
嵌套回调地狱。 (当然有20种不同的解决方案......)
不断增长的软件包池可以使一个NodeJS项目与下一个NodeJS项目看起来截然不同 。 由于有大量的可用选项(例如Express / Sails.js / Meteor / Derby),因此实现方式差异很大。 这有时会让新开发人员难以进入Node项目。 与加入现有项目的Rails开发人员相比:他应该能够很快熟悉应用程序,因为所有的Rails应用程序都被鼓励使用类似的结构 。
处理文件可能有点痛苦。 其他语言中微不足道的东西,比如从文本文件中读取一行,对于Node.js来说很奇怪,因为有80多个upvotes的StackOverflow问题。 从CSV文件一次无法读取一条记录。 等等。
我喜欢NodeJS,它非常快速且非常有趣,但我担心它对可证明的正确性没有兴趣。 希望我们最终能够融合两全其美。 我渴望看到将来会取代Node的什么...... :)
链接地址: http://www.djcxy.com/p/157.html上一篇: How to decide when to use Node.js?
下一篇: Set a default parameter value for a JavaScript function