这是我参与「第五届青训营 」笔记创作活动的第10天
Node.js 的应用场景(why)
前端工程化
- Bundle:webpack,vite,esbuild,parcel
- Uglify:uglifyjs
- Transpile:bablejs,typescript
- esbuild,parcel,prisma
Web服务端应用
- 学习曲线平缓,开发效率高
- 运行效率接近常见编译语言
- 社区丰富及工具成熟(npm)
- 与前端结合的场景会有优势
Electron跨端桌面应用
- 应用:vscode,slack,discord,zoom
- 大公司内的效率工具
Node.js 运行的结构(what)
v8.libuv
- v8:JavaScript Runtime,诊断调试工具
- libuv:eventloop(事件循环),syscall(系统调试)
特点
异步IO
当Node.js执行I/O操作时,会在响应返回后恢复操作,而不是阻塞线程并占用额外内存等待
单线程
- JS 单线程:js线程+uv线程池+v8任务线程池+v8 Inspector线程
- 优点:不考虑多线程状态同步问题,也就不需要锁;同时还高效利用系统资源
- 缺点:阻塞产生更多负面影响
跨平台
node.js跨平台+JS无需编译环境(+Web跨平台+诊断工具跨平台)
编写Http Server(how)
1.安装nodejs
2.编写http server+client收发get,post请求
3.编写静态文件服务器
4.React SSR
- 避免重复写代码
- 相比SPA渲染更快,SEO友好。
- 要考虑服务端渲染问题