这期内容当中小编将会给大家带来有关如何进行对nodejs源码研究的分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
回首对nodejs的源码研究,时间已经过去了一年多。我很喜欢js这门语言,有时候感觉他和c语言一样,在c语言里,很多东西都需要自己实现,让我们可以发挥无限的创造力和想象力,js虽然很多东西在v8里已经提供,但是用js,依然可以创造很多好玩的东西,还有好玩的写法。js应该我见过唯一的一门没有实现网络和文件功能的语言。或者说没有向用户提供这种功能。这也是我对js最大的偏见。因为网络和文件,是一个很重要的能力。对于程序员来说,也是很核心很基础的知识。因为js的使用场景是运行在浏览器。如果js提供了文件操作的话,这就意味着js可以访问用户电脑上面的数据,这也是不显示的,所以,js不可能会提供这样的能力,让我们可以像其他语言一样,随意操作用户的资源。
很幸运,nodejs被创造出来了。nodejs在js的基础上,使用v8提供的能力,极大地拓展、丰富了js的能力。尤其是网络和文件。这样我就不仅可以使用js,还可以使用网络、文件等功能。这是我逐渐转向nodejs方向的原因之一。也是我开始研究nodejs源码的原因之一。因为nodejs满足了我喜好和技术上的需求。不过一开始的时候,我并没有全身心地投入代码的研究,只是偶尔会看一下某些模块的实现。真正的开始,是为了做<nodejs是如何利用libuv实现事件循环和异步>的分享。从那时候起,大部分业余时间和精力都投入源码的研究。
我首先从libuv开始研究,因为libuv是nodejs的核心之一。因为曾经研究过一些linux的源码,也一直在学习操作系统的一些原理和实现,所以在阅读libuv的时候,算是没有遇到太大的困难。c语言函数的使用和原理,基本都可以看明白。重点在于业务逻辑上,需要把各个逻辑捋清楚。我使用的方法就是注释和画图。我个人比较喜欢写注释。虽然说代码是最好的注释,但是我还是愿意花时间用注释去把代码的背景和意义阐述一下,因为并不是每个程序员都能做到代码即注释这一境界。而且注释会让大部分人更快地能读懂代码的含义。读libuv的时候,也穿插地读了一些js和c++层的代码。阅读nodejs源码的方式是,选择一个模块,垂直地从js层分析到c++层,然后到libuv层。
读完libuv,接下来读的是js层的代码,js虽然容易看懂,但是js层的代码非常多,而且我感觉逻辑上也非常绕,所以至今,我还有很多没有细读。这个作为后续的计划。nodejs中,c++算是胶水层,很多时候,不会c++,其实也不影响nodejs源码的阅读,因为c++很多时候,只是一种透传的功能,他把js层的请求,通过v8,传给libuv。然后再反过来。所以c++层我是放到最后才细读。c++层我觉得是最难的,难的不是看不懂他的代码逻辑。而是真正明白他的工作原理,这时候,我又不得不开始读v8的源码了,v8的源码可以说,非常难。我选取的几乎是最早的版本0.1.5。然后结合8.x版本。通过早期版本,先学习v8的大概原理和一些早期实现上的细节。因为后续的版本虽然变化很大,但是也只是功能的增强和优化,有很多核心的概念还是没有变化的,这是我选取早期版本的原因,避免一开始就陷入无穷无尽的代码中,迷失了方向,失去了动力。哪怕是早期的版本,有很多内容依然非常复杂。结合新版本是因为有些功能在早期版本里没有实现,这时候要明白他的原理,就只能看新版的代码,有了早期版本的经验,阅读新版的代码也有一定的好处。多多少少也知道了一些阅读技巧。
nodejs的大部分代码都在c++和js层,所以目前仍然是在不断地阅读这两层的代码。还是按照模块垂直分析。阅读nodejs代码,让我更了解nodejs的原理,也更了解js。不过代码量非常大,需要源源不断的时间和精力投入。所以我也一直在寻找志同道合的人一起分析,加快对nodejs源码的研究,不过真正能啃源码的人不多。源码的阅读可能并不一定能帮助你的工作变得更好,很多时候也往往不需要深入到这种程度。不像学一个框架,一门语言一样,我们立刻就能看到效果,这极大地增强了我们的积极性。就像现在可能很少人学c、c++一样,使用底层语言,实现一个能用的东西,会变得异常不容易。但是使用一些脚本语言,我们很快就能看到我们想要的东西。最主要的是,使用更难的语言,并不会增加我们的工资。所以,这是一个选择的问题,不是对错的问题。做技术,知其然知其所以然的感觉是非常美妙的,你靠着一门技术谋生,却对他知之甚少,这种感觉并不好。阅读源码,虽然不会为你带来直接的、迅速的收益,但是有几个好处是必然的。第一是他会决定你的高度,第二你写代码的时候,你看到的不再是一些冰冷冷、无生命的字符。这可能有点夸张,但是你了解了技术的原理,你在使用技术的时候,的确会有不同的体验,你的思维也会有了更多的变化。第三是提高了你的学习能力,当你对底层原理有了更多的了解和理解,你在学习其他技术的时候,就会更快地学会,比如你了解了epoll的实现,那你看nginx、redis、libuv等源码的时候,关于事件驱动的逻辑,基本上就没有太大的压力了。
上述就是小编为大家分享的如何进行对nodejs源码研究的分析了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。