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

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…...

Java 大视界 -- Java 大数据在智能体育赛事运动员表现分析与训练优化中的应用(122)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...

线性代数之矩阵特征值与特征向量的数值求解方法

文章目录 前言1. 幂迭代法(Power Iteration)幂法与反幂法求解矩阵特征值幂法求最大特征值编程实现补充说明 2. 逆幂迭代法(Inverse Iteration)移位反幂法 3. QR 算法(QR Algorithm)——稠密矩阵理论推导编程…...

SparkAi系统体验

DeepSeek-R1-671B大模型满血版私有化部署高可用教程-SparkAi系统集成图文教程 一、SparkAI是什么二、功能模块介绍系统快速体验 三、系统功能模块3.1 AI全模型支持/插件系统3.2 AI智能体应用3.3 AI专业绘画3.4 AI视频生成3.5 Dall-E2/E3/E4绘画3.6 智能思维导图生成3.7 AI绘画广…...

软件工程---构件

在软件工程中,构件是一个独立的、可复用的软件单元,它具有明确的功能、接口和行为,并且可以在不同的环境中加以集成和复用。构件的概念是软件架构和组件化开发的核心思想之一,其目的是促进软件系统的模块化、可维护性和可扩展性。…...

视频录像机视频通道是指什么

视频录像机的视频通道是指摄像机在监控矩阵或硬盘录像机设备上的视频输入的物理位置。 与摄像头数量关系:在视频监控系统中,有多少个摄像头就需要多少路视频通道,通道数量决定了视频录像机可接入摄像头的数量,一般硬盘录像机有4路…...

【Unity】 HTFramework框架(六十一)Project窗口文件夹锁定器

更新日期:2025年3月7日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 Project窗口文件夹锁定器框架文件夹锁定自定义文件夹锁定限制条件 Project窗口文件夹锁定器 在Project窗口中,文件夹锁定器能够为任何文件夹加…...

INFINI Labs 产品更新 | Easysearch 增加异步搜索等新特性

INFINI Labs 产品更新发布!此次更新,Easysearch 增加了新的功能和数据类型,包括 wildcard 数据类型、Point in time 搜索 API、异步搜索 API、数值和日期字段的 doc-values 搜索支持,Console 新增了日志查询功能。 INFINI Easyse…...

3.6c语言

#define _CRT_SECURE_NO_WARNINGS #include <math.h> #include <stdio.h> int main() {int sum 0,i,j;for (j 1; j < 1000; j){sum 0;for (i 1; i < j; i){if (j % i 0){sum i;} }if (sum j){printf("%d是完数\n", j);}}return 0; }#de…...

基于Kubernetes部署MySQL主从集群

以下是一个基于Kubernetes部署MySQL主从集群的详细YAML示例&#xff0c;包含StatefulSet、Service、ConfigMap和Secret等关键配置。MySQL主从集群需要至少1个主节点和多个从节点&#xff0c;这里使用 StatefulSet 初始化脚本 实现主从自动配置。 1. 创建 Namespace (可选) ap…...

Docker基础篇——Ubuntu下Docker安装

大家好我是木木&#xff0c;在当今快速发展的云计算与云原生时代&#xff0c;容器化技术蓬勃兴起&#xff0c;Docker 作为实现容器化的主流工具之一&#xff0c;为开发者和运维人员带来了极大的便捷 。下面我们一起进行Docker安装。 Docker的官方Ubuntu安装文档&#xff0c;如…...

postman接口请求中的 Raw是什么

前言 在现代的网络开发中&#xff0c;API 的使用已经成为数据交换的核心方式之一。然而&#xff0c;在与 API 打交道时&#xff0c;关于如何发送请求体&#xff08;body&#xff09;内容类型的问题常常困扰着开发者们&#xff0c;尤其是“raw”和“json”这两个术语之间的区别…...

物联网设备接入系统后如何查看硬件实时数据?

要在软件中实时查看硬件设备的信息&#xff0c;通常需要结合前后端技术来实现。以下是设计思路和实现步骤&#xff1a; 1. 系统架构设计 实时查看硬件设备信息的系统通常采用以下架构&#xff1a; 数据采集层: 硬件设备通过传感器采集数据&#xff0c;发送到InfluxDB。数据存…...

最新版本TOMCAT+IntelliJ IDEA+MAVEN项目创建(JAVAWEB)

前期所需&#xff1a; 1.apache-tomcat-10.1.18-windows-x64&#xff08;tomcat 10.1.8版本或者差不多新的版本都可以&#xff09; 2.IntelliJ idea 24年版本 或更高版本 3.已经配置好MAVEN了&#xff08;一定先配置MAVEN再搞TOMCAT会事半功倍很多&#xff09; 如果有没配置…...

《生成对抗网络:当AI学会自我博弈的艺术》

2023年DALLE 2生成的《太空歌剧院》斩获艺术比赛大奖时&#xff0c;我在画作前驻足了整整十分钟——那些光影的渐变、笔触的韵律&#xff0c;竟来自两个神经网络的博弈游戏。这让我想起AlphaGo自我对弈突破人类棋谱局限的往事&#xff0c;生成对抗网络&#xff08;GAN&#xff…...

【Linux学习笔记】Linux基本指令分析和权限的概念

【Linux学习笔记】Linux基本指令分析和权限的概念 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Linux学习笔记 文章目录 【Linux学习笔记】Linux基本指令分析和权限的概念前言一. 指令的分析1.1 alias 指令1.2 grep 指令1.3 zip/unzip 指…...

