
Node.js是JavaScript运行时。 这是什么意思,如何运作?
Node.js环境包含运行用JavaScript编写的程序所需的一切。

以前,您只能在浏览器中运行JavaScript,但是一旦开发人员对其进行了扩展,现在您就可以在计算机上将JS作为独立的应用程序运行。 于是就有了Node.js。
现在,您可以使用JavaScript进行更多的工作,而不仅仅是交互式网站。
JavaScript现在具有执行其他脚本编程语言(例如Python)可以执行的功能的能力。
基于浏览器的JavaScript和Node.js均在V8运行时中运行。 该引擎使用您的JS代码,并将其转换为更快的机器代码。 机器代码是计算机可以运行的低级代码,而无需先对其进行解释。
为什么选择Node.js?
这是官方Node.js网站上给出的正式定义:
-Node.js-基于Chrome的JavaScript V8引擎的JavaScript运行时。
-Node.js使用事件驱动,无阻塞的I / O模型,从而使其变得简单高效。
-Node.js软件包生态系统npm是世界上最大的开源库生态系统。
我们已经讨论了该定义的第一行:“ Node.js是基于Chrome的JavaScript V8引擎的JavaScript运行时。” 现在让我们看看其他两行,以便我们了解为什么Node.js如此受欢迎。
I / O代表输入/输出。 它可以是任何东西:从读取/写入本地文件到API中的HTTP请求。 I / O需要时间,因此会阻塞其他功能。
考虑一种情况,在这种情况下,我们从后端请求user1和user2,然后将它们打印在屏幕/控制台中。 对该请求的响应需要时间,但是两个用户数据请求都可以独立且同时执行。

阻止输入输出
在锁定方法中,只有在屏幕上打印出user1数据后才触发user2数据请求。
如果是Web服务器,则需要为每个新用户启动一个新线程。 但是JavaScript是单线程的(但是它具有单线程事件循环,稍后我们将讨论)。 因此,这将使JavaScript不太适合多线程任务。
非阻塞I / O
另一方面,使用非阻塞请求,您可以启动对user2的数据请求,而无需等待对user1的请求的响应。 您可以并行发起两个请求。
非阻塞I / O消除了对多线程的需求,因为服务器可以一次处理多个请求。
JavaScript事件循环
如果您有26分钟的时间,请查看出色的Node Event Loop视频说明:
如果没有,下面是有关事件循环如何在JavaScript中工作的分步说明:

1.将main()发送到调用堆栈。
2.将console.log()发送到调用堆栈。 它立即启动并出现。
3.将setTimeout(2000)发送到堆栈。 setTimeout(2000)是Node API。 当我们调用它时,我们注册一个回调事件对。 该事件将等待2,000毫秒,然后调用回调。
4.注册后,setTimeout(2000)出现在调用堆栈中。
5.现在,第二个setTimeout(0)以相同的方式注册。 现在,我们有两个等待执行的Node API。
6.等待0秒钟后,setTimeout(0)移至回调队列,并且setTimeout(2000)发生相同的情况。
7.在回调执行队列中,函数等待调用堆栈为空,因为一次只能执行一个函数。 这提供了一个事件循环。
8.调用最后一个console.log(),并从调用堆栈中调用main()。
9.事件循环发现调用堆栈为空,但回调队列不是。 因此,它将回调(按顺序)移动到调用堆栈以执行。
Npm

这些是社区构建的库。 他们将解决最常见的问题。 npm(节点程序包管理器)包含可以在应用程序中使用的程序包,以使您的开发更快,更高效。
需要
需要具有三个功能:
例如,从文件系统或HTTP从Node.js API加载与Node.js一起提供的模块。
加载从npm安装的第三方库,例如Express和Mongoose。
允许您创建自己的文件并将项目划分为模块。
Require是一个函数,它接受路径参数并返回module.exports。
节点模块
节点模块是可重用的代码块,其存在不会偶然影响其他代码。
您可以编写自己的模块,并在各种应用程序中使用它们。 Node.js具有一组内置模块,您无需特殊安装即可使用它们。
V8使用C ++加速JavaScript
V8是用C ++编写的开源引擎。
JavaScript-> V8(C ++)->机器代码
V8实现了ECMA-262中指定的ECMAScript。 ECMAScript由Ecma International创建,以标准化JavaScript。
V8可以自主运行,也可以集成到任何C ++应用程序中。 因此,您可以编写自己的C ++代码,并将其用于JavaScript。
大事记
事件是应用程序中发生的所有事情以及我们可以回答的事情。
节点具有两种类型的事件:
- 系统事件:libuv库中的C ++内核。 (例如,结束读取文件)。
- 自定义事件:JavaScript核心。
在Node.js中编写Hello World
为什么不呢
创建app.js文件,并添加以下内容。
console.log ("Hello World!");
打开Node终端,将目录更改为保存文件的文件夹,然后运行nodeapp.js。
瞧-您刚刚在Node.js中写了“ Hello World”。
您可以使用大量资源来学习有关Node.js的更多信息,包括
freeCodeCamp.org。