nodejs大前端从入门到精通一

news2025/1/16 20:55:08

一、nodejs架构

nodejs核心组成在这里插入图片描述Natives Modules

  • 当前层内容由JS实现
  • 提供应用程序可直接调用库,例如fs、path、http等
  • JS语文无法直接操作底层硬件设置

在和硬件交互的的桥梁,通过Builtin Modules(胶水层)
底层:

  • V8:执行JS代码,提供桥梁接口
  • Libuv:事件循环、事件队列、异步IO
  • 第三方模块:zlib、http、c-ares等
    在这里插入图片描述

IO是计算机操作过程中最缓慢的环节
在这里插入图片描述
在这里插入图片描述
Reactor模式,单线程完成多线程工作,也是应答者模式,Reactor模式下实现异步IO、事件驱动,Nodejs更适用于IO密集型高并发的请求

Nodejs异步IO

在这里插入图片描述
IO只有阻塞和非阻塞,重复调用IO操作,判断IO是否结束,这种方法叫轮询
常用的轮询技术有:
read、select、poll、kqueue、eventports
期望实现无须主动判断的非阻塞IO
libuv库:
在这里插入图片描述异步IO提高 了CPU的使用率,使用单线程与使用多进程比,节省了多线程或多进程切换时带来的消耗

异步IO总结:

  • IO是应用程序的瓶颈所在
  • 一步IO提高性能无采原地等待结果返回
  • IO操作属于操作系统级别,平台都有对应实现
  • Nodejs单线程配合事件驱动架构及libuv实现了异步IO

事件驱动架构

事件驱动架构是软件开发中通用模式
事件驱动、发布订阅、观察者 这三个共同的特点是:主体发布消息,其他实例接收消息
在这里插入图片描述

const EventEmitter = require("events");

const myEvent = new EventEmitter();

myEvent.on("事件1", () => {
  console.log("事件1执行了");
});
myEvent.on("事件1", () => {
  console.log("事件1-2执行了");
});
myEvent.emit("事件1");

Nodejs单线程

nodejs号称使用JS实现高效可伸缩的高性能web服务
单线程如何实现高并发?
底层是异步非阻塞IO配合事件回调通知
nodejs主线程是单线程的,但是在libuv库里是有一个线程池的,默认里面有4个线程
把Node程序的异步请求分成网络IO、非网络IO、非IO。分成三种
网络IO的操作libuv库会调用当前平台相对应的io接口去处理,而另外两种异步操作会去线程池里的线程完成处理

代码:单线程在处理cpu密集型问题时存在的阻塞的现象

const http = require('http')

function sleepTime (time) {
  const sleep = Date.now() + time * 1000
  while(Date.now() < sleep) {}
  return 
}
sleepTime(4)
const server = http.createServer((req, res) => {
  res.end('server starting......')
})

server.listen(8080, () => {
  console.log('服务启动了')
})

Node.js应用场景

Node.js做为中间层
在这里插入图片描述

  • 操作数据库提供API服务
  • 实时聊天应用程序
  • Nodejs更加适合IO密集型任务
    适合IO密集型高并发的任务,不适合做大量的业务逻辑

Node.js实现API服务

直接运行ts页面小方法:
npm install ts-node -g
ts-node ./test.ts
在这里插入图片描述

全局对象

与浏览器平台的window不完全相同
Nodejs全局对象上挂载了许多属性
全局对象是javascript中的特殊对象
Nodejs中全局对象是global
global的根本作用就是作为宿主
全局对象可以看做是全局变量的宿主

Nodejs常见全局变量

  • __filename:返回正在执行脚本 文件 的绝对路径
  • __dirname:返回正在执行脚本所在目录
  • timer类函数:执行顺序与事件循环间的关系
  • process:提供与当前进程互动的接口
  • require:实现模块的加载
  • module、exports:处理模块的导出
// console.log(global)

/* console.log(__filename)
console.log(__dirname)

console.log(this)
 */
// 默认情况 this 是空对象,和 global 并不是一样的

console.log(this == global)

(function () {
  console.log(this == global)
})()

/* require('module')
__filename
__dirname
module 
exports  */

全局变量之process

无须require可直接使用,用来获取进程信息
在这里插入图片描述
rss:常驻内存
heapTotal:总内存大小
heapUsed:实际使用的内存大小
external:底层C++核心模块占用的内存
arrayBuffers:buffer

