当前位置: 首页 > news >正文

nodejs关于后端服务开发的探究

前提

在当前的环境中关于web server的主流开发基本上都是java、php之类的,其中java spring系列基本上占了大头,而python之流也在奋起直追,但别忘了nodejs也是可以做这个服务的,只是位置有点尴尬,现在就来探究下nodejs做web server的当前现状。

nodejs简介

  • Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。
  • Node.js底层用C++实现的,大部分模块都使用JavaScript编写,含大量的内置模块,使得程序可以脱离Apache、Nginx、IIS等web服务器,作为独立的服务器运行;

nodejs优势

  • 高效:Node.js使用事件驱动和非阻塞I/O模型,使其在处理大量并发连接时表现出色。
  • 轻量:Node.js的内存占用小,适合处理大量短小的请求。
  • 灵活:Node.js可以使用JavaScript进行全栈开发,前端和后端可以使用同一种语言。
  • 社区活跃:Node.js有着庞大的社区和丰富的第三方库。
node.js 和 其他语言(java,python等)比较

nodejs 是单线程,其他语言为多线程,由于设计的底层架构不一样,这也就导致nodejs在大并发处理上看似有着天生的弱势。但nodejs引入了非阻塞 I/O 操作、事件循环、异步编程、线程池、集群模块等多方面的设计,进一步拉近了与其他语言的距离,至少在大中型项目中的表现不会比java等项目差,若是大并发,也可以通过负债均衡,分发,主从数据库等运维方面相关缓解,亦可以通过引入部分其他语言来处理一部分业务,毕竟现在前后端分离,无需考虑接口从哪来,再加上微服务架构的出现,跨语言的开发、联合、与分离也是一件很方便快捷的事情了,因此无需担忧nodejs的使用问题。(腾讯,阿里这种大公司都同样在使用呢!)
而使用nodejs的好处则是,项目开发简单快速,功能迭代将更加迅捷,前后端统一语言开发效率将大大提升。

nodejs框架比较

Express、koa等框架时代

Express、koa等框架的出现让js开发后端变得更加的快捷与简单,两者的出现亦让nodejs后端的开发提升了一个档次。因此也出现了大量相关开发示例与项目。但这个时代项目都存在一个问题,那就是项目通常较小。亦或者越开发越觉得项目难以管理

Midway、nestjs等框架时代

这两种类型的框架,在express/koa等基础之上引入了新的知识与概念,也因此让nodejs框架开发后端越发趋于完善

Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用的框架。它使用渐进式 JavaScript,构建并完全支持 TypeScript(但仍然允许开发者使用纯 JavaScript 进行编码)并结合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数式反应式编程)的元素。

Midway 基于 TypeScript 开发,结合了面向对象(OOP + Class + IoC)与函数式(FP + Function + Hooks)两种编程范式,并在此之上支持了 Web / 全栈 / 微服务 / RPC / Socket / Serverless 等多种场景,致力于为用户提供简单、易用、可靠的 Node.js 服务端研发体验。

引入typescript让js的弱类型逐渐变成偏强类型语言,使其在大型项目管理与合作开发上越发的成为了可能,引入新的开发方式与规范,让nodejs后端的开发形成了一个新的可能性。类似java spring的诞生,使得nodejs终于走出了重要的一步

nodejs的使用

若你的项目比较中小型,需要快速迭代,若你的项目没有多大的人手,若你的项目需要想要使用非阻塞 I/O 操作、异步编程等。亦或者是中大型项目的部分业务改造,其实都可以选择nodejs来开发后端了。毕竟中小项目无需担心nodejs出问题,大型项目也抗的住,而超大型,巨型的项目到时候想要切换语言还会缺这点人,怕这点事吗?
nestjs学习: https://nest.nodejs.cn/
midway官网: https://www.midwayjs.org/docs

个人更喜欢nestjs,不为别的就那编写方式与springboot类型的风格就让我喜欢。同时也更容易切换成java

相关文章:

nodejs关于后端服务开发的探究

前提 在当前的环境中关于web server的主流开发基本上都是java、php之类的,其中java spring系列基本上占了大头,而python之流也在奋起直追,但别忘了nodejs也是可以做这个服务的,只是位置有点尴尬,现在就来探究下nodejs…...

如何在语言模型的参数中封装知识?——以T5模型为例

【摘要】 这篇论文探讨了大型语言模型在无需外部知识的情况下,能否通过预训练来存储和检索知识以回答开放领域的问题。作者通过微调预训练模型来回答问题,而这些模型在训练时并未提供任何额外的知识或上下文。这种方法随着模型规模的增加而表现出良好的…...

面试java做了一道逻辑题,人麻了

