这是我参与「第五届青训营 」伴学笔记创作活动的第7天
一、本堂课重点内容:
- Node.js的应用场景
- Node.js运行时的结构
- 编写Http Server
- 延伸话题
二、详细知识点介绍:
Node.js的应用场景
- 前端工程化
- Web服务端应用
- Electron跨端桌面应用
Node.js的应用场景-前端工程化
- Bundle:webpacl,vite,esbuild,parcel
- Uglify:uglifyjs
- Transpile:bablejs,typescript
- 其他语言加入竞争:esbuild,parcel,prisma
- 现状:难以取代
Node.js的应用场景-Web服务端应用
- 学习曲线平缓,开发效率高
- 运行效率接近常见的编译语言
- 社区生态丰富以及工具链成熟
- 与前端结合场景有优势
- 现状:竞争激烈,Node.js有自己的独特优势
Node.js的应用场景-Electron跨端桌面应用
- 商业应用:vscode,slack,discord,zoom
- 大型公司内的效率工具
- 现状:大部分场景在选型时都值得考虑
Node.js运行时的结构
Node.js运行时的结构-V8,libuv
- V8:JavaScript Runtime 诊断调试工具(inspector)
- libuv:eventoop(事件循环),syscall(系统调试)
- 举例:用node-fetch 发起请求时...
Node.js运行时的结构-特点
- 异步:当Node.js执行I/O操作时,会在响应返回后回复操作,而不是阻塞线程并占用而外内存等待。
- 单线程
- 跨平台
单线程
-
JS单线程
实际上JS线程+uv线程池+V8任务池+V8Inspector线程
-
优点:不用多考虑线程状态同步问题,也就不需要锁,同时还能比较高效的利用系统资源;
-
缺点:阻塞会产生更多负面影响
-
解决办法:多进程或多线程
编写Http Server
React SSR(服务端渲染)特点
- 相比传统HTML模板引擎:避免重复编写代码
- 相比SEA:首屏渲染更快,SEO友好
- 缺点:通常ops较低,前端代码编写时需要考虑服务端渲染情况
SSR难点
- 需要打包处理代码
-需要思考前端代码在服务端运行时的逻辑
- 移除对服务端无意义的副作用,或重置环境