[javascript] 如何决定何时使用Node.js?



7 Answers

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

我还应该提到,与Node.js结合使用Socket.IO将使您的实时延迟比使用长轮询时的延迟时间更长。 作为最糟糕的情况,Socket.IO将回退到长轮询,并且如果可用,则使用web套接字甚至Flash。

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

另外,Ryan Dahl在一次谈话中表示,我曾参与过Node.js基准与Nginx的常规旧HTTP请求的竞争。 因此,如果我们使用Node.js构建,我们可以非常有效地为普通资源提供服务,而当我们需要事件驱动的东西时,就可以处理它。

再加上它一直都是JavaScript。 Lingua Franca在整个堆栈。

Question

我对这类东西很陌生,但最近我听到很多关于Node.js好处。 考虑到我一般喜欢用jQuery和JavaScript工作,我不禁想知道如何决定何时使用Node.js. 我脑海中的Web应用程序就像Bitly ,需要一些内容,将它归档。

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

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

我遇到的一些来源是:

考虑到Node.js几乎可以在亚马逊的EC2实例上直接运行,我试图理解什么类型的问题需要Node.js而不是像PHPPythonRuby那样的强大国王。 我明白,这实际上取决于人们对语言的专业知识,但是我的问题更多地归因于以下一般类别:何时使用特定框架以及它特别适合的类型问题?




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




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

能够进行纯粹的基于云计算的开发

我已经使用了Cloud9 IDE一段时间,现在我无法想象没有它,它涵盖了所有的开发生命周期。 所有你需要的是一个浏览器,你可以随时随地在任何设备上编码。 你不需要在一台计算机上登记代码(如在家里),然后在另一台计算机上登记(如在工作地点)。

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




它可以用在哪里

  • 高度事件驱动和严重I / O限制的应用程序
  • 处理大量与其他系统连接的应用程序
  • 实时应用程序(Node.js是从实时开始设计的并且易于使用。)
  • 应用程序可以将来自其他来源的大量信息进行流式传输
  • 高流量,可扩展的应用
  • 移动应用程序必须与平台API和数据库进行交流,而无需进行大量数据分析
  • 建立网络应用程序
  • 需要经常与后端交流的应用程序

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

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

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

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

阅读更多: http://www.pixelatingbits.com/a-closer-look-at-mobile-app-development-with-node-js/ : http://www.pixelatingbits.com/a-closer-look-at-mobile-app-development-with-node-js/




I can share few points where&why to use node js.

  1. For realtime applications like chat,collaborative editing better we go with nodejs as it is event base where fire event and data to clients from server.
  2. Simple and easy to understand as it is javascript base where most of people have idea.
  3. Most of current web applications going towards angular js&backbone, with node it is easy to interact with client side code as both will use json data.
  4. Lot of plugins available.

Drawbacks:-

  1. Node will support most of databases but best is mongodb which won't support complex joins and others.
  2. Compilation Errors...developer should handle each and every exceptions other wise if any error accord application will stop working where again we need to go and start it manually or using any automation tool.

Conclusion:- Nodejs best to use for simple and real time applications..if you have very big business logic and complex functionality better should not use nodejs. If you want to build an application along with chat and any collaborative functionality.. node can be used in specific parts and remain should go with your convenience technology.




穿石棉长裤...

昨天,我与Packt Publications合作, 与JavaScript进行反应式编程 。 它不是一个真正的以Node.js为中心的标题; 前面的章节旨在涵盖理论,后面的代码量大的章节涵盖了实践。 因为我不认为不给读者一个网络服务器是合适的,所以Node.js似乎是最明显的选择。 案件在开放前关闭。

我可以对Node.js的经验给予非常好的看法。 相反,我对我遇到的优点和不足之处诚实。

让我列举一些与此相关的引用:

警告:Node.js及其生态系统很热 - 足以将您严重烧伤!

当我是数学老师的助理时,我被告知的一个非显而易见的建议不是告诉学生有什么“容易的”。回想起来,这个理由有些明显:如果你告诉人们有些事情是容易的,没有看到一个解决方案可能最终会感觉(甚至更多)愚蠢,因为他们不仅没有得到如何解决问题,但他们太笨的问题是一个容易理解的问题!

有一些小问题不仅会让来自Python / Django的人恼火,如果您改变了任何东西,它们会立即重新加载源代码。 使用Node.js,默认行为是,如果进行一次更改,则旧版本会一直保持活动状态,直到时间结束,或者直到您手动停止并重新启动服务器为止。 这种不恰当的行为不仅会让Pythonistas恼火, 它也刺激了提供各种解决方法的本地Node.js用户。 在撰写本文时,问题“自动重新载入Node.js中的文件”有超过200个upvotes和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。 但是对于node-localstorage包,虽然没有提供字典语法访问(您想要使用localStorage.setItem(key,value)或localStorage.getItem(key),而不是localStorage [key]),但实现完整的localStorage语义,包括一个默认的5MB配额 - 为什么? 服务器端JavaScript开发人员是否需要受到保护?

