Node.js 的基本概念[翻译]

458 阅读5分钟

6ece4aa4-57a4-4f84-8c41-293f77d07ef1.png

作者: 云峰 github: github.com/ihtml5

原文链接

🔶简介

想象一个 Web 应用程序每秒向服务器发送数百个请求,该服务器每次只处理一个请求,然后再转移到另一个请求。您可能会遇到一些性能问题,并为您的用户提供糟糕的体验。

考虑到这一背景,Node.js 是由 Web 开发人员 Ryan Dahl 于 2009 年创建的,在他使用同步编程和多线程服务器端平台开发具有密集输入和输出流的功能时遇到了一些难题。

因此,Node.js 是一种为解决特定问题而构建的技术:处理密集的异步输入和输出事件。而且,哪种编程语言具有这种能力?答案是:JavaScript。

因此,在本文中,我将分享我对这项技术的知识、经验和研究,目的是提供 Node.js 的基本概念,并帮助您理解为什么它在现代服务器端世界中如此重要。

🔶 1 什么是Node.js?

简单来说,Node.js 是一个基于开源 JavaScript 的服务器端编程平台,建立在 Chrome 的 V8 JavaScript 引擎上,这意味着在 Web 浏览器中编译 JavaScript 的引擎与运行 Node.js 的引擎是同一个引擎。核心,这就是它如此之快的原因,尤其是对于 Web 应用程序。

🔶 2 为什么是 Node.js?

Node.js 是一个极其强大的服务器端平台,用于开发现代、可靠和可扩展的 Web 应用程序,受到 Netflix、Uber、LinkedIn 和 PayPal 等全球公司的信赖。

由于其单线程特性与在后台运行的多线程平台相结合,它的事件驱动架构非常适合具有密集 I/O(输入和输出)的应用程序,使其能够以更少的硬件服务更多的客户端,这意味着更高的性能更少的成本。

除此之外,该平台还为开发人员提供了其他惊人的功能。

Node.js 的优势

🔸 2.1 非阻塞 I/O

非阻塞方法接收输入并异步返回输出。换句话说,它使服务器可以在后台处理响应的同时,在不阻塞应用程序的情况下接收许多请求

🔸 2.2 单线程

Node.js 可以同时处理多个事件,其单线程特性将异步操作委托给多线程平台,这意味着只有一个线程能够处理输入和输出

此功能通过消耗低内存和基础设施容量来处理大量请求,使其轻量级、可扩展和高效。

🔸 2.3 事件驱动

Node.js 是一种事件驱动技术,也就是说这个服务端平台的控制流是由事件的发生来驱动的。因此,在 Node 应用程序启动的那一刻,一个名为 Event Loop 的事件侦听器开始等待事件,并且在应用程序关闭之前不会停止。

换句话说,这就像有一个非常高效的服务员在餐厅关门之前等待订单。

Node.js 事件驱动

🔸 2.4 节点包管理器

Node Package Manager 它是世界上最大的免费开源功能库,可以轻松导入并在任何 Node 应用程序中使用。所有这一切意味着,无论应用程序需要何种工具,都可以在节点包管理器中找到。

🔸 2.5 无缓冲

Node.js 应用程序从不缓冲数据,这大大减少了上传文件(例如视频或音频)的处理时间。换句话说,它只是以块的形式输出数据,这意味着,例如,用户可以不受任何干扰地观看视频。

🔸 2.6 可扩展

可扩展性是 Node 的一个核心特性,因为它的架构在单线程上运行,结合多线程平台,允许它接收数千个同时发生的事件,因此能够以低基础设施异步处理大量请求

🔶 3 Node.js 架构

Node.js 架构有 3 个关键元素,它们像事件处理工厂一样协同工作。所以,为了更容易理解这些元素是如何相互交互的,我将给出一个在 Node.js 中开发的 REST API 的例子。

假设一个客户端向这个应用程序发送了几个请求:

🔸 3.1 事件队列

1- 一旦这些请求到达应用程序,它们就会进入事件队列,这是一个队列,在队列中,应用程序中发生的所有事件都排在最前面,然后等待发送到称为 Event 的主线程中进行处理环形。

🔸 3.2 事件循环

2- 当一个请求(阻塞操作)进入事件循环,它是一个单线程平台,在其核心运行 V8 引擎来编译 JavaScript,它被委托给线程池平台在后台处理。因此,通过这种架构流程,主线程可以再次用于处理其他事件。

🔸 3.3 线程池

3- 在线程池中,这是一个多线程平台,它运行一个名为 libuv 的库,其核心是 C++ ,请求(阻塞操作)在后台异步处理,直到它完成并准备好返回。

Node.js 架构

🔶结论

我希望这篇简短的文章不仅可以帮助您更好地理解 Node.js 的工作原理,还可以帮助您更好地理解为什么它是一个快速发展的平台,并且如今被如此多的公司和初创公司使用。

在现代和超级互联的世界中,一项能够以低基础设施快速扩展的技术肯定是一个值得关注的重要参与者。