题目:给你一个5升水壶,一个6升水壶,去池塘中取水,如何保证最后取出的水是3升? 思考了很久终于想出来了,这里用X5代表5升的桶,X6代表6升的桶: ① 6升桶装满,X50&#xff…...

数据仓库为什么要分层

数据仓库分层架构是数据仓库设计中的一个重要概念,其主要目的是为了更好地组织和管理数据,提高数据仓库的可维护性、可扩展性和性能。分层架构将数据仓库划分为多个层次,每个层次都有其特定的职责和功能。以下是数据仓库分层的主要原因和好处…...

【Python运维】实现高效的自动化备份与恢复:Python脚本从入门到实践

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在信息化时代,数据备份和恢复的有效性对企业和个人来说至关重要。本文将带领读者深入了解如何使用Python编写自动化备份与恢复脚本,确保重…...

RLock类详细介绍、应用场景和示例代码

概述 org.redisson.api.RLock 是 Redisson 提供的 分布式可重入锁(类似 ReentrantLock),基于 Redis 实现,常用于 分布式环境 下的 并发控制。 1. RLock 详解 🔹 特点 基于 Redis 实现,支持 集群环境。可…...

bash: uwsgi: 未找到命令

针对你提出的“bash: uwsgi: command not found”问题,以下是一些可能的解决方案,请按照步骤逐一排查: ‌1、检查uwsgi命令是否正确‌: 确保你输入的命令是uwsgi,而不是uWSGI或其他变体。 ‌2、确认uwsgi是否已安装‌&…...

基于数据挖掘的疾病数据可视化分析与预测系统

