当前位置: 首页 > 科技观察

Node.js究竟是什么?

时间:2023-03-13 17:47:02 科技观察

Node.js是一个JavaScript运行时环境。听起来不错,但这到底是什么意思呢?它是如何工作的?Node运行时环境包含执行JavaScript程序所需的一切。如果您了解Java,它们会有点相似。当JavaScript最初仅在浏览器中运行时,它被扩展为在您的计算机上作为独立程序运行,因此出现了Node.js。现在,您可以使用JavaScript做更多事情,而不仅仅是网站上的交互性和特效。JavaScript现在可以做Python等其他脚本语言可以做的事情。Chrome浏览器中的JavaScript和Node.js都运行在V8引擎上。该引擎将您的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指的是输入/输出。它可以是从读取/写入本地文件到HTTP到API的任何内容。I/O需要时间,因此会阻塞其他功能。考虑这样一种情况,我们需要通过请求后端数据库来获取user1和user2的详细信息,然后将它们打印到屏幕或控制台上。对这个请求的响应需要时间,但是两个对用户数据的请求可以独立并发执行。阻塞式I/O(左)与非阻塞式I/O(右)阻塞式I/O在阻塞方式中,user2的数据请求直到user1的数据输出到屏幕后才发起。如果这是一个Web服务器,我们将不得不为每个新用户启动一个新线程。但是JavaScript是单线程的(其实不是,但是它有一个单线程的事件循环,这个我们后面会讲到)。所以这使得JavaScript不太适合多线程任务。这就是非阻塞的用武之地。非阻塞I/O另一方面,如果您使用非阻塞请求,您可以为user2发起数据请求,而无需先等待对user1请求的响应。您可以同时启动两个请求。这种非阻塞I/O消除了对多线程的需求,因为服务器可以同时处理多个请求。JavaScript事件循环以下是对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(Nodepackagemanager)中有很多包可以在你的程序中使用,可以让你的开发更快更高效。RequireRequire做三件事:它从Node.jsAPI加载与Node.js捆绑在一起的模块,例如文件系统和HTTP。它加载从npm安装的第三方库,例如Express和Mongoose等。它允许您需要自己的文件并模块化您的项目。Require是一个接受参数“path”并返回module.exports的函数。Node模块Node模块是一个可重用的代码块,它的存在不会意外地影响其他代码。您可以编写自己的模块并在各种程序中使用它。Node.js有一组内置模块,无需进一步安装即可使用。V8通过利用C++加速JavaScriptV8是一个用C++编写的开源运行时引擎。JavaScript=>V8(C++)=>机器代码V8实现了ECMA-262中指定的名为ECMAScript的脚本。ECMAScript由EcmaInternational创建,用于标准化JavaScript。V8可以独立运行,也可以嵌入任何C++程序中。它具有允许您编写自己的C++代码以供JavaScript使用的钩子。这实际上允许您通过将V8嵌入到您的C++代码中来向JavaScript添加功能,以便您的C++代码可以做比ECMAScript标准更多的事情。正如GregBulmash提醒我的那样,除了V8之外,还有许多不同的JavaScript引擎,例如Mozilla的SpiderMonkey、微软的Chakra等。更多内容可以在这里找到。事件事件是指我们可以对程序中发生的事情做出反应。Node中有两种类型的事件。系统事件:来自以C++实现的基于libuv库的内核。(例如读完文件)。自定义事件:JavaScript核心。要在Node.js中编写HelloWorld,请创建一个文件app.js并向其中添加以下内容。console.log("HelloWorld!");打开终端,将目录更改为保存文件的文件夹,然后运行??nodeapp.js。就这么简单,您用Node.js编写的“HelloWorld”可以正常工作。***,你可以通过网上海量的资源了解更多关于Node.js的知识。