《nodejs跨栏》nodejs简介
nodejs是什么?
nodejs简介
官方的介绍如下:
1、Nodejs是一个基于Chrome V8引擎的JavaScript运行环境。
2、Nodejs是一个使用了事件驱动、非阻塞式I/O的模型,使其轻量有高效。
3、Nodejs的包管理器是npm,是全球最大的开源库生态系统。
翻译成通俗语言就是:
1、Nodejs是一个能运行JavaScript的运行环境,类似于java是需要运行在JVM上,至于什么Chrome和V8,跟我们关系不大,都不用过分关注。
2、Nodejs很厉害。
3、Nodejs用的包管理器是npm,npm很厉害。
js引擎是什么?
游览器能解析javascript、html、css、img等,其中js就是由js引擎解析的,说是引擎,通俗的讲就是能跑js的运行环境,它能解析javascript语言去做一些操作。
js只能在游览器吗?
作为开发人员,我们知道javascript主要是对BOM(游览器对象)和DOM操作,但是javascript仅限于此吗?
由此引出,任何一门编程语言,他的能力不是由语言本身决定的,而是由他的运行环境决定的。
比如,java,他既是一门语言,也是一个运行环境(JVM等)
对于javascript,他的语言是ecmascript,以前的运行环境是游览器,游览器限制它只能操作BOM和DOM,它就只能如此。但是,现在出现了一个新的运行环境,能够让它有更多操作,这个运行环境就是nodejs,它能让js实现以前做不到的事情,比如说文件操作、网络操作、系统操作等。
nodejs模块化
模块化思想由来
在javascript诞生之初,更多的是作为浏览器端的脚本语言而存在,很少会有人将它看作是一门真正的编程语言。随着各种前端库和框架的问世,javascript也被不断的封装,抽象,但始终缺少构建大型应用的基本特征:模块。java有类文件,c++有include,python有from...import,javascript却只能在html文件中通过script标签来进行引用,js的这一缺陷大大限制了其发展。
为了填补javascript没有模块系统,缺少标准库这些空白,社区专门制定了应用于javascript的模块化标准--CommonJS。CommonJS的问世大大增强了js的应用范围,NodeJS基本沿用了这一规范,但也进行了部分取舍,增加了些许自身的特性。
模块分类
nodejs分为两类,
一类是nodejs内部的模块,例如:http、fs、stream等,这些模块又被称为核心模块,这些模块在编译时会被编译成二进制文件,在启动时直接加载进内存,所以这些模块加载很快。
另一类是用户自定义组件,这些模块是运行时动态加载的,需要经历路径分析、文件定位、编译执行等过程,所以加载慢。
包管理器
由上述可知,Nodejs借用了CommenJs的模块化能力,但是,个人和公司开发大量的第三方模块发布在互联网上,如何管理互联网上这些大量模块?像是java有maven和gradle、python有pip、php有compose,nodejs是不是应该也需要一个第三方包管理器呢?需要!那就是npm。
内部模块
nodejs主要作用是服务器开发平台,它能提供web服务器的一些基本功能,这些功能依托的就是内部模块,或者叫核心模块。如下:
- http模块:处理http请求。
- fs模块:对目录和文件进行操作。
- process模块,实现进程操作。
此外,还有很多核心模块,比如:path、child_process、url等等。
优点
相较于java、php等这些早期服务器语言,为什么要使用nodejs呢?优势如下
1、前端开发人员都是使用js,所以用js开发服务器,对于前端开发人员来说,好上手。(开玩笑说说,等于公司招一个人能干两份活,公司肯定大力推广)
2、nodejs的单线程模式,使得不用像其他服务器语言一样进行加锁、解锁等操作。
3、nodejs是非阻塞I/O和事件驱动,能防止线程阻塞。
4、nodejs是服务器开发的后起之秀,自然会吸引更多目光,像大数据、元宇宙这些概念一样,会有炒作的热度。