pre
- 运行时(Runtime)
"运行时"就是程序运行的时候,也就是指令加载到内存并由CPU执行的时候。
与之相对应的是“编译时”,其指代码编译的时候,也就是C代码编译成可执行文件的时候,此时指令没有被CPU执行。
-
运行时库(Runtime Library)
运行时库就是程序运行的时候所需要依赖的库。 -
运行时环境(Runtime environment)
运行环境(英语:Runtime environment)又称“运行时系统”(run-time system),指一种把半编译的运行码在目标机器上运行的环境。
简介
Nodejs 只是一个js运行时环境
访问系统内核,访问本地文件,链接服务器…
nodejs在浏览器之外运行v8引擎
跨平台
适合干IO密集型应用,不适合CPU密集型(单线程)
CPU 密集型: 图像、音频处理需要大量的数据结构+算法
全局变量
node global
浏览器 window
globalThis
根据环境自动判断
ECMAScript中有的全局,如Math…
-
__dirname
当前文件所在目录(绝对路径) -
__filename
当前文件路径(绝对路径) -
__extname
文件后缀 -
Buffer
-
process
处理进程process.argv
获取参数数组process.cwd()
目录process.exit()
终止进程process.on('exit', ()=>{console.log('退出')})
监听事件
nodejs
应用在(长期运行!!httpserver返回++counter
)单个进程中运行,无需为每个请求创建新的线程
(相比,Apache,每一个请求创建一个线程)
单线程,并发量为1
采用了非阻塞的开发范式(事件循环机制) + v8引擎加持,轻松应对高并发
主线程是单线程,io是libuv维护的线程池
当函数调用栈内有函数运行时,js不能处理其他请求
异步模块(多线程)和事件循环(监听 派发,不占用单独线程)
循环不停监听异步模块处理进度,等处理完成后,派发函数调用栈执行
最快的速度清空函数调用栈,把耗时的操作全部做异步处理
node将【异步操作和对应的回调函数】封装成一个请求对象,交给底层的异步模块处理
异步操作有结果之后,回调函数进入事件循环等待执行,
事件循环在调用栈清空时,按照某个优先级顺序将回调函数推入到调用栈执行
node异步API
- 定时器:
setTimeOut
setInterval
(最小1ms,浏览器4ms) - I/O操作: 文件读写,数据库操作,网络请求
- node独有的,
process.nextTick
、setImmediate
nextTick(优先级比事件循环队列更高)
微任务(promise)
timer
–>poll(当执行到这里时卡住,检查timer或者check队列有误需要 执行的)
check
Poll 阻塞,从设计上,是想优先处理IO事件的
Settimeout(,0)与setimmdeiate 放入io中使用,定时器,总会先执行check队列的操作
Timer -> check运行一周称为一个
Tick
nextTick先于下一个Tick执行
异步代码进入异步模块以非阻塞的形式执行,对应的异步函数会在对应的异步代码执行完成后,派发到不同的队列中
异常处理
为了健壮性:捕获并处理每一个错误
-
同步代码 try catch
-
异步代码
- Promise (catch)
- async await trycatch
异步编程 流程控制
回调函数 --> Promise —> async await
node官方的库
遵循,错误优先风格
回调函数,需要顺序执行,就要嵌套的写,但是导致回调地狱
平行
顺序
module
module并不是全局变量,每一个模块有他相应的模块
核心模块(随着node)
第三方模块
自定义模块(引用路径)
运行时加载 cmj,知道运行时候再报错
编译时加载 esm
import from
写在模块顶层
import()
(异步,返回promise)
V8
预编译阶段 (ESM
-分配内存空间
-确定作用域链…
执行阶段 (CMJ
Buffer
js字符串不可变,所有对字符串的操作都要生成一个新的字符串
fs
模块读取,不生命文件类型,默认返回的都是文件二进制缓冲区
1 | const buffer1 = Buffer.alloc(5) //申请五个字节 |
stream
i/o操作
端到端数据交换
加载 缓冲区 处理
流模式 加载一点处理一点
SEO
-
TDK
- title
- description (meta)
- Key(meta)
-
语义化标签
-
<a/>
href -
<img/>
href alt -
一个页面一个h1 和 main标签
-
…
借助第三方库jsdom(jsdom模拟浏览器环境的库,可以在 Node.js 中使用 DOM API),服务端渲染