NodeJs学习总结 | 青训营笔记

122 阅读3分钟

这是我参与「第四届青训营」笔记创作活动的第10天

前言

Nodejs是个在服务器动可以解析和执行JavaScript代码的运行环境,也可以说是一个运行时平台,仍然使用JavaScript作为开发语言,但是提偶了一些功能性的API,例如文件操作和网络通信API等,并且可以通过C++进行扩展,依赖于Chrome V8 引擎进行代码解析:Chrome V8负责在非浏览器解析情况下解析JavaScript 代码。

NodeJs应用场景

  • 前端工程化(脚手架工具,命令行工具,自动化等)实际案例有:webpack,vite。
  • Web服务应用(koa)案例有:头条搜索,西瓜视频,npm。
  • Electron桌面PC应用 实际案例有:飞书,ZOOM,Vscode。

NodeJs运行时架构图

aae138d6-866b-4ccc-8a1d-4fa6953732c5.jpeg

V8是JavaScriptRuntime,libuv事件循环,syscakk(系统调用)

NodeJs异步IO

当NodeJs执行I/O操作的时候,会在相应返回后操作,而不是阻塞线程,并占用额外内存等待。
如图所示:
rei99hzX2T.jpg

NodeJs单线程

在nodejs里,js单线程实际上是由js线程+uv线程+v8任务池线程+v8Inspector线程组成。优点在于,不用考虑多线程状态同步问题,也就不需要锁,同时还能比较高效地利用系统资源。缺点就是如果发生阻塞会产生更多负面影响,但是也可以通过多进程或者多线程来解决。

NodeJs 跨平台

Nodejs的API大部分都是跨平台的,例如文件读写在windows里会调用windows相关的操作,linux调用linux的,但是我们始终只用调用nodejs给我们提供的API降低了跨平台开发的成本,整体的学习成本降低了。

NVM

NVM是一个管理nodejs版本的管理器,由于NodeJs版本原因会造成部分历史代码无法运行,所以需要不同的Node版本来运行项目,我们就会使用NVM来管理多个nodejs版本,方便我们切换。

简单的HTTP SERVER

const http = require('http')
const port = 3000
const server = http.createServer((req,res)=>{
    res.send('hello')
})

server.listen(port,()=>{
    console.log(`server listens on : ${port}`)
})

HTTP部署需要解决的问题

  • 守护进程:当进程退出时,重新启动。
  • 多进程:cluster便捷的使用多进程。
  • 记录进程状态,用于诊断。

SSR

服务端渲染简称 SSR,全称是 Server Side Render,是指一种传统的渲染方式,就是在浏览器请求页面URL的时候,服务端将我们需要的HTML文本组装好,并返回给浏览器,这个HTML文本被浏览器解析之后,不需要经过 JavaScript 脚本的执行,即可直接构建出希望的 DOM 树并展示到页面中。优点在于首次打开网页会比SPA应用快,利于SEO。

NodeJs与WASM

因为NodeJs在V8环境中运行所以它是执行WASM的天然容器,和浏览器WASM是同一运行时,同时NodeJs支持WASI。 NAPI可以执行C,C++,rust等高级语言的接口,同时能保留原生代码的能力。是一个提供不同语言通信的不错方案。