一. 什么是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 )
- 模块化
- 包管理器
