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

从我在网上读到的内容来看,当涉及到大型程序时,NodeJS并不是最好的工具.我遇到的情况如下:

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

我有什么遗漏吗?NodeJS真的有那么强大吗?

推荐答案

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

这个问题有点主观,但我包含了解决大型项目中 node 实际问题的实际客观点.

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

它最好是作为一个前端/API服务器,它是I/O绑定的(大多数前端/API服务器都是).如果您有后端计算需求(处理等)它可以与其他技术(C#net core、go、Java等……工作 node )配对

我创建了这个项目作为一个示例,演示了大多数要点——Sane Node Development:

NodeJS不是构建在自己的http服务器之上的.它构建在V8 chrome javascript引擎之上,不采用http服务器.有一个内置的http模块以及流行的express web server,但也有套接字模块(以及socket.io).它不仅仅是一个http服务器.

单线程不会造成瓶颈,因为所有I/O都是事件式的、异步的.这个链接很好地解释了这一点:http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/

至于软件模块,你可以在npm registry搜索.经常查看有多少其他人使用它(下载),并访问github repo,查看它是否正在积极维护(或者是否存在一系列从未引起注意的问题).

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

  1. Compile time support (and intellisense):在编译时查找问题.如果你不认为你像我刚开始时那样需要这个,你会在第一次大的重构后改变主意.

  2. Eliminate Callback Hell:保持关键性能(如上所述),但消除回调代码.使用async/await编写线性代码并保持异步性能.与promise 相结合,但比仅使用promise 要好得多.

  3. Tooling:有很多 Select ,但我发现最好的是Typescript(今天的ES6/7)、VS Code(intellisense)、Mocha(单元测试).

  4. Instrumentation/Logging:通过跟踪和检测深入了解应用程序至关重要.

  5. Build on well vetted frameworks:我以express为例,但这是一种偏好,还有其他偏好.

Node.js相关问答推荐

Azure虚拟机上的JS Express:可疑请求?

使用NodeJS在S3上传文件时的格式问题

仅当所需文档是最后一个文档时才更新MongoDB,否则插入

MongoDB的方面查询的Postgres类似功能

填充函数在Node.js和MongoDB中不起作用

我的 MERN 网站一直告诉我我的一个函数不是一个函数

如何模拟 mysql2 `getConnection`

对 google api v3 的 Axios 请求返回加密(?)数据

Nodejs mongoose 在一个查询中从多个集合中获取结果

使用 Node.js 在 MongoDB 中搜索

Pug - 包括带有include关键字的c代码

仅显示用户在 Reactjs 中使用服务器端发布的帖子是 Node Js、Mongodb

等到文件上传完成的有效方法(mongoose )

如何使用 superagent/supertest 链接 http 调用?

您如何写入 aws lambda 实例的文件系统?

如何正确使用 package.json 中的关键字属性?

Node.js 中空函数的简写

为什么数组上的js映射会修改原始数组?

npm 出现无法读取依赖项错误

node.js 异步库