当前位置: 首页 > Web前端 > HTML5

Node.js究竟是什么?

时间:2023-04-06 00:05:03 HTML5

Node.js到底是什么?Node.js是一个JavaScript运行时环境。听起来不错,但这意味着什么?这是如何运作的?Node运行时环境包含执行用JavaScript编写的程序所需的一切。自从JavaScript的原始开发人员将其从只能在浏览器中运行的东西扩展为可以作为独立应用程序在机器上运行的东西以来,Node.js就已经存在了。(译者注:一般的想法是,JavaScript不仅可以在浏览器中运行,还可以作为一个独立的应用程序在机器上运行)现在,你可以使用JavaScript做的不仅仅是让网站具有交互性。JavaScript现在有能力做Python等其他脚本语言可以做的事情。浏览器JavaScript和Node.js都运行在V8JavaScript运行时引擎上。该引擎会将您的JavaScript代码转换为更快的机器代码。机器代码是计算机无需先解释即可运行的低级代码。为什么选择Node.js?这是Node.js官方网站上给出的正式定义:Node.js?是构建在Chrome的V8JavaScript引擎之上的JavaScript运行时。Node.js使用事件驱动、非阻塞I/O模型,使其轻量且高效。Node.js的包生态系统npm是世界上最大的开源库生态系统。我们已经讨论过这个定义的第一行:“Node.js?是一个构建在Chrome的V8JavaScript引擎之上的JavaScript运行时。”现在让我们看看另外两行,这样我们就可以理解为什么Node.js如此受欢迎。I/O指的是输入/输出。它可以是从读取/写入本地文件到向API发出HTTP请求的任何内容。I/O需要时间,因此会阻塞其他功能。考虑一个场景,我们需要一个后台数据库来获取user1和user2的详细信息,然后将它们打印在屏幕/控制台上。对此请求的响应需要时间,但两个用户数据请求可以独立且同时执行。阻塞I/O在阻塞方法中,用户2的数据请求直到用户1的数据被打印到屏幕上才开始。如果这是一个Web服务器,我们将不得不为每个新用户启动一个新线程。但是JavaScript是单线程的(不是真的,但它有一个单线程的事件循环,我们稍后会谈到)。所以这会使JavaScript不太适合多线程任务。这就是需要非阻塞部分的地方。非阻塞I/O另一方面,使用非阻塞请求,您可以为user2发起数据请求,而无需等待对user1请求的响应。您可以并行发出两个请求。这种非阻塞I/O消除了对多线程的需求,因为服务器可以同时处理多个请求。JavaScript事件循环如果您有26分钟的时间,请观看这??个解释Node事件循环的优秀视频:如果您时间不够,这里有一个关于JavaScript事件循环如何工作的快速分步说明。将main()推入调用堆栈。将console.log()推送到调用堆栈。然后马上运行,就弹出来了。将setTimeout(2000)压入堆栈。setTimeout(2000)是一个节点API。当我们调用它时,我们注册事件回调对。该事件将等待2000毫秒,然后回调该函数。在API中注册后,setTimeout(2000)从调用堆栈弹出。现在第二个setTimeout(0)以相同的方式注册。我们现在有两个等待执行的NodeAPI。等待0秒后,setTimeout(0)被移到回调队列中,setTimeout(2000)也是如此。在回调队列中,函数等待调用堆栈为空,因为一次只能执行一条语句。这是由事件循环处理的。最后一个console.log()运行,并且main()从调用堆栈中弹出。事件循环看到调用栈为空,回调队列不为空。因此它将回调(以先进先出的顺序)向上移动到调用堆栈以供执行。npm这些是由很棒的社区构建的库,可以解决您的大部分一般性问题。npm(Node包管理器)包含可在您的应用程序中使用的包,使您的开发更快、更高效。这些是由很棒的社区构建的库,它将解决最常见的问题。npm(节点包管理器)包含可在您的应用程序中使用的包,使您的开发更快、更高效。RequireRequire做以下三件事:它加载与Node.js捆绑在一起的模块,例如来自Node.jsAPI的文件系统和HTTP。它加载从npm安装的第三方库,例如Express和Mongoose。它可能需要您自己的文件和模块化项目。Require是一个接受一个参数“path”并返回module.exports的函数。节点模块是可重用的代码块,其存在不会意外影响其他代码。您可以编写自己的模块并在各种应用程序中使用它们。Node.js有一组内置模块,无需进一步安装即可使用。V8通过利用C++增强JavaScript性能V8是一个用C++编写的开源运行时引擎。JavaScript->V8(C++)->MachineCodeV8根据ECMA-262实现了一个名为ECMAScript的脚本。ECMAScript由EcmaInternational创建,用于标准化JavaScript。V8可以独立运行,也可以嵌入任何C++应用程序中。它具有允许您编写自己的C++代码以使其可用于JavaScript的挂钩。这基本上允许您通过将V8嵌入到您的C++代码中来向JavaScript添加功能,以便您的C++代码比ECMAScript标准指定的其他方式理解更多。事件在我们的应用程序中发生了一些我们可以响应的事情。节点中有两种类型的事件。系统事件:来自libuv库的C++核心。(例如,读完一个文件)。自定义事件:JavaScript核心。在Node.js中编写HelloWorld我们必须这样做,不是吗?制作文件app.js并添加以下内容。console.log("你好,世界!");打开节点终端,将目录更改为保存文件的文件夹并运行nodeapp.js。Bam-你刚刚用Node.js编写了HelloWorld。您可以使用freeCodeCamp.org访问大量资源以了解有关Node.js的更多信息。