PHP之常用函数

在你有别的编程语言的基础下&#xff0c;你想学习PHP&#xff0c;可能要了解的一些关于常用函数的信息。 获取时间 //获取时间 后面跟自定义时间格式 echo date("Y-m-d H:i:s");删除变量 unset($a);判断变量是否存在 var_dump(isset($a));判断变量是否为null va…...

Leetcode 刷题记录 05 —— 普通数组

本系列为笔者的 Leetcode 刷题记录&#xff0c;顺序为 Hot 100 题官方顺序&#xff0c;根据标签命名&#xff0c;记录笔者总结的做题思路&#xff0c;附部分代码解释和疑问解答。 目录 01 最大子数组和 方法一&#xff1a;动态规划&#xff08;卡达尼算法&#xff09; 方法…...

【LLM】kimi 1.5模型架构和训练流程

note 推出两个多模态模型&#xff0c;深度思考模型 long-CoT 对标 o1&#xff0c;通用模型 short-CoT 模型对标 gpt-4o。 文章目录 note一、kimi 1.5模型训练流程预训练SFT训练long-CoT SFTRL训练long2short 小结Reference 一、kimi 1.5模型训练流程 推出两个多模态模型&…...

deepseek在pycharm中的配置和简单应用

对于最常用的调试python脚本开发环境pycharm&#xff0c;如何接入deepseek是我们窥探ai代码编写的第一步&#xff0c;熟悉起来总没坏处。 1、官网安装pycharm社区版&#xff08;免费&#xff09;&#xff0c;如果需要安装专业版&#xff0c;需要另外找破解码。 2、安装Ollama…...

第二十四天 学习分布式数据管理,了解如何在多个设备间共享数据

HarmonyOS分布式数据管理实战&#xff1a;轻松实现多设备数据共享 一、为什么需要分布式数据管理&#xff1f; 在万物互联的时代&#xff0c;我们的智能设备数量正在快速增长。根据IDC最新报告&#xff0c;2023年平均每个用户拥有6.2台智能设备。HarmonyOS的分布式能力正是为…...

Android15 Camera框架中的StatusTracker

StatusTracker介绍 StatusTracker是Android15 Camera框架中用来协调Camera3各组件之间状态转换的类。 StatusTracker线程名&#xff1a;std::string("C3Dev-") mId "-Status" Camera3 StatusTracker工作原理 StatusTracker实现批处理&#xff08;状态…...

MyBatis-Plus 注解大全

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 MyBatis-Plus 注解大全 MyBatis-Plus 是基于 MyBatis 的增强工具&#xff0c;通过注解简化了单表 CRUD 操作和复杂查询的配置。以下是常用注解的分类及详细说…...

【MySQL_03】数据库基本--核心概念

文章目录 一、数据库基础1.1 数据库基础定义1.2 数据库分类与典型产品1.3 数据库模型1.4 数据库层次结构1.5 数据库核心机制1.6 数据表和视图1.61 数据表&#xff08;Table&#xff09;1.62 视图&#xff08;View&#xff09; 1.7 键类型1.8 MySQL数据类型1.9 数据库范式化 二、…...

Ubuntu 下 nginx-1.24.0 源码分析 (1)

main 函数在 src\core\nginx.c int ngx_cdecl main(int argc, char *const *argv) {ngx_buf_t *b;ngx_log_t *log;ngx_uint_t i;ngx_cycle_t *cycle, init_cycle;ngx_conf_dump_t *cd;ngx_core_conf_t *ccf;ngx_debug_init(); 进入 main 函数 最…...

边缘计算盒子:解决交通拥堵的智能方案

在当今的智能交通系统中&#xff0c;边缘计算盒子&#xff08;Edge Computing Box&#xff09;正逐渐成为不可或缺的核心组件。这种设备通过将计算能力下沉到网络边缘&#xff0c;极大地提升了数据处理的速度和效率&#xff0c;特别适用于实时性要求极高的交通监控场景。本文将…...

工程化与框架系列(22)--前端性能优化(中)

前端性能优化&#xff08;运行&#xff09; &#x1f3c3; 引言 运行时性能直接影响用户交互体验和应用流畅度。本文将深入探讨前端运行时性能优化的各种策略和技术&#xff0c;包括渲染优化、内存管理、计算优化等关键主题&#xff0c;帮助开发者构建高性能的Web应用。 运行…...

API调试工具的无解困境:白名单、动态IP与平台设计问题

引言 你是否曾经在开发中遇到过这样的尴尬情形&#xff1a;你打开了平台的API调试工具&#xff0c;准备一番操作&#xff0c;结果却发现根本无法连接到平台&#xff1f;别急&#xff0c;问题出在调试工具本身。今天我们要吐槽的就是那些神奇的开放平台API调试工具&#xff0c;…...

C#模拟鼠标点击,模拟鼠标双击,模拟鼠标恒定速度移动,可以看到轨迹

C#模拟鼠标点击&#xff0c;模拟鼠标双击&#xff0c;模拟鼠标恒定速度移动&#xff0c;可以看到轨迹 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks;namespa…...

php虚拟站点提示No input file specified时的问题及权限处理方法

访问站点&#xff0c;提示如下 No input file specified. 可能是文件权限有问题&#xff0c;也可能是“.user.ini”文件路径没有配置对&#xff0c;最简单的办法就是直接将它删除掉&#xff0c;还有就是将它设置正确 #配置成自己服务器上正确的路径 open_basedir/mnt/qiy/te…...