一. 什么是NodeJS

1. NodeJS 是一个 JS 的运行环境

JavaScript 在浏览器运行的JS
NodeJS 在Node环境运行的JS

2. 它比浏览器拥有更多的能力

1. 浏览器中的 JS

  • 浏览器中的 JS
    • ECMA_Script
    • Web_Api
  • “Web_Api” 提供了操作浏览器窗口和页面的能力
    • BOM
    • DOM
    • AJAX
  • 这种能力是非常有限的
    • 跨域问题
    • 文件读写

2. Node 中的 JS

  • NodeJS
    • ECMA_Script
    • Node_Api
  • Node_Api 几乎提供了所有能做的事

3. 分层结构对比

  • JavaScript 与 NodeJS 的分层结构
    • JavaScript > 浏览器 > 操作系统 > 计算机硬件
    • NodeJsS > Node > 操作系统 > 计算机硬件
  • 浏览器提供了有限的能力, JS 只能使用浏览器提供的功能做有限的操作
  • Node 提供了完整的控制计算机的能力, NodeJS 几乎可以通过 Node 提供的接口, 实现对整个操作系统的控制

3. NodeJS 的优缺点

  • 优点
    • 因为 NodeJS 是单线程应用, 所以 执行 I/O (Input/Output) 操作的时候没有线程切换的开销, 因此 NodeJS 执行 I/O 操作是非常快速的
    • 新版本的 NodeJS 已经进行了优化, 能够充分发挥多核 CPU 的性能, 会自动分配资源进行处理.
    • 新版本的 NodeJS 也可以进行多线程操作, 只是一般不会去运用它
    • 可以承受大量的吞吐量, 因为 Node 是异步的, 并且没有线程切换的开销
  • 缺点
    • 运算速度较慢, 在对于大量计算的情况下, NodeJS 并不是太适合, 因为它不像 Java 语言一样能够进行并行计算.

二. 我们通常用 Node 干什么

1. 开发桌面应用程序

  • 例如 VScode 就是使用 Node 开发的
  • 甚至 QQ, Wechat 之类的都可以开发
  • 但是一般市面上目前还没有这种需求, 会要求前端使用 Node 去开发桌面应用, 之后如果有这种需求的时候在说

2. 开发服务器应用程序

  • 结构1 ( 轻量服务器 )
    • 客户端 (不一定是浏览器, 也可能是移动端应用等) <=> Linux 操作系统: [ Node服务应用 <=> DB (数据库) ]
    • 这种结构通常应用在微型的站点上 ( 例如: 个人博客, 微型企业官网等 )
    • Node 服务器要完成请求处理 || 响应 || 与数据库交互 || 各种业务逻辑
  • 结构2 ( 前台服务器 也叫 “中间层” 服务器 )
    • 客户端 <=> Linux 操作系统 : [ Node 服务器应用 <=> DB ] <=> Linux 操作系统 : [ 后端服务器 ]
    • 这种结构非常常见, 应用在各种规模的站点上
    • Node 服务器不做任何与业务逻辑有关的事情. 绝大部分时候, 只是简单的转发请求. 丹可能会有一些额外的功能
      • 简单的信息记录
        • 请求日志
        • 用户偏好
        • 广告信息
      • 静态资源托管
      • 缓存

三. 前置知识

  • 学习 Node 之前需要掌握下列知识
    • 网络通信 ( 至少得了解 http 的完整过程 )
    • ES6 ( ECMA_Script2015 )
    • 模块化
    • 包管理器