对于客户端数据库功能,每个网站的5MB配额实际上是一个慷慨而有用的呼吸空间,让开发人员可以使用它。 您可以设置更低的配额,并为开发人员提供无法衡量的改进,同时还可以改进cookie管理。 5MB限制不适用于大数据客户端处理,但是非常慷慨的资源开发人员可以用它来做很多事情。 但另一方面,5MB并不是大多数最近购买的磁盘的一大部分,这意味着如果你和一个网站不同意磁盘空间的合理使用,或者某个站点很简单,它并不真正花费你很多,除非你的硬盘已经满了,否则你不会遇到硬盘被淹没的危险。 也许如果余额稍微少一点或多一点,我们会更好,但总的来说,这是解决客户端环境内在紧张的一个体面的解决方案。

然而,它可能会被轻轻地指出,当你是你的服务器的一个编写代码时,你不需要任何额外的保护来让你的数据库超过5MB的容量。 大多数开发人员既不需要也不需要工具充当保姆,并保护他们不会存储超过5MB的服务器端数据。 而在客户端实现黄金平衡的5MB配额在Node.js服务器上相当有点愚蠢。 (而且,对于本附录中介绍的多用户数据库,可能会稍微痛苦地指出,除非您为每个用户帐户在磁盘上创建单独的数据库,否则这不是每个用户帐户5MB;这是共享5MB所有用户帐户一起使用,如果病毒发作,这可能会变得很痛苦 )文档指出配额是可定制的,但一周前向开发人员发送一封电子邮件,询问如何更改配额未被回答,就像问题一样。 我能找到的唯一答案是在Github CoffeeScript源代码中,它被列为构造函数的可选第二个整数参数。 所以这很容易,你可以指定一个等于磁盘或分区大小的配额。 但除了移植一个没有意义的特性外,该工具的作者完全没有遵循一个非常标准的解释0的惯例,意思是对于一个变量或函数来说“无限”,其中整数是为某些资源使用指定最大限制。 对这种错误特征做的最好的事情可能是指定配额是无限的:

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

依次交换两个评论:

人们不断地用JavaScript作为一个整体来攻击自己,JavaScript的一部分成为可敬的语言是道格拉斯·克罗克福德本质上说的,“JavaScript作为一种语言有一些非常好的部分和一些非常糟糕的部分。 这是好的部分。 “也许热门的Node.js生态系统会发展自己的 ”Douglas Crockford“,他会说,”Node.js生态系统是Wild West的编码,但是有一些真正的宝石可以找到。 这是一个路线图。 几乎可以避免任何成本的领域。 以下是在任何语言或环境中都能找到的最富有的付费区域。“

也许别人可以把这些话作为一个挑战,并遵循克罗克福德的领导,写出Node.js及其生态系统的“好的部分”和/或“更好的部分”。 我会买一份!

考虑到所有项目的热情程度和纯粹的工作时间,可能需要一年或两年,甚至三年才能对本文写作时对未成熟生态系统的任何评论大打折扣。 五年内确实可以说,“2015年的Node.js生态系统有几个雷区。 2020 Node.js生态系统拥有多个天堂。“




简而言之:

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

关于Node.js中事件循环的一篇很好的文章是Mixu的科技博客:了解node.js事件循环




使用Node开始下一个项目的最重要原因...

  • 所有最酷的帅哥都进入了它......所以它一定很有趣。
  • 您可以在冷藏室环聊,并有许多Node冒险故事。
  • 当谈到云托管成本时,你是一分钱捕手。
  • 在那里用Rails做到了
  • 你讨厌IIS部署
  • 你以前的IT工作变得相当迟钝,你希望你有一个新的启动。

期待什么...

  • 使用Express时,您会感到安全和放心,而不需要所有您不需要的服务器文件。
  • 像火箭一样运行,并能很好地扩展。
  • 你梦想着。 你安装了它。 节点包repo packages是世界上最大的开源库生态系统。
  • 你的大脑会在嵌套回调的土地上发生时间扭曲...
  • ...直到你学会遵守Promises
  • SequelizePassport是您新的API朋友。
  • 主要调试异步代码将得到嗯...... 有趣
  • 所有节点掌握Typescript

谁使用它?

  • PayPal,Netflix,沃尔玛,LinkedIn,Groupon,优步,GoDaddy,道琼斯
  • 这就是他们切换到Node的原因。





Related