Skip to content
快速预览

什么是NodeJS

✍️ w 🕒 2023-08-06 15:15:00(9 months ago) 🔗 B.NodeJS学习 node

Node.js既不是语言(Node是使用JavaScript编程,它没有自己的编程语言),也不是框架,它是一个平台,是一个可以让js在脱离浏览器环境跑起来的环境,因此可以让JavaScript运行在服务器端的开发平台,是一个JavaScript运行时环境

JavaScript宿主环境,也可以叫做 JavaScript运行时(Runtime),宿主环境创建的一个作用域(scope)。在这个作用域内,JavaScript代码可以访问宿主环境提供的一系列特性。以浏览器为例,提供了一些额外的对象(API),这些对象可以让JavaScript代码与宿主环境进行交互。并且让这些API使得JavaScript代码能够访问和操作环境中的特定功能

Javascript 运行时(Runtime)就可以相同的JS引擎,在不同的环境下,便有不同的能力,js 常见提供 Javascript Runtime宿主, web 浏览器, node.js,无论浏览器还是 Node 他们整体运行顺序可以看作

node vs 浏览器

EcmaScript作为语言标准和环境没关系,只要js 解析器就可以进行运行。但是相对来说所可进行的操作能力有限

  • 浏览器因此提供了 webApi 帮助 赋予了 DOM BOM AJAX 等操作,但浏览器也限制了 跨域问题 文件读写(过高的读写权限可能用户的文件会被偷偷获取因此浏览器限制较多)。仅对外暴露了部分操作赋予了webApi ,让js 可以去使用提供的 webApi 的操作 提供的这些API并不属于 js 语法本身

  • Node提供了完整的控制计算机的能力,NodeJS几乎可以通过Node提供的接口,实现对整个操作系统的控制

因此Node.js 提供的运行时环境使得JavaScript可以脱离浏览器运行在服务器端,实现了在服务器端使用JavaScript编写高效、可扩展、可靠的网络应用。Node有着事件驱动、非阻塞I/O等特性,使得它非常适合编写高并发的网络应用。

Node.js是一个基于V8 JavaScript引擎的JavaScript运行时环境,V8可以嵌入到任何C ++应用程序中,无论是Chrome还是Node.js,事实上都是嵌入了V8引擎来执行 JavaScript代码

图 1

二者相同点

二者都有 JavaScript 引擎的内置对象,这里对象是在所在的执行引擎提供的,这里目前说的是v8,例如内置对象 Boolean、Number、String、Object、Symbol、Function、Array、Regexp、Set、Map、Promise、Proxy,全局函数 eval、encodeURIComponent、decodeURIComponent等等,基本的常量 undefined、null、NaN、Infinity;

二者不同点

Node.js 不是浏览器,所以它不具有浏览器提供的 DOM API,比如 Window 对象、Location 对象、Document 对象、HTMLElement 对象、Cookie 对象等等。但是,Node.js 提供了自己特有的 API,比如全局的 global 对象,也提供了当前进程信息的 Process 对象,操作文件的 fs 模块,以及创建 Web 服务的 http 模块等等。这些 API 能够让我们使用 JavaScript 操作计算机,所以我们可以用 Node.js 平台开发 web 服务器

列出部分二者的api, Fetch API 在nodeJs 18版本已经支持

特有API/模块名称浏览器Node.js
DOM✔️
Web Workers✔️
IndexedDB✔️
localStorage✔️
WebSocket✔️
Canvas✔️
XMLHttpRequest✔️
WebGL✔️
CSSOM✔️
Fetch API✔️
File API✔️
Service Workers✔️
Performance✔️
Node.js REPL✔️
fs✔️
http✔️
crypto✔️
os✔️
process✔️
child_process✔️
stream✔️

Node 能做什么

  1. Web应用程序:Node.js可以用于搭建Web应用程序,如博客、在线商城、社交平台等,它可以快速响应客户端的请求,并且可以通过模块化的设计和丰富的模块库,方便地开发出高效、可维护的应用程序。
  2. 实时应用程序:Node.js适用于实时应用程序,由于Node.js采用的是事件驱动和非阻塞I/O的编程方式,可以实现实时通信,如聊天室、在线游戏、在线视频等,因为它可以实现双向通信和事件驱动,从而实现实时性。
  3. 命令行工具:Node.js可以用于开发命令行工具,如代码打包工具、自动化工具等,它可以方便地进行文件读写、网络请求等操作。
  4. IoT应用程序:Node.js可以用于开发物联网应用程序,如智能家居、智能健康等,因为它可以方便地进行数据采集、处理和通信。
  5. API服务:Node.js可以用于开发API服务,如RESTful API服务、GraphQL服务等,它可以方便地进行数据处理和通信。
  6. 开发桌面应用:利用Nodejs 可以开发桌面应用程序
  7. 实时数据处理:例如监控和分析系统日志、实时统计用户行为、实时处理交易数据等,Node.js可以快速处理大量的I/O操作和数据流

以node 做服务端

  • 形式一在微型的站点上Node服务器要完成请求的处理、响应、和数据库交互、各种业务逻辑

  • 形式二Node服务器不做任何与业务逻辑有关的事情。绝大部分时候,只是简单的转发请求,但可能会有一些额外的功能简单的信息记录(请求日志、用户偏好、广告信息) 静态资源托管、缓存,实际业务数据登录数据等重要数据还是在其他语言实现的后台服务中

Released under the MIT License.