将NodeJS用于大型项目

mat*_*sko 48 javascript node.js

NodeJS是大型服务器端应用程序的良好框架/代码库吗?我想要开发的是一个需要HTTP事务(状态)和大量并发用户的大型应用程序.

从我在网上看到的,NodeJS并不是大型程序使用的最佳工具.我遇到的情况如下:

  • NodeJS在JavaScript上运行,JavaScript在事件循环上运行,在批量使用时效率不高.
  • NodeJS可能是非阻塞的,但所有请求都在一个线程内处理,因此当处理许多请求时,这可能会造成一些瓶颈.
  • NodeJS构建在自己的HTTP服务器上,因此未来的维护将需要自己的sysadmin/developer hybrid来处理应用程序.
  • 没有那么多可用于NodeJS的经过充分测试和多样化的软件可以帮助您构建更大的应用程序.

有什么我想念的吗?NodeJS真的像它一样强大吗?

bry*_*mac 50

NodeJS是大型服务器端应用程序的良好框架/代码库吗?

这个问题有点主观,但我在实际的客观要点中解决了在大型项目中使用节点时遇到的实际问题.

在项目工作一段时间后更新:

最好是作为I/O绑定的前端/ API服务器(大多数前端/ api服务器).如果你有后端计算需求(处理等等),它可以配对哪些其他技术(C#net core,go,Java等...工作节点)

我创建这个项目作为一个示例说明了大多数要点 - Sane Node Development:https: //github.com/bryanmacfarlane/sanenode

NodeJS不是在自己的http服务器上构建的.它是在V8 chrome javascript引擎上构建的,不承担http服务器.有一个内置的http模块以及流行的快速Web服务器,但也有套接字模块(以及socket.io).它不仅仅是一个http服务器.

单个线程不会导致瓶颈,因为所有I/O都是偶数和异步的.这个链接解释得很好:http: //blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/

就软件模块而言,您可以在npm注册表中进行搜索.总是看看有多少其他人使用它(下载)并访问github repo以查看它是否正在积极维护(或者是否有一堆问题从未引起注意).

关于"大项目",我发现对于理智发展至关重要的是:

  1. 编译时间支持(和intellisense):编译时查找问题.如果你不认为你需要这个就像我开始时所做的那样,那么你将在第一个大型重构之后改变主意.

  2. 消除回调地狱:保持关键的性能(如上所述)但消除回调代码.使用async/await编写线性代码并保持异步性.与承诺相结合,但比单独使用承诺要好得多.

  3. 工具:很多选项,但我发现最好的是Typescript(今天的ES6/7),VS Code(intellisense),Mocha(单元测试).

  4. 检测/记录:通过跟踪和检测来深入了解您的应用程序至关重要.

  5. 建立在经过良好审查的框架上:我使用express作为示例,但这是一个偏好,还有其他的.

  • 这些都是非常好的点,但问题是:*NodeJS是大型服务器端应用程序的良好框架/代码库吗?*.这不回答这个问题. (9认同)
  • @Maroshii - 这是一个非常主观和含糊不清的问题 - 我建议基于这个问题关闭.但是,他列出了具体的观点,为什么它可能不可接受,我解决了这些问题. (4认同)

And*_*rov 17

Node.js是构建分布式网络服务的非常好的工具.您的大规模应用程序设计不仅仅是"使用哪种工具"的问题.很多人以非常异构的方式使用node.js以及ruby,php,erlang,apache&nginx和HAproxy.如果您不知道为什么需要节点,则可能不需要它.考虑节点的可能原因:

  • 您想在服务器和客户端之间共享通用的Javascript代码
  • 您期望高度并发加载(每台服务器同时连接数千到数十万)
  • 您(或您的团队)对JavaScript的熟练程度要高于其他任何可用的语言/框架
  • 如果7600+模块中的一个正在实现大部分所需功能

  • +1 - 特别是服务器和客户端代码.在浏览器客户端和服务器之间共享JavaScript库(例如验证)非常引人注目(REST API等...) (4认同)

Len*_*kus 12

NodeJS的一个"问题"是构建一个大型应用程序需要开发人员/团队的纪律.

对于同一公司内的多个团队来说尤其如此.现有的框架有点松散,不同的团队会提出不同的方法来解决问题.

KrakenJS是一个建立在快递之上的框架.它增加了一层约定和配置,可以轻松(呃)构建涉及多个团队的大型项目.


HIL*_*EEN 10

真的NodeJs以自己的方式强大,更多信息,

  1. 您可以在负载平衡下运行应用程序的多个实例来处理大量请求.
  2. 选择NodeJs来读取2000个文件,而不是计算第20个素数.
  3. 让NodeJ忙于读/写文件或端口.
  4. 当您需要向多个客户端广播您的响应时非常有用.
  5. 不关心NodeJ中的死锁,但关心你做同样操作的频率.
  6. 最重要的是,这些值存在于V8引擎中,直到进程终止.确保在NodeJ中提供多少代码行.