Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
- 编辑历史
- 其他
一句话理解
Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境。
这是官网的介绍,可以说是非常简洁概括的了。
我是这样理解这句话的:
JavaScript - 使用 Javascript 语言编写相关程序,继承了 JavaScript 绝大部分的优缺点;
运行时环境 - Javascript 的运行环境不再是通常的浏览器,这使得其可以作为服务端程序工作;
基于 Chrome V8 引擎 - Node.js 的工作特点与 V8 相关,V8 引擎保证了其性能。
Node.js 架构示意图
主要特点
Node.js 的最大的特点有:
- 单线程
- 异步、非阻塞 I/O
- 事件驱动
Node.js 被设计用于高性能 Web 服务。
由于一些历史原因,JavaScript 被用于前端开发,采用单线程执行。
这也使得 JavaScript 与异步、非阻塞 I/O、事件驱动的工作方式契合,而这几点同时也是高性能 Web 服务所需的。
再配合具有高性能的 JavaScript 引擎 V8,Node.js 在实际工作中有着非常不错的性能表现。
需要注意的是,Node.js 的单线程并不是真的完全的单线程,而是指 JavaScript 执行是单线程。
适用场景
Node.js 一般用于提供高性能 Web 服务,作为服务端工作。
Node.js 在设计上的特点决定了其适用于:
- 高并发,占用资源少
- I/O 密集型
相反的,其缺点有:
- 可靠性低,一旦某部分程序出错终止,整个应用崩溃
- 不适合 CPU 密集型应用,较难利用多核 CPU
简单来说,Node.js 适合“多而易”,而不是“大又难”。
如今 Node.js 在国内外的许多网站都得到了应用。
包管理工具 npm
npm 是适用于 Node.js 的包管理工具。
类似于 Python 的 pip。
JavaScript 开发人员众多,随着 Node.js 的流行,第三方包的数量也与日俱增,发布与分享需要工具与平台。
由于 Node.js 采用模块化管理维护代码,通过 npm 能够非常方便下载第三方代码包或程序,并实现对各个包的版本控制,使用也非常简单。
npm 进一步推广了 Node.js,现在 npm 会随着 Node.js 一起安装。
对使用者
由于 Node.js 使用 JavaScript 来编写程序,入门上手非常容易;
前后端统一使用 JavaScript,有利于前端开发者理解后端工作逻辑;
社区活跃完善,第三方包数量众多,使用 npm 能够很好的提升开发效率;
Node.js 开发轻便快速,运行资源需求低,适合简单需求的小团队项目,也适合一人进行全栈开发。
不过,JavaScript 的许多缺点也被 Node.js 继承,如:debug 比较麻烦,单线程、异步等特点与其他后端语言在设计与实现上有一定区别,等等···
最后
我自己接触到 Node.js 是在大三上学期,购买服务器后,想弄一个自己的网站玩玩。
因为只想弄静态 HTML 页面写点东西,就查了哪种后端最方便,最后选了 Node.js。
Node.js 真的非常简单,比如实现一个基本的静态HTML网站,使用 Express.js 框架的话,十几行也就结束了;也可以使用 http-server 直接运行。
接触 Node.js 让我快速入门了后端开发,并进行了一些实践,再配合今年学习的 React,我感觉自己算是学会了最简单的前后端分离的全栈开发。
从我自己的角度来说,Node.js 简单又好玩,所以我写这些单纯就是自来水推广~
有机会还是希望能多写点的,之后再补充吧。
如果有其他问题,可以在我的 github.io 项目的 issue 留言,欢迎提问~
感谢观看!Thank you for watching!