学Node.js之前,哪些是我们必须知道的? —— 学不会算我输

简介: 很多同学都以为Node.js是一门独立的语言,这是大家的一个误区。

Node.js 是什么?



很多同学都以为Node.js是一门独立的语言,这是大家的一个误区。


Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,让JavaScript 运行在服务端的开发平台。


实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的、可扩展的网络应用。


使用了一个事件驱动、非阻塞式 I/O 的模型,使其变得轻微和高效,非常适合构建运行在分布式设备的数据密集型实时应用。

1.png

Node.js 能做些什么?



JavaScript做客户端,Node为服务端而生

异步方式,适用于高并发(处理并行访问)

使用 JavaScript 作为服务器端脚本语言,可以消除一些与浏览器端 js 脚本的冲突

可以发挥 JavaScript 动态编程的特性,在服务器与浏览器之间建立直接的动态程序

应用层来说,可以进行像PHP一样做动态网站开发和WEB应用开发


2.png

对于前端程序员来说,Node.js 意味着什么?



拓宽知识域

      前端的知识领域实际上是很广的,但是大部分人被局限在了业务上或某家公司里,因为业务不需要或者公司不用所以就不学。这是不对的,前端的趋势是在往服务端走,所以这是我们一定要接触的东西。


提高核心竞争力

       这一点就很明显了,现在市面上的前端程序员10个有6个不会Node,然而市场是需要这门技术的。


优先录取权

      相信这句话已经屡见不鲜了:有node开发经验优先。但凡是大厂招人或是高薪前端岗位基本都会有Node的要求。


同步式I/O和异步式I/O



1. 同步式I/O(阻塞式I/O)


当计算机调度线程进行I/O操作命令后,由于文件的读写或者网络通信需要较长的操作时间,操作系统为了充分利用cpu,此时会暂停到当前的I/O线程对CPU的控制(故又称同步式为阻塞式I/O),把cup资源然给其他的线程资源。


当I/O线程完成了操作时,此时操作系统会恢复此时的I/O线程,从而当前I/O线程重新获得了cup的的控制权,继续完成其他操作。


举个例子: A同学接到了B同学的一个要求,要帮B去做某件事。这时候C老师和A同学说,你去帮我去做xxx事情,这个事情比较急。这个时候A同学不得不放下B同学的事情(停止当前线程),先去处理C老师交代的事情(开启一个新线程)。做完C老师交代的事情之后,又开始帮忙做B同学的事情。


代码案例(demo.js):

var fs   = require("fs");
// readFileSync表示同步读取
var data = fs.readFileSync("./store.js","utf-8");
console.log(data);
console.log("获取结束");

store.js是与demo.js同级的文件,通过同步请求可以拿过来,看到的结果是:

3.png

这就是典型的同步式,必须要等到文件读取完才会往下执行打印的操作。


2. 异步式I/O(非阻塞式I/O)


针对所有I/O操作不采用阻塞策略,当线程遇到I/O操作时,不会以阻塞的方式等待I/O操作的完成或数据的返回,而只是讲IO请求发送给操作系统,继续执行下一条语。


当操作系统完成IO操作时,以事件的形式通知执行IO操作的线程,线程会在特定时候处理这个事件,为了 处理异步IO,线程必须有事件循环,不断的检查有没有未处理的事件,依次予以处理。

var fs  = require("fs");
// 默认是采用异步式I/O
fs.readFile('./store.js','utf-8',function(err,data){
    if(err){
        console.log(err);
    }else{
        console.log(data);
    }
})
console.log("获取结束");

执行结果如下:4.png

看图就能知道,现在不用再等到文件读取完毕再执行打印了,这就是异步式。


3. 同步式I/O和异步式I/O的区别


异步式: 一个线程永远在执行计算操作,这个线程所使用的CPU核心利用率永远是100%,IO以事件的方式通知。

同步式: 多线程往往能提高系统吞吐量,因为一个线程阻塞还有其他线程在工作,多线程可以让CPU资源不被阻塞中的线程浪费。


