Node.js的Web后端开发调研
Posted 北雨南萍
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js的Web后端开发调研相关的知识,希望对你有一定的参考价值。
1. nodejs写后端优缺点(讲解nodejs与js区别)
1.1 Node.js是什么
Node.js 是一个开源与跨平台的 javascript 运行时环境
在浏览器外运行 V8 JavaScript 引擎(Google Chrome 的内核),
利用事件驱动、非阻塞和异步输入输出模型等技术提高性能
可以理解为 Node.js 就是一个服务器端的、非阻塞式I/O的、事件驱动的JavaScript运行环境
非阻塞异步
Nodejs采用了非阻塞型I/O机制,在做I/O操作的时候不会造成任何的阻塞,
当完成之后,以时间的形式通知执行操作
例如:
在执行了访问数据库的代码之后,将立即转而执行其后面的代码,
把数据库返回结果的处理代码放在回调函数中,从而提高了程序的执行效率
事件驱动
事件驱动就是当进来一个新的请求的时,请求将会被压入一个事件队列中,
然后通过一个循环来检测队列中的事件状态变化,如果检测到有状态变化的事件,
那么就执行该事件对应的处理代码,一般都是回调函数
比如:
读取一个文件,文件读取完毕后,就会触发对应的状态,
然后通过对应的回调函数来进行处理.
1.2 优缺点
优点:
- 处理高并发场景性能更佳
- 适合I/O密集型应用,指的是应用在运行极限时,CPU占用率仍然比较低,大部分时间是在做 I/O硬盘内存读写操作
因为Nodejs是单线程,带来的缺点有:
- 不适合CPU密集型应用
- 只支持单核CPU,不能充分利用CPU
- 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃
1.3 应用场景
借助Nodejs的特点和弊端,其应用场景分类如下:
- 善于I/O,不善于计算。因为Nodejs是一个单线程,如果计算(同步)太多,则会阻塞这个线程
- 大量并发的I/O,应用程序内部并不需要进行非常复杂的处理
- 与 websocket 配合,开发长连接的实时交互应用程序
具体场景可以表现为如下:
- 第一大类:用户表单收集系统、后台管理系统、实时交互系统、考试系统、联网软件、高并发量的web应用程序
- 第二大类:基于web、canvas等多人联网游戏
- 第三大类:基于web的多人实时聊天客户端、聊天室、图文直播
- 第四大类:单页面浏览器应用程序
- 第五大类:操作数据库、为前端和移动端提供基于json的API
其实,Nodejs能实现几乎一切的应用,只考虑适不适合使用它;
2. node.js后台框架介绍
2.1、Koa
第四名: koa2 30k (2013年11月发布) express 的继任者。
https://github.com/koajs/koagithub.com
Koa更像是一个“框架的框架”,因为它本身实在太简单了且极度自由。
Koa 使用 Generator 来实现中间件的流程控制,使用try/catch 来增强异常处理,
同时在 Koa 框架中你再也看不到复杂的 callback 回调了。
Koa框架本身非常小,只打包了一些必要的功能,没有进程管理得搭配着第三方包一起使用。
Koa.js 可以被用于:
- 前台系统
- 后台系统
- 混合系统
Koa.js 主要特性:
- 代表现代和未来
- 与所有 Node.js 框架相比,体积更小。
- 有一个内置的错误捕捉器,防止网站崩溃。
- 使用 context 对象,该对象同时拥有请求和响应对象。
2.2、Nest
第三名: nest.js 30.8k (2017年11月发布) 目前上榜框架中发布最晚,
也是star 最高且增长最快的 typescript 后端框架。
https://github.com/nestjs/nestgithub.com
Nest 是一个用于构建高效,可扩展的 Node.js 服务器端应用程序的框架。
真正完备的、工业级的框架。
它使用渐进式 JavaScript,内置并完全支持 TypeScript(但仍然允许开发人员使用纯 JavaScript 编写代码),
并结合了 OOP(面向对象编程),FP(函数式编程)和 FRP(函数式响应编程)的元素。
提供完整的解决方案,从代码到模块拆分到微服务模型。
并且它的框架底层 HTTP 平台默认是基于 Express 实现的,所以不必担心第三方库的缺失。
它也提供了一个开箱即用的应用程序架构,
允许开发人员和团队创建高度可测试,可扩展,松散耦合且易于维护的应用程序。
Nest.js 可以被用于:
- 编写更清晰和可重用的代码。
- 编写具有更高层次结构的代码,如拦截器、过滤器、管道等;
- 编写可扩展、可测试和松散型应用程序。
Nest.js 主要特性
- 易于扩展:可与其他库一起使用。
- 允许开发人员完全使用纯 JavaScript 进行编码。
- 结合了函数式编程、面向对象编程和响应式编程的特点。
- 公开框架 API,帮助开发者使用各平台上的各种第三方模块。
- 它有一个详细且维护良好的文档。
2.3、Total
Total.js是助你创建Node.js,Web页面/应用的好框架,同样支持MVC架构。
2.4、Socket
Socket.io 是用来在客户端和服务器端之间创建实时双向通信的框架。
要做到这一点,客户端需要在浏览器中安装 http://Socket.io,服务器也要集成 http://Socket.io 包。
这使得数据可以在数百万种形式中共享。然而,最受欢迎的方法仍然是 JSON。
Socket.io 由以下两个部分组成:
- JavaScript 服务:Node.js
- JavaScript 客户端库:Node.js
注意: Socket.io 还兼容许多其他语言,如 Java、C+、Swift、Dart、.Net 和 Python。
Socket.io 可以被用于:
- 各种命名空间
- 广播
- 事件处理
- 错误处理
- 日志和调试
- 聊天应用
- 内部
Socket.io 主要特性:
- 将信息编码为命名的 JSON 或二进制事件。
- 在应用程序中添加“实时”能力。
- 支持自动重新连接
- 出色的速度和可靠性
- 即时通讯和聊天
2.5、Sails
第五名: sails 21.6k (2012年7月) 最早的 node.js 类 ror 框架。
https://github.com/balderdashy/sailsgithub.com
Sails 是一个非常稳固的 Node.js 框架,提供了建立任何规模的 Web 应用所需要的所有功能。
在底层使用了 Express框架来提供对 HTTP 请求的处理,同时使用 Socket.IO 框架来处理WebSocket 请求。
它也实现了 ORM 功能,让你的应用程序可以在不进行大的修改的前提下,就可以从一个后端数据库,切换到另外一个。
Sails 特别适合用来开发对数据的实时更新有较高要求的应用,而且它的注释巨多巨详细,生怕你不知道怎么用。关心开发者的框架才能长久下去喔。
2.6、Egg
第六名:egg 16.2k (2016年7月) 阿里开源的 node.js 框架,国内使用较为普及。
https://github.com/eggjs/egggithub.com
Egg基于Koa,约束和规范化团队开发,核心是帮助开发团队和开发人员降低开发和维护成本。
它提供基于 Egg 定制上层框架的能力,高度可扩展的插件机制,内置多进程管理,
性能优异,框架稳定。它已被用在阿里多条产品线上,可以证明它的安全可靠性,请放心使用。
7、Hapi.js
第九名: hapi 12.8k (2012年8月) 老牌的 node.js 框架。
https://github.com/hapijs/hapigithub.com
Hapi.js延续了Express.JS的所有优点,并且增加了一些功能。
开发者不用再浪费时间构建基础架构,可以利用这些时间来编写可重用的应用逻辑。
它的一些优点:修复bug和增加新功能都不需要花费时间,为不同类型的客户端构建API,
基于插件的体系结构使扩展变得容易,更好地控制如何处理请求。
Hapi.js 可以被用于:
- 网站
- HTTP 代理应用
- 应用程序接口服务
Hapi.js 主要特性:
- 输入验证
- 日志
- 错误处理
- 代码可重用性
- 缓存
- 没有外部依赖
- 基于配置的功能
- 集成框架:在 Node 框架中提供全面的认证和授权 API 支持。
以上是关于Node.js的Web后端开发调研的主要内容,如果未能解决你的问题,请参考以下文章