Node.js碎碎念 | 青训营笔记

105 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第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
  • 可以生成缓存片段,生成静态化文件

缺点

  • 服务端压力较大
  • 开发条件受限
  • 学习成本相对较高