这是我参与「第四届青训营 」笔记创作活动的第10天
Node.js的应用场景
- 前端工程化
- Web服务端应用
- Electron跨端桌面应用
前端工程化
- Bundle: webpack, vite, esbuild, parcel
- Uglify: uglityjs
- Transpile: bablejs, typescript
- 其他语言加入竞争:esbuild, parcel, prisma
现状:难以替代
Web服务端应用
- 学习曲线平缓,开发效率较高
- 运行效率接近常见的编译语言
- 社区生态丰富及工具链成熟 (npm,V8 inspector)
- 与前端结合的场景会有优势(SSR)
- 现状:竞争激烈,Node.js有自己独特的优势
Electron跨端桌面应用
- 商业应用:vscode,slack,discord,zoom
- 大型公司内的效率工具
- 现状:大部分场景在选型时,都值得考虑
Node.js运行时结构
v8:JavaScript Runtime,诊断调试工具(inspector)
libuv:ebentloop(事件循环),syscall(系统调用)
特点
异步I/O操作
当Node.js执行I/O操作时,会在响应返回后操作,而不是阻塞线程泵站用额外内存等待
单线程
-
JS单线程 实际:JS线程 + uv线程池 + V8任务线程池 + V8 Inspector线程
-
优点:不用考虑多线程状态同步问题,也就不需要锁:同时还能比较高效地利用系统资源
-
缺点:阻塞会产生更多负面影响 ,解决办法:多进程或多线程
跨平台
Node.js 跨平台+JS 无需编译环境(4 Web 跨平台 + 诊断工具跨平台)
=
开发成本低(大部务场景无需担心路平台问题),整体学习成本低
编写Http Serve
Http serve
`const http = require('http')
const server = http.createServer((req, res) => { res.end("hello") })
const port = 3000
server.listen(port,() => { console.log('listening on: ', port) })`
client
这里用了很多回调函数,好用但是不太好管理,例如不知道什么时候触发
方法:
静态文件
SSR
服务器端渲染(Server-Side Rendering)是指由服务侧完成页面的 HTML 结构拼接的页面处理技术,发送到浏览器,然后为其绑定状态与事件,成为完全可交互页面的过程。(源自百度百科)
优势:
- 相比传统HTML模板引擎,避免重复编写代码
- 相比SPA,(不考虑后端渲染),首屏渲染更快,SEO(搜索引擎优化)会更友好
单页Web应用(single page web application,SPA),就是只有一张Web页面的应用,是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用程序。
缺点
- 通常qps(每秒查询率)较低
- 更难编写,需要考虑服务端渲染情况