文章目录
- [1.1 什么是 Node.js?(定义、运行环境、与浏览器 JavaScript 的区别)](#1.1 什么是 Node.js?(定义、运行环境、与浏览器 JavaScript 的区别))
-
-
- [1.1 什么是 Node.js?(定义、运行环境、与浏览器 JavaScript 的区别)](#1.1 什么是 Node.js?(定义、运行环境、与浏览器 JavaScript 的区别))
-
- [1.1.1 一句话说清 Node.js:JavaScript 也能 "脱离浏览器打工"](#1.1.1 一句话说清 Node.js:JavaScript 也能 “脱离浏览器打工”)
- [1.1.2 Node.js 的运行环境:不止 "能跑",还很能 "干活"](#1.1.2 Node.js 的运行环境:不止 “能跑”,还很能 “干活”)
- [1.1.3 Node.js vs 浏览器 JavaScript:同一个演员,不同的 "剧本"](#1.1.3 Node.js vs 浏览器 JavaScript:同一个演员,不同的 “剧本”)
- [1.1.4 什么时候用哪个?](#1.1.4 什么时候用哪个?)
-
- [1. 什么时候用浏览器 JavaScript?](#1. 什么时候用浏览器 JavaScript?)
- [2. 什么时候用 Node.js?](#2. 什么时候用 Node.js?)
- [3. 核心原则:JavaScript 语法的通用性](#3. 核心原则:JavaScript 语法的通用性)
-
1.1 什么是 Node.js?(定义、运行环境、与浏览器 JavaScript 的区别)
1.1 什么是 Node.js?(定义、运行环境、与浏览器 JavaScript 的区别)
1.1.1 一句话说清 Node.js:JavaScript 也能 "脱离浏览器打工"
- Node.js 是一个强大的 JavaScript 运行环境,它让 JavaScript 从浏览器中"解放"出来,直接在操作系统层面执行任务。
核心概念解析
Node.js 的核心优势在于其事件驱动和非阻塞 I/O 模型 ,这使得它特别适合处理高并发服务器端应用
:
- 事件驱动 :系统
基于事件循环(event loop)工作
。当发生 I/O 操作(如读取文件或网络请求)时,Node.js 不会阻塞主线程,而是注册一个回调函数。操作完成后,事件循环会触发回调,实现高效处理。例如:- 用户请求到达服务器 → 注册回调 → 处理其他任务 → 请求完成时自动执行回调。
- 非阻塞 I/O :
I/O 操作(如数据库查询或文件读写)在后台异步执行,主线程继续处理新任务
。 - 这避免了传统同步模型的等待时间,提升了吞吐量。
- 数学上,这类似于优化资源利用率:如果每个请求耗时 t t t,并发请求数为 n n n,则非阻塞模型能将处理时间降低到接近 O ( 1 ) O(1) O(1)(理想情况下),而阻塞模型可能达到 O ( n ) O(n) O(n)。
这些特性让 Node.js 在构建实时应用(如聊天服务或 API 服务器)时表现出色
。
应用场景
Node.js 让 JavaScript 成为全栈开发语言,适用于:
- 后端服务:构建 RESTful API、微服务或实时应用(如 WebSockets)。
- 工具链开发 :创建
命令行工具或自动化脚本(如构建工具 Webpack)
。 - 数据库交互:高效连接 MongoDB 或 MySQL。
1.1.2 Node.js 的运行环境:不止 "能跑",还很能 "干活"
Node.js 本质上是一个 "包装了 V8 引擎" 的程序,它让 JavaScript 拥有了操作操作系统的能力。
-
核心组成:
-
V8 引擎:负责解析和执行 JavaScript 代码(和 Chrome 浏览器用的是同一个引擎);
-
内置 API:Node.js 自带的工具包(比如操作文件的
fs
模块、搭建服务器的http
模块); -
跨平台支持:可以在 Windows、macOS、Linux 系统上运行,写一次代码到处跑。
-
-
怎么 "运行"?
不需要浏览器,直接在终端(命令行)里执行:
-
新建文件
demo.js
,写入代码:javascriptconsole.log("我在 Node.js 里运行啦!");
-
打开终端,进入文件所在目录,输入命令:
bashnode demo.js
1.1.3 Node.js vs 浏览器 JavaScript:同一个演员,不同的 "剧本"
虽然都用 JavaScript 语法,但两者的 "能力范围" 和 "工作场景" 完全不同。
对比项 | 浏览器 JavaScript | Node.js |
---|---|---|
运行环境 | 依赖浏览器(Chrome、Firefox 等) | 独立运行,依赖 Node.js 程序 |
核心功能 | 处理页面交互(DOM 操作、事件响应) | 处理服务器逻辑(文件操作、数据库交互) |
内置对象 | 有 window 、document (操作页面) |
有 global 、process (操作系统) |
不能做的事 | 不能直接读写电脑文件(安全限制) | 不能操作 DOM(没有页面可操作) |
用代码直观感受区别:
-
浏览器里能做,Node.js 里不能做的事(操作 DOM):
在浏览器控制台输入:
javascriptdocument.write("Hello 浏览器!"); // 页面会显示文字
但在 Node.js 里运行同样的代码,会报错:ReferenceError: document is not defined
(原因:Node.js 没有 document
对象,因为它不需要操作页面)
-
Node.js 里能做,浏览器里不能做的事(操作文件):
在 Node.js 里新建
readFile.js
:javascript// 引入 Node.js 内置的文件系统模块 const fs = require('fs'); const path = require('path'); // 定义要读取的文件路径 const filePath = path.join(__dirname, 'example.txt'); // 异步读取文件 fs.readFile(filePath, 'utf8', (err, data) => { if (err) { // 处理错误情况 console.error('读取文件时发生错误:', err); return; } // 读取成功,输出文件内容 console.log('文件内容如下:'); console.log(data); }); // 同步读取文件的方式 try { const data = fs.readFileSync(filePath, 'utf8'); console.log('\n同步读取的文件内容:'); console.log(data); } catch (err) { console.error('同步读取文件时发生错误:', err); }
运行后能成功读取文件,但如果在浏览器里写同样的代码,会报错:
(原因:浏览器出于安全限制,禁止 JavaScript 直接操作本地文件)
1.1.4 什么时候用哪个?
1. 什么时候用浏览器 JavaScript?
-
适用场景:当您需要处理用户界面交互时,如按钮点击事件、表单验证、动态内容更新等。这些操作直接在浏览器中运行,依赖于浏览器提供的 DOM API。
-
为什么选它:浏览器环境内置了 DOM 和事件处理机制,能直接响应用户操作。
-
简单代码示例 :
javascript// 示例:按钮点击事件处理 document.getElementById('myButton').addEventListener('click', function() { alert('按钮被点击了!'); });
2. 什么时候用 Node.js?
-
适用场景 :
当您需要处理后台逻辑时,如搭建服务器、运行命令行工具、自动备份脚本等。这些操作在服务器端执行,不依赖浏览器
。 -
为什么选它 :Node.js 提供了
文件系统、网络模块等 API,适合处理 I/O 密集型任务
。 -
简单代码示例 :
javascript// 示例:创建一个简单的 HTTP 服务器 const http = require('http'); http.createServer((req, res) => { res.end('Hello from Node.js!'); }).listen(3000);
-
3. 核心原则:JavaScript 语法的通用性
-
就像您比喻的厨师,JavaScript 的语法(如变量声明、函数定义)在浏览器和 Node.js 中完全一致。例如,声明一个函数在任何地方都相同:
javascriptfunction greet(name) { return `你好, ${name}!`; }
-
关键区别 :
工具库和环境 API 不同
。浏览器提供document
对象,Node.js 提供fs
或http
模块。但核心语言不变,学习一次就能多场景应用。