• 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 支持。

  • 相关阅读:
    SSM框架基于web的房屋租售管理系统源码
    查询硬盘序列号、物理地址及对应批处理命令
    【Android知识笔记】图片专题(Bitmap&Drawable)
    EasyExcel
    如何学好Django?
    vue2计算属性
    Windows查看核心与线程数
    多位大佬合力讲解23种设计模式,这不是轻松拿下
    Python基于OpenCV&YOLO台球击球路线规划系统(源码&部署教程)
    【数字电路基础】组合逻辑竞争冒险、时序逻辑亚稳态
  • 原文地址:https://blog.csdn.net/fireroll/article/details/127465892