这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
课堂笔记
前言
Node(正式名称 Node.js)是一个开源的、跨平台的运行时环境,有了它,开发人员可以使用 JavaScript 创建各种服务器端工具和应用程序。此运行时主要用于浏览器上下文之外(即可以直接运行于计算机或服务器操作系统上)。据此,该环境省略了一些浏览器专用的 JavaScript API,同时添加了对更传统的 OS API(比如 HTTP 库和文件系统库)的支持。
Node.js = 运行环境+ JavaScript库
课堂重点内容
- Node.js的应用场景
- Node.js运行时结构
- 延伸话题
详细知识点介绍
一、Node.js的应用场景
- 前端工程化
- 前端工程化的主要目标就是解放生产力、提高生产效率。通过制定一系列的规范,借助工具和框架解决前端开发以及前后端协作过程中的痛点和难度问题。
- 工程化不是某个工具,工具化只是实现工程化的方式,如vue-cli。node对前端工程化起了非常大的作用
- Web服务端应用
- Electron跨端桌面应用
二、Node.js运行时结构
Node.js 运行时主要由 V8 引擎、标准库和本地模块组成
- V8 引擎:JavaScript 解释器,它负责解析和执行 JavaScript 代码。
- 标准库:本地模块使用 C/C++ 编写,封装本地模块的 C/C++ 接口,并提供一套优雅的 JavaScript 接口,这套 JavaScript 接口,就是 Node.js 标准库。
- 本地模块:已经被提前编译好的模块,是二进制文件。
三、Node.js运行时结构-特点
- 异步I/O
- 当Node.js执行I/O操作时,会在响应返回后恢复操作,而不是阻塞线程并占用额外内存等待,可以提高效率和资源利用率。
- 单线程
- JS单线程:实际JS线程+uv线程+V8线程+V8 Inspector线程
- 优点:不用考虑多线程同步问题,也不需要锁,同时还能比较高效地利用系统资源
- 缺点:阻塞会产生更多负面影响
- 跨平台
四、延伸话题-WASM、NAPI
- Node.,js(因为V8)是执行WASM代码的天然容器,和浏览器WASM是同一运行时,同时Node.js支持WASI。
- NAPI执行C接口的代码(C/C++/Rust..),同时能保留原生代码的性能。
- 不同编程语言间通信的一种方案。
课后个人总结
运行时
- 所谓运行时,就是程序在运行期间需要依赖的一系列组件或者工具;把这些工具和组件打包在一起提供给程序员,程序员就能运行自己编写的代码了。
Node.js 适合以下场景:
- 实时性应用,比如在线多人协作工具,网页聊天应用等。
- 以 I/O 为主的高并发应用,比如为客户端提供 API,读取数据库。
- 流式应用,比如客户端经常上传文件。
- 前后端分离。
npm
-
npm (全称Node PackageManager,即node包管理器)是Node.js默认的、以JavaScript编写的软件包管理系统npm来分享和使用代码已经成了前端的标配,能解决NodeJS代码部署上的很多问题,npm里面有接近60万个别人已经写好的包,到目前为止,npm差不多收集了60万个别人写好的包,其实每个包就是一个功能,一个需求,npm里面有关于创建服务器的包,启动电脑摄像头的包,如果正好我们有这些需求,那么我们就没必要自己去写代码,可以用别人已经写好的包
-
npm是随同Nodejs一起安装的包管理工具,能解决Nodejs代码部署上的很多问题,常见的使用场景有以下几种:
- 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
- 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
- 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用