likes
comments
collection
share

小册上新 | 深入剖析 Node.js 底层原理

作者站长头像
站长
· 阅读数 45

Node.js 从诞生到现在,已经走过了十几个年头。随着全栈工程师、微服务、前后端架构分离的火热,从开发工具到 Web 应用,从客户端到服务端,越来越多的使用场景中都能看到 Node.js 的身影。

与此同时,各个公司对 Node.js 开发者的要求也越来越高。比如会要求我们对进程 / 线程、网络、流和异步等概念有深刻的理解,精通 Node.js,熟悉 TCP、HTTP 等网络协议,学习能力和解决问题的能力强。

作为一名 Node.js 工程师,如果我们只是面向文档 黑盒 编程,显然已经不能满足这些要求了。文档只是 Node.js 的一部分,想要提升自己的核心竞争力,我们一定要深入理解 Node.js 底层原理

深入理解 Node.js 底层原理有什么好处?

理解底层原理可以帮助我们解决日常工作中碰到的各种问题。 Node.js 本身非常庞大和复杂,在工作中,我们常常碰到连文档和搜索都无法解决的问题,此时我们往往需要通过查看 Node.js 源码来排查问题,这点在社区的各种 issue 和 PR 中可以深刻看到。

比如说,之前有个同学给我反馈过在 Node.js 子线程中使用 vm 模块导致 Crash 的 BUG,后面就是通过源码找到了原因,并给社区提交了 PR 修复该问题。又比如, Node.js 的 HTTP 模块之前存在一个 Socket 关闭后没有正确处理 HTTP 解析器的 BUG,正常情况下很难复现,但是会经常出现在 CI 测试用例中,导致每天需要不断地重跑 CI 用例,严重影响了 PR 的进度,后来我也是通过深入阅读源码的方式解决了这个晦涩的问题。

理解底层原理不仅可以帮助我们排查问题,还可以帮助我们更好地完成工作中各种需求。 举个例子,我之前工作中通过基于 Unix 域实现 HTTP 通信解决了容器中不允许随便监听端口的限制。通过 V8 和 Libuv 提供的能力实现了一个 APM watchdog,因为 Node.js 的 JS 线程是单线程的,CPU 负载高的时候无法及时抓到现场的 profile 信息,通过 APM watchdog 就很好地解决了单线程的限制。

技术是相通的,理解底层原理可以帮助我们更快地学习其他技术。 虽然 Deno、Just、Bun 等新的 JS 运行时穷出不尽,但是技术实现上却是类似的,我们只要掌握了核心的原理,其他相关技术自然不在话下。而且,Node.js 本身也包括了操作系统、网络、V8 等多方面的知识,这些都是很多软件中通用的技术。因此,通过学习 Node.js 源码,我们还可以学习到很多通用的底层基础知识,这对学习其他技术有着非常大的帮助。

但是,大部分同学在阅读源码或深入学习 Node.js 时,可能会遇到很多问题。

  1. 项目逻辑复杂,代码庞大,不知道如何看或者看哪些代码。比如:看完 JS 模块的源码后,不知道如何进一步阅读 C、C++ 层的代码。
  2. Node.js 涉及知识比较广,很多地方看不懂,比如会涉及 V8、事件驱动、非阻塞 IO、进程间通信等知识。
  3. 无法建立完整的知识体系,实际工作中运用不好。比如:知道文件操作是基于线程池的,但是不知道具体原理;知道 net 模块如何使用,但是不知道它是如何基于事件驱动模块工作的。

我希望能在这本小册中,帮助大家解决以上问题。

小册是如何设计的?

首先,我们会带大家从整体上了解 Node.js,在学习技术细节之前,帮助大家从多个角度建立对 Node.js 体系的认知。

小册上新 | 深入剖析 Node.js 底层原理

了解了整体架构后,我们会带大家学习 Node.js 底层的基础知识,包括 线程 池的实现、内存管理机制、模块加载原理等。

小册上新 | 深入剖析 Node.js 底层原理

然后,我们会结合源码,逐步学习 Node.js 各个核心模块的实现,包括 TCP、UDP、HTTP、进程线程、Cluster 等模块。这会涉及操作系统、网络等底层知识,单纯从学习的角度来说,也是非常有价值的。

小册上新 | 深入剖析 Node.js 底层原理

最后,我们会带大家实现一个简单的 JS 运行时,把学到的知识运用起来。 具体的课程大纲可以看下图:

小册上新 | 深入剖析 Node.js 底层原理

无论你是前端还是 Node.js 工程师或者是对 V8 和操作系统技术有兴趣的同学,理解了 Node.js 的底层,收获肯定会超出 Node.js 本身。因为 Node.js 不是孤立的技术,它封装了操作系统和一些优秀第三方库的能力,然后通过 V8 暴露给开发者使用,所以底层依然是通用的技术,比如 V8 是大多数 JS 运行时的 JS 引擎,Libuv 中的技术也是 Nginx、Redis 等现代优秀的服务器所使用的底层技术。

学无止境,希望你通过小册学会的不仅仅是 Node.js 本身,更是独立阅读源码,深入探索的能力

作者简介

theanarkh,字节跳动 Node.js 工程师,目前主要负责 Node.js APM 方向的工作,曾在腾讯云 / IMWeb / WebInfra 等团队工作。Node.js Collaborator 和 Libuv Contributor,业余写过玩具 JS 运行时 No.js 和 Deer,维护了公众号《编程杂技》,更多可以参考我的 Node.js 之路

小册上新 | 深入剖析 Node.js 底层原理

最后,我想说 Node.js 是一个很酷的东西,虽然很多人都说 Node.js 是个壳,但其实上层的技术都是壳,重点是你要理解它底层的原理,学到它的精髓,并且通过一个好的壳给别人使用。这些底层的知识,哪怕以后不做 Node.js 了,依然是非常宝贵且非常有用的东西。

小册以 Node.js V14 和 V 19 代码为例进行讲解,大家在学习过程中,可以对照着源码来看。在这个过程中,必要的时候可以查阅资料边看边学。格物致知,学习知识需要有耐心,多思考、多实践,也欢迎入群与我交流。

上新特惠,限时6折

12 月 12 日~ 21日,上新特惠,限时 6 折,原价 ¥39.9,现在购买仅需 ¥23.94~

赶紧点击下方图片或者扫描海报二维码,一起加入学习吧!

小册上新 | 深入剖析 Node.js 底层原理