持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
Node.js
就是运行在服务端的 JavaScript
Node.js
在很多领域都有涉及,现在前后端分离开发后,更是让node升起。我们学习node从下面这几个方面学起
- Node.js 是什么
- Node.js 的运行原理
- Node.js 的运行机制
Node.js 是什么
以下引自 Node.js 官网:Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
- 不是编程语言
- 也不是框架和库
- 是一个 JavaScript 运行时(环境)
- 能解析和执行 JavaScript 代码(严格来说应该是 ECMAScript 代码)
- 构建于 Chrome V8 JavaScript 引擎之上
- 为 JavaScript 提供了服务端编程的能力
- 文件 IO
- 网络 IO
- 从技术角度它的能力和 Java、PHP、Python、Perl、Ruby 等服务端技术类似
Node 的特点
- 事件驱动
- 非阻塞 IO(异步) 模型
- 单线程
- 跨平台
Node 的运行机制
多线程处理机制:
传统的 Web 服务器(Apache、Tomcat、IIS):
- 请求进来
- Web 服务器开启一个线程来处理用户请求
- 同一时间有 n 请求,服务器就需要开启 n 个线程
- 一个线程最少得消耗 8MB 内存
- 对于一个 8GB 内存的服务器来说,它能应对的并发数是 1024 * 8 / 8 = 1024 个并发
事件驱动处理模型:
- Node 中低层封装了一堆的异步操作 API
- 文件操作
- 网络操作
- JavaScript 语言本身是单线程的
Event Loop(事件循环)
这里就不多说事件循环了,推荐大家去看下面这几篇文章,写的特别详细
- 菲利普·罗伯茨:到底什么是 Event Loop 呢?
- The Node.js Event Loop, Timers, and
process.nextTick()
- 阮一峰 - JavaScript 运行机制详解:再谈 Event Loop
为什么要学习 Node
- 增加职业竞争力
- 企业需求
- 进一步理解 Web
- 大前端必备技能
- 为了更好的学习前端框架
Node 能做什么
Node 打破了过去 JavaScript 只能在浏览器中运行的局面
- 前后端编程环境统一,大大降低了前后端语言切换的代价
- 知乎 - JavaScript 能做什么,该做什么?
- Web 服务器
- 命令行工具
- 网络爬虫
- 桌面应用程序开发(Electron)
JavaScript 长久以来一直被限制在浏览器的沙箱中运行, 它的能力取决于浏览器中间层提供的支持多少。 Node 将高性能的 V8 带到了服务器端,使 JavaScript 也可以开发出实时高性能的服务器。 在 Node 中,不再与 CSS 样式表,DOM 树打交道, 可以随意的访问本地文件,搭建 WebSocket 服务器,连接数据库等系统级底层操作。 Node 不处理 UI,只关心数据,无论是本地数据还是网络数据。 前后端编程统一,大大降低了前后端编程切换的代码。对于前端工程师而言,自己熟悉的 JavaScript 如今竟然可以在另一个地方大放异彩, 不谈其他原因,仅仅因为好奇,也值得去关注和探究它。