这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
本堂课重点内容
- Node.js的应用场景(why)
- Node.js运行时结构(what)
- 编写Http Server (how)
- 延伸话题
详细知识点
Node.js的应用场景
- 前端工程化
- web服务端应用
- Electron跨端桌面应用
Node.js运行时结构
V8: JavaScript Runtime,诊断调试工具(inspector)
libuv: eventloop (事件循环,syscall (系统调用)
特点:
-
异步I/O
-
单线程 worker_ thread 可以起独立线程,但每个线程的模型没有太大变化
- JS单线程 实际:JS线程+uv线程池+V8任务线程池+V8 Inspector线程
- 优点:不用考虑多线程状态同步问题,也就不需要锁;同时还能比较高效地利用系统资源
- 缺点:阻塞会产生更多负面影响 解决办法:多进程或多线程
-
跨平台(大部分功能、api)
Node.js跨平台+ JS无需编译环境(+ Web跨平台+诊断工具跨平台)=开发成本低(大部分场景无需担心跨平台问题),整体学习成本低
编写Http Server
-
安装Node.js
-
编写Http Server + Client,收发GET, POST请求
- Http Server
//Hello World const http = require('http') const port = 3000 const server = http.createServer((req,res)=>{ res.end('hello') }) server.listen(port,()=>{ console.log(`server listens on: ${port}`) }-
Client
-
Promisify Promisify只适用于只被调用一次的回调函数 技巧:将callback转换成promise
-
编写静态文件服务器 与高性能、可靠的服务相比,还差什么? 1.CDN:缓存+加速 2.分布式储存,容灾 外部服务: cloudflare, 七牛云,阿里云,火山云...
-
编写React SSR服务
SSR(server side rendering)有什么特点?
- 相比传统HTML模版引擎:避免重复编写代码
- 相比SPA (single page application) :首屏渲染更快,SEO友好
- 缺点: 通常qps较低,前端代码编写时需要考虑服务端渲染情况
-
适用inspector进行调试、诊断
-
V8 Inspector:开箱即用、特性丰富强大、与前端开发一致、跨平台
node -inspectopen
http://localhost: 9229/json -
场景:
- 查看console.log内容
- breakpoint
- 高CPU、死循环: cpuprofile
- 高内存占用: heapsnapshot
- 性能分析
-
-
部署简介:
部署要解决的问题
-
守护进程:当进程退出时,重新拉起
-
多进程: cluster 便捷地利用多进程
-
记录进程状态,用于诊断
容器环境
- 通常有健康检查的手段,只需考虑多核cpu利用率即可
-
课后个人总结
学习完这堂课,收获颇多,了解了node运行时的结构,如何编写HTTP server以及部署的相关问题。Node.js的出现让服务端也能运行JavaScript,Node.js对于我来说是挺有意思的一个东西,值得去学习、研究。