为什么要使用Node.js

178 阅读3分钟

「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战

2009年,Ryan Dahl带来了Node.js,将JavaScript从浏览器端带到了服务端领域。从这一年开始,JavaScript的生态日渐繁荣。

Node.js介绍

Node已经迅速成为一个高效的web开发平台,在Node诞生之前,使用JavaScript开发服务端程序是不可能的。对其他语言来说,要实现非阻塞I/O通常需要一些特殊的类库,但对于Node来说就不一样了。

JavaScript天生就是非阻塞I/O,与生俱来的callback特性,JavaScript在单进程中,可以异步的操作文件读写、处理网络请求、查询数据库等各种I/O操作。

Node.js的底层基于Google的JavaScript运行时V8引擎,一个开源、并且高效的JavaScript运行环境。除了语言的运行环境,还有大量的Node标准类库,比如tcp/http网络、文件管理等等。

为什么使用Node

假如我们要开发一个日志存储平台,每分钟要存储上百万条的日志,那么Node的非阻塞I/O的特性将是十分高效的方案,因为服务器能够最大限度的利用所有的I/O资源,而这一切并不需要我们去关注底层的代码,因为这些都由Node帮你处理好了。我们只要有一个熟练使用JavaScript的开发团队,就可以参与到Node项目的开发中来。这在传统的web开发平台是做不到的,比如Java、PHP等等,光语言的学习成本就是巨大的。所以现在很多的大公司,像阿里、Google、微软也都在积极的推动Node的发展,并在大量的生产项目中使用Node作为服务。

Node的主要特性

Node的主要特性是它的标准类库、模块和npm(包管理系统),标准类库主要由二进制类库以及核心模块两部分,二进制类型包括libuv,它为网络以及文件系统提供了快速的时间轮询以及非阻塞I/O。同时还有http类库,我们可以快速搭建http服务端服务。

Node的核心模块主要都是由JavaScript编写,也就是说,我们可以通过阅读Node的源码,来了解文件系统、http/net等这些模块的原理。比如,通过cluster模块能够同时运行多个Node进程。

Node模块源码

Node是开源项目,其代码托管在Github上,地址:github.com/nodejs/node

我们将代码clone到本地,然后用编辑器打开

image.png

/lib文件夹中我们可以找到核心模块的源代码,比如文件管理fs模块的rename()方法

image.png

可以看到核心模块的代码也是使用JavaScript来开发的,通过JavaScript来调用C++编写的原生模块来实现对操作系统的操作。

欢迎我的公众号【小帅的编程笔记】,让自己和他人都能有所收获!