吞吐量:  指于一通讯通道上单位时间能成功传递的平均资料量,简单的说就是表示系统能处理的多快。比如地铁站一个小时最大能允许多少人出入,这个也被称之为“吞吐量”。


这样就很明显虽然同步式的效率就不如异步式。


5.png

FAQ:

调度:简单来说就是指定两个参数:工作,触发器。举个例子:我十分钟后坐飞机,坐飞机是工作,十分钟就是触发器。

吞吐量:同步式是通过开辟多线程来提高吞吐量,异步式通过不断的请求来提高吞吐量。

CPU利用:同步式是通过对事件片的分割和现成的调度利用CPU,异步式是通过划分功能来利用CPU(有一个功能求开始请求)。

内存轨迹:内存轨迹大指的是开辟了多个线程,内存的变化就比较大;数据局部性是说数据比较散乱,线程可以没有联系,所以数据就比较散乱



目录
相关文章
|
1天前
|
存储 JavaScript 前端开发
JavaScript基础
本节讲解JavaScript基础核心知识:涵盖值类型与引用类型区别、typeof检测类型及局限性、===与==差异及应用场景、内置函数与对象、原型链五规则、属性查找机制、instanceof原理,以及this指向和箭头函数中this的绑定时机。重点突出类型判断、原型继承与this机制,助力深入理解JS面向对象机制。(238字)
|
2天前
|
安全 数据可视化 网络安全
安全无小事|阿里云先知众测,为企业筑牢防线
专为企业打造的漏洞信息收集平台
1303 2
|
3天前
|
云安全 人工智能
2025,阿里云安全的“年度报告”
拥抱AI时代,阿里云安全为你护航~
1448 2
|
2天前
|
人工智能 自然语言处理 API
n8n:流程自动化、智能化利器
流程自动化助你在重复的业务流程中节省时间,可通过自然语言直接创建工作流啦。
337 4
n8n:流程自动化、智能化利器
|
10天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
1429 7
|
21小时前
|
Linux 数据库
Linux 环境 Polardb-X 数据库 单机版 rpm 包 安装教程
本文介绍在CentOS 7.9环境下安装PolarDB-X单机版数据库的完整流程,涵盖系统环境准备、本地Yum源配置、RPM包安装、用户与目录初始化、依赖库解决、数据库启动及客户端连接等步骤,助您快速部署运行PolarDB-X。
214 1
Linux 环境 Polardb-X 数据库 单机版 rpm 包 安装教程
|
3天前
|
人工智能 API 开发工具
Skills比MCP更重要?更省钱的多!Python大佬这观点老金测了一周终于懂了
加我进AI学习群,公众号右下角“联系方式”。文末有老金开源知识库·全免费。本文详解Claude Skills为何比MCP更轻量高效:极简配置、按需加载、省90% token,适合多数场景。MCP仍适用于复杂集成,但日常任务首选Skills。推荐先用SKILL.md解决,再考虑协议。附实测对比与配置建议,助你提升效率,节省精力。关注老金,一起玩转AI工具。
|
11天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
1311 16
|
4天前
|
机器学习/深度学习 测试技术 数据中心
九坤量化开源IQuest-Coder-V1,代码大模型进入“流式”训练时代
2026年首日,九坤创始团队成立的至知创新研究院开源IQuest-Coder-V1系列代码大模型,涵盖7B至40B参数,支持128K上下文与GQA架构,提供Base、Instruct、Thinking及Loop版本。采用创新Code-Flow训练范式,模拟代码演化全过程,提升复杂任务推理能力,在SWE-Bench、LiveCodeBench等基准领先。全阶段checkpoint开放,支持本地部署与微调,助力研究与应用落地。
410 1
|
3天前
|
安全 API 开发者
手把手带你使用无影 AgentBay + AgentScope 完成一站式智能体开发部署
阿里云无影 AgentBay 作为一个面向 AI 智能体开发的云端 GUI 沙箱服务,已集成至阿里巴巴通义实验室开源的 AgentScope 框架,助力开发者快速构建安全、高效的智能体应用。
242 1