【大数据】基于数据挖掘的疾病数据可视化分析与预测系统(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 📌 技术核爆点:✔️ Python全栈开发Flask高能框架 ✔️ 爬虫技术…...

rv1106g2摄像头wlan0固定mac地址

wq9001无线网卡的mac地址是一个随机地址,在每次启动后,都会变更,使得dhcp分配的地址不同。要想有固定的mac地址,要做以下操作。 在文件uckfox-pico/sysdrv/drv_ko/wifi/insmod_wifi.sh添加函数wlan0_init wlan0_init() {wlan0add…...

企业日常工作中常用的 Linux 操作系统命令整理

Linux 操作系统命令整理 在企业级运维、开发和日常工作中,Linux 命令是绕不开的核心技能。不论是日志排查、进程管理,还是高效运维优化,掌握这些命令都能让你事半功倍!本篇文章整理了自己在日常工作中积累最常用的 Linux 命令&am…...

AutoGen学习笔记系列(六)Tutorial - Termination

这篇文章瞄准的是AutoGen框架官方教程中的 Tutorial 章节中的 Termination 小节,主要介绍了更细粒度上图如何终止Team组内轮询的过程。 官网链接:https://microsoft.github.io/autogen/stable/user-guide/agentchat-user-guide/tutorial/termination.ht…...

用IdleHandler来性能优化及原理源码分析

背景: 经常在做一些app冷启动速度优化等性能优化工作时候,经常可能会发现有时候需要引入一些第三方sdk,或者库,这些库一般会要求我们在onCreate中进行初始化等,但是onCreate属于生命周期的回调方法,如果on…...

git忽略特定文件或者文件夹

如果想让 Git 忽略指定目录,不进行更新或提交,可以使用 .gitignore 文件进行配置。 🛠 方法:使用 .gitignore 忽略目录 1️⃣ 在仓库根目录创建 .gitignore 文件 如果你的项目目录下还没有 .gitignore 文件,可以新建…...

STM32使用无源蜂鸣器

1.1 介绍: 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定 无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同…...

VMware 安装部署RHEL9

目录 目标一:创建名为RHEL9_node2的虚拟机 1.环境搭建:VMware 2.下载RHEL9的ISO镜像(官网可获取) 3.打开VMware,新建虚拟机 3.1 自定义安装 3.2 默认操纵至下一步操作到稍后安装系统 3.3选择操作系统为linux以及…...

智能机器人学习机WT3000A AI芯片方案-自然语音交互 打造沉浸式学习体验

一、概述 当AI浪潮席卷全球,教育领域也未能幸免。AI学习机,这个打着“个性化学习”、“精准提分”旗号的新兴产品,正以惊人的速度占领市场。从一线城市到偏远乡镇,从学龄前儿童到高考备考生,AI学习机的广告铺天盖地&am…...

阿里推出全新推理模型(因果语言模型),仅1/20参数媲美DeepSeek R1

阿里Qwen 团队正式发布了他们最新的研究成果——QwQ-32B大语言模型!这款模型不仅名字萌萌哒(QwQ),实力更是不容小觑!😎 QwQ-32B 已在 Hugging Face 和 ModelScope 开源,采用了 Apache 2.0 开源协议。大家可通过 Qwen C…...

20250307学习记录

大家早上好呀,今天早上七点四十就起床了 第一部分,修改一下任务 完成 第二部分,整理MODIS数据 2023-5-30-GEE-土地覆盖处理_mcd12q1.061-CSDN博客 看完这个博客,我有了大致的思路 编写代码转换为tiff,并且将不同…...

设计模式-创建型模式详解

这里写目录标题 一、基本概念二、单例模式1. 模式特点2. 适用场景3. 实现方法4. 经典示例 三、简单工厂模式1. 模式特点2. 经典示例 四、工厂方法模式五、抽象工厂模式1. 适用场景2. 经典示例 六、建造者模式1. 模式特点2. 一般流程3. 适用场景4. 经典示例 七、原型模式 一、基…...

【蓝桥杯】每天一题,理解逻辑(2/90)【LeetCode 复写零】

闲话系列:每日一题,秃头有我,Hello!!!!!,我是IF‘Maxue,欢迎大佬们来参观我写的蓝桥杯系列,我好久没有更新博客了,因为up猪我寒假用自己的劳动换了…...

Java+AI:让技术概念落地为企业真实业务价值

在大模型技术普及的当下,不少Java技术栈企业完成了大模型的基础接入,但却陷入了“技术空转”的困境——仅实现了简单的API调用,却未能将AI能力与业务流程深度融合,最终让技术探索停留在概念层面。真正的AI价值,从来不是…...

EN50155以太网交换机的X键位M12插座在PCB板上同一高度方法

在轨道交通车载EN50155以太网交换机的PCB设计中,X键位M12插座(千兆/万兆接口)常需多个并排或阵列布局。由于X编码插座引脚数较多(8芯)且结构复杂,确保所有插座在PCB板上的同一高度(共面性&#…...

DFPlayer Mini串口协议与嵌入式驱动开发实战

1. DFPlayer Mini 驱动库技术解析:面向嵌入式工程师的底层控制实践DFPlayer Mini 是 DFRobot 推出的一款高度集成、低成本、低功耗的串口控制 MP3 播放模块,广泛应用于智能语音播报、工业人机交互、教育机器人、IoT 音频终端等场景。其核心价值在于&…...

OpenClaw监控方案:Qwen3.5-4B-Claude模型异常任务预警系统

OpenClaw监控方案:Qwen3.5-4B-Claude模型异常任务预警系统 1. 为什么需要自动化监控方案 去年夏天的一个深夜,我被连续不断的手机震动声惊醒。打开电脑发现某个数据处理脚本已经运行了18小时——它本该在2小时内完成。更糟糕的是,这个错误导…...

从外卖配送看算法实战:Python+NetworkX解决简化版VRP问题

外卖配送路径优化实战:用PythonNetworkX解决简化版VRP问题 中午12点,城市里的外卖订单如潮水般涌来。配送员小张的手机上瞬间出现了8个不同方向的订单,他盯着地图上分散的标记点皱起了眉头——怎样才能用最短的时间送完所有外卖?这…...

Gerrit SSH Key配置避坑指南:为什么Permission denied还在报错?

Gerrit SSH Key配置避坑指南:为什么Permission denied还在报错? 当你按照标准流程配置了SSH Key,却在克隆Gerrit仓库时遭遇Permission denied (publickey)错误,这种挫败感就像精心准备的钥匙打不开已知密码的锁。本文将带你深入排…...

Markdown Viewer浏览器扩展完全指南:从安装到高级配置

Markdown Viewer浏览器扩展完全指南:从安装到高级配置 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer Markdown Viewer是一款功能丰富的浏览器扩展,专为提…...

跨语言沟通的革命性突破:FunASR语音翻译系统全解析

跨语言沟通的革命性突破:FunASR语音翻译系统全解析 你是否还在为国际会议中的语言障碍而烦恼?是否因跨国团队协作中的沟通不畅而效率低下?FunASR语音翻译系统将彻底改变这一现状,让跨语言交流如母语般自然流畅。读完本文&#xf…...

Gorgonia性能优化终极指南:10个技巧让你的深度学习模型运行速度翻倍

Gorgonia性能优化终极指南:10个技巧让你的深度学习模型运行速度翻倍 【免费下载链接】gorgonia 项目地址: https://gitcode.com/gh_mirrors/gor/gorgonia Gorgonia是一个功能强大的深度学习框架,能够帮助开发者构建和训练复杂的神经网络模型。然…...

Java高频面试题:RocketMQ有哪些使用场景?

大家好,我是锋哥。今天分享关于【Java高频面试题:RocketMQ有哪些使用场景?】面试题 。希望对大家有帮助;Java高频面试题:RocketMQ有哪些使用场景?RocketMQ 是阿里巴巴开源的一款分布式消息中间件&#xff0…...