// 1 资源: cpu 内存
// console.log(process.memoryUsage())
// console.log(process.cpuUsage())

// 2 运行环境:运行目录、node环境、cpu架构、用户环境、系统平台
/* console.log(process.cwd())
console.log(process.version)
// console.log(process.versions)
console.log(process.arch)
console.log(process.env.NODE_ENV)
// console.log(process.env.PATH)
console.log(process.env.USERPROFILE)  // HOME
console.log(process.platform) */

// 3 运行状态: 启动参数、PID、运行时间
/* console.log(process.argv)
console.log(process.argv0)  // execArgv
console.log(process.pid) */  // ppid 

setTimeout(() => {
  console.log(process.uptime())
}, 3000)

在这里插入图片描述
process.on(“exit”)只能执行同步的代码,beforeExit是可以
写了process.exit() 后面的代码都不会执行,也不会执行beforExit
在这里插入图片描述
输出txt文件里内容
在这里插入图片描述
process.stdin.pipe(process.stdout);
读取输入的内容,修改后输出在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/67b7336a9adb419d9260ca3a4a1387b1.pn](https://img-blog.csdnimg.cn/8652cbd612aa40bc9f453b8bdc135bf3.png)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/44755.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android——Theme和Style-由浅入深,全面讲解

1、官方详细解读 样式和主题背景 | Android 开发者 | Android Developers 2、应用场景 类似web设计中css样式。将应用设计的细节与界面的结构和行为分开。 样式style &#xff1a;应用于 单个 View 的外观。样式可以指定字体颜色、字号、背景颜色等属性 主题theme&…

【仿牛客网笔记】项目发布与总结——单元测试、项目监控

在项目上线之前需做好单元测试&#xff0c;平时开发的过程中&#xff0c;每个功能也需要进行单元测试。 验证注解的作用&#xff0c;注解是修饰方法的。 每次调方法都是静态的 对test1和test2分别进行运行 通过类进行运行&#xff0c;运行所有的方法 测试帖子的Service&#x…

【序列召回推荐】(task5)多兴趣召回Comirec-DR

note&#xff1a; 多兴趣召回建模。Comirec论文中的提出的第一个模型&#xff1a;Comirec-DR&#xff08;DR就是dynamic routing&#xff09;&#xff0c;阿里将用户行为序列的item embeddings作为初始的capsule&#xff0c;然后提取出多个兴趣capsules&#xff0c;即为用户的…

【Java】博客系统——详细解释+代码+详细注释(课设必过)

目录 前言 博客系统简要分析 一、数据库的设计 1.1 分析 1.2 代码实现&#xff08;创建数据库和表&#xff09; 二、封装数据库&#xff08;JDBC代码的编写&#xff09; 2.1、首先通过创建Maven项目&#xff0c;基于Small Tomcat部署 servlet&#xff1b; 2.2、封装数据…

telnet配置设备远程管理—eNSP

案例&#xff1a;给路由器配置远程管理&#xff0c;使一台路由器远程管理另一台。 所需设备&#xff1a;两台路由器&#xff0c;一根网线 图示 一、给两台设备配置IP地址 AR1&#xff08;以下命令&#xff09; a. sy b. int g0/0/0 c. ip add 1.1.1.1 24AR2 a. sy b. int g0/0…

区间信息维护与查询【线段树 】 - 原理1 线段树的基本操作

区间信息维护与查询【线段树 】 - 原理1 线段树的基本操作 线段树&#xff08;segment tree&#xff09;是一种基于分治思想的二叉树&#xff0c;它的每个节点都对应一个[L , R ]区间&#xff0c;叶子节点对应的区间L R 。每一个非叶子节点[L , R ]其左子节点的区间都为[L , (…

进程与线程的区别及联系

目录 1. 操作系统功能简介 2. 进程 2.1 认识进程 2.2 进程操作系统中如何管理 2.3 PCB如何描述 2.3.1 pid 2.3.2 内存指针 2.3.3 文件描述符表 2.3.4 进程调度相关属性 3. 内存管理 4. 线程 4.1 认识线程 4.2 进程与线程的关系 4.3 线程安全问题 1.操作系统功能简…

[附源码]计算机毕业设计springboot电子相册管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Git 入门 拉取仓库和推送仓库

目录 基本操作 本地建立仓库并推送到远端仓库 关联仓库失败 解决方法 从远端仓库拉取文件到本地 私有的仓库的连接 修改 提交者名称 IDEA/Pycharm等如何使用git 如何关闭git 功能 Git操作主要分为两类 &#xff0c;如何把自己建的项目同步的网上的仓库&#xff0c;如何…

OpenHarmony编译系统

GN 简介 直接百度 GN 入门 可以参考下面的示例&#xff0c;作为入门参考学习https://blog.csdn.net/weixin_44701535/article/details/88355958https://gn.googlesource.com/gn//main/docs/reference.mdhttps://chromium.googlesource.com/chromium/src/tools/gn//48062805e…

Java项目_在线点餐系统(jsp+sevlet+mysql)(含论文)

在线点餐系统(jspsevletmysql一、系统介绍二、功能展示1.主页(用户)2.菜单(用户)3.用户注册(用户)4.用户登陆(用户)5.我的订单(用户)6.餐桌管理(管理员)7.菜系管理(管理员)8.菜品管理(管理员)9.订单管理(管理员)三、获取源码一、系统介绍 系统主要功能&#xff1a; 用户&#…

4位资深专家多年大厂经验分享出Flink技术架构设计与实现原理

时间飞逝&#xff0c;转眼间毕业七年多&#xff0c;从事 Java 开发也六年了。我在想&#xff0c;也是时候将自己的 Java 整理成一套体系。 这一次的知识体系面试题涉及到 Java 知识部分、性能优化、微服务、并发编程、开源框架、分布式等多个方面的知识点。 写这一套 Java 面试…

bootstrap下拉菜单学习(五)

组件&#xff1a;下拉菜单 bootstrap字体图标和下拉菜单组件的使用 这些图标都存在我们引入的font文件夹内&#xff1a; 复制bootstrap所用的包&#xff1a; 创建html页面&#xff1a; 图标不仅可以直接放文本里面&#xff0c; 还可有结合按钮去用。 要使用组件&#xff1a;不…

《网络空间测绘技术与实践》正式发售,让网络空间作战“有图可依”

近日&#xff0c;多位业界专家力推&#xff0c;由知道创宇CEO赵伟、CTO杨冀龙、CSO黑哥&#xff08;周景平&#xff09;等撰写的著作《网络空间测绘技术与实践》&#xff0c;正式出版并发售。网络空间已成为继“陆、 海、空、天”后的第五大空间&#xff0c;网络空间亦需要类似…

【uni-app高频面试题——精品一】

uni-app高频面试题谈谈你对uni-app的理解&#x1f355;uni中如何为不同的平台设置不同的代码uniapp中封装接口请求相较于微信小程序有什么要注意的uni-app中的本地存储数据和接收数据是什么✊uni-app 路由与页面跳转&#x1f4aa;uni-app全局变量怎么定义&#xff0c;怎么获取&…

【Python实战】“特种兵”们的专属游戏助手,助你吃鸡:极品小助手也是棒呆了~(“大吉大利,今W吃鸡”)

前言 有温度 有深度 有广度 就等你来关注哦~ 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 “注意左边&#xff0c;左边有人&#xff0c;打他&#xff01;” “快上车&#xff01;&#xff0…

Spring Security(十九)--OAuth2:实现授权服务器(下)--环境准备以及骨架代码搭建

一、前言 本章我们将在上一章代码骨架搭建好的前提下对三种授权类型进行测试以及讲解如何配置授权服务器以颁发刷新令牌&#xff0c;所以本章是一个比较轻松的章节&#xff0c;但是唯一的要求就是需要小伙伴们对上一章内容要完成代码的搭建&#xff0c;否则这章学习也不知道个…

[附源码]计算机毕业设计springboot飞越青少儿兴趣培训机构管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

嘉创房地产冲刺港交所:半年营收4.7亿 现金及现金等价物减少

雷递网 雷建平 11月28日嘉创房地产控股有限公司&#xff08;简称&#xff1a;“嘉创”&#xff09;日前递交招股书&#xff0c;准备在港交所上市。半年营收4.73亿嘉创为一家精品住宅物业发展商&#xff0c;主要在大湾区的东莞、惠州及佛山迅速发展的住宅市场&#xff08;如东莞…

m半分布式JAC联合接纳控制与用户位置信息的垂直切换matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 随着无线通信技术的飞速发展&#xff0c;为支持多种不同无线接入技术、不同系统间协作、不同业务类型及终端差异性等需求&#xff0c;未来的无线网络将是一种协作式的异构网络融合架构&#xff0…