请教关于项目结构的问题(技术选型角度) Nodejs

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

请教关于项目结构的问题(技术选型角度) Nodejs

各位大神早~ 小的有件事没想通,还望神们指点一二

node 因为单线程,因此也就有了非阻塞事件驱动的优势

然而又因为单线程,复杂的计算不能放到 node 里,也就有了下一级的环境专门来做计算,比如用 java 啊, python 啊什么的

拿 java 举例子吧,到了 java 这里不又是多线程了么, node 单线程省下来的内存占用在这边又回来了,那这时候 node 的存在价值体现在哪里?

(虚心请教贴 :P


10 回复

前后端分离啊,节省人力成本


那为什么不去掉 node ,直接用 java ?
区别在哪里?

你选 node 是为了省内存吗?

都选 node 了,还要啥自行车啊

项目规模和行业不同,会导致架构选型不同,所以中小项目选择单一技术架构保证开发人员和技术的稳定性,大型项目就需要考虑多团队合作和长期维护成本的问题,这样就会采用前后端分离、微服务、多种技术架构等方案利用各自的优点。没有一种技术方案能解决所有问题——简单说,没有银弹。

在这里的话, Node 就更像一个统一的 api 的网关,这样前端只需要和 node 打交道,然后具体的业务由 node 去找后端的实现,后端可以根据业务特点选择最适合的实现方式。

可以啊,问题在于人力成本,不在于机器成本,前后端分离后可以并行开发

node 是解决高 IO 并发的~ 计算肯定是不行的,借用楼上的话 还要啥自行车

粗略的说, node 相当于 nginx+phpfpm+php+swoole 扩展的功能。效率要比 nginx 们高,因为少了一环进程间通信。还因为能更好的配合 nosql ,例如 mongodb ,不用转换,因为本身 mongodb 输出的就是 json 对象。 node 本身可以支持多进程, php+swoole 也可以支持多进程,但两种编程难度, swoole>>node ,因为 php 本身根本没有进程或 context 概念,一个对象的方法可能在不同进程中调用,经常把人搞晕(主要是我水平低)。 java 本身有多进程和多线程概念,但 java 需要 10 倍以上的代码来解决相同的问题。最后, node 本身的 stream 概念非常适合处理大流量数据,或对网络功能进行扩展和修改(只要修改流向,或者在下游增加流处理器就可以,根本不用改原来的代码)。这样的能力, php 完全没有, java 有,但需要从底层代码写起。

关于Nodejs项目结构的技术选型问题,以下是一些专业建议:

1. 框架选择

  • Express:适合快速构建API服务,内置许多常用中间件,易于上手。
const express = require('express');
const app = express();
app.use((req, res, next) => { next(); });
app.listen(3000);
  • Koa:基于Async Functions实现,性能优异,适合需要高度定制和扩展性的项目。
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx, next) => { await next(); });
app.listen(3000);

2. 数据库

  • PostgreSQL:关系型数据库,适合复杂查询和事务处理。
  • MongoDB:非关系型数据库,适合灵活的数据模型和大数据量处理。

3. 进程管理

  • PM2:强大的Node进程管理工具,支持负载均衡、日志管理等功能。

4. 开发环境

  • Docker:容器化开发环境,提高开发效率和环境一致性。

5. CI/CD

  • JenkinsGitHub Actions:用于持续集成和持续部署,提高代码质量和部署效率。

综上所述,选择适合项目需求的框架、数据库、进程管理工具以及开发环境和CI/CD工具,是构建高效、可扩展Nodejs项目的关键。

回到顶部