前提
在当前的环境中关于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