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/koa​github.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/nest​github.com

Nest.js 中文文档​docs.nestjs.cn

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/sails​github.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/egg​github.com

Egg基于Koa,约束和规范化团队开发,核心是帮助开发团队和开发人员降低开发和维护成本。

它提供基于 Egg 定制上层框架的能力,高度可扩展的插件机制,内置多进程管理,

性能优异,框架稳定。它已被用在阿里多条产品线上,可以证明它的安全可靠性,请放心使用。

7、Hapi.js

第九名: hapi 12.8k (2012年8月) 老牌的 node.js 框架。

https://github.com/hapijs/hapi​github.com

Hapi.js延续了Express.JS的所有优点,并且增加了一些功能。

开发者不用再浪费时间构建基础架构,可以利用这些时间来编写可重用的应用逻辑。

它的一些优点:修复bug和增加新功能都不需要花费时间,为不同类型的客户端构建API,

基于插件的体系结构使扩展变得容易,更好地控制如何处理请求。

Hapi.js 可以被用于:

  • 网站
  • HTTP 代理应用
  • 应用程序接口服务

Hapi.js 主要特性:

  • 输入验证
  • 日志
  • 错误处理
  • 代码可重用性
  • 缓存
  • 没有外部依赖
  • 基于配置的功能
  • 集成框架:在 Node 框架中提供全面的认证和授权 API 支持。

以上是关于Node.js的Web后端开发调研的主要内容,如果未能解决你的问题,请参考以下文章

koa-基于node.js平台的下一代web开发框架入门

Node JS后端项目开发与生产环境总结

基于 hapi 的 Node.js 小程序后端开发实践指南

小册基于 hapi 的 Node.js 小程序后端开发实践指南

测试同学动手搭个简易web开发项目

电子书 Node.js开发指南.pdf