这是我参与「第五届青训营」伴学笔记创作活动的第14天
老师讲解了
- Node的使用场景
- Node运行时的结构
- 如何编写HTTP Server
- 延伸
NodeJs的优点
- 开发效率高
- 运行效率高
- 社区生态丰富,工具链成熟
- 和前端结合有优势
NodeJS运行时结构
v8 engine:主要有两个作用
- 虚拟机的功能,执行js代码(自己的代码,第三方的代码和native modules的代码)。
- 提供C++函数接口,为nodejs提供v8初始化,创建context,scope等。
libuv:它是基于事件驱动的异步IO模型库,我们的js代码发出请求,最终由libuv完成,而我们所设置的回调函数则是在libuv触发。
builtin modules:它是由C++代码写成各类模块,包含了crypto,zlib, file stream etc 基础功能。(v8提供了函数接口,libuv提供异步IO模型库,以及一些nodejs函数,为builtin modules提供服务)。
native modules:它是由js写成,提供我们应用程序调用的库,同时这些模块又依赖builtin modules来获取相应的服务支持
Nodejs特点
- 异步IO: 执行I/O操作时不会阻塞线程并占用额外内存等待
- 单线程
- 优点:不用考虑多线程状态同步,高效率利用系统资源
- 缺点:阻塞会产生负面影响,可以靠多线程多进程解决
- 跨平台 开发成本低,学习成本低
延伸
服务端渲染SSR
简单理解是将组件或页面通过服务器生成html字符串,再发送到浏览器,当用户第一次请求页面时,客户端拿到手的,是可以直接渲染然后呈现给用户的 HTML 内容,不需要为了生成 DOM 内容自己再去跑一遍 JS 代码。
优点
- 首屏渲染快
- 利于SEO
- 可以生成缓存片段,生成静态化文件
缺点
- 服务端压力较大
- 开发条件受限
- 学习成本相对较高