我对 Node.js 非常陌生,我似乎无法在任何地方找到有关 Node.js 绑定的定义。我在幻灯片和 Nodejs 演讲中看到过这个术语,但从未明确解释过。谁能帮我澄清这个概念?我附上了我所指的图片。
首先了解什么是“绑定”比了解什么是 Node.js 绑定更有用。
假设您正在编写一个 Web 应用程序,其中有一个 Node.js (JavaScript) 后端:
现在通常您会自己编写所有代码。但是,您知道有一个出色的排序库可以处理第 3 步(即对查询结果进行排序)。唯一的问题是该库是用系统编程语言(例如 C/C++)编写的,而您的代码是用 JavaScript 编写的。通常,您不能在代码中使用该库,因为它们采用不同的编程语言,但通过绑定,您可以。
绑定基本上是“绑定”两种不同编程语言的库,以便用一种语言编写的代码可以在另一种库编写的代码中使用。有了绑定,您就不必仅仅因为它们采用不同的语言而再次编写所有代码。绑定的另一个动机是您可以从不同编程语言的优点中受益。例如,C/C++ 比 JavaScript 快得多。为了性能目的,用 C/C++ 编写一些代码可能会有好处。
现在让我们看一下您附上的图片。 V8 引擎,根据 Google 官网介绍,是“用 C++ 编写的”。 libuv 添加了一个抽象层,提供异步 I/O 操作,用 C 编写。然而,Node.js 的核心功能,如网络、数据库查询、文件系统 I/O,是在库(或模块)中提供的如果你愿意的话)是用 JavaScript 编写的。另外,您的代码也是用 JavaScript 编写的。现在,为了使这些用不同编程语言编写的技术能够相互通信,您必须使用绑定将它们“绑定”在一起。这些绑定是 node.js 绑定。
我最近写了一篇文章,解释了Node.js 内部代码库的架构,其中我解释了绑定如何融入 Node.js!
fs.readFile()
此方法不是 javascript 的一部分。它作为 Node.js 运行时的一部分提供给 v8。所以 javascript 不知道如何从磁盘读取文件,但 C++ 知道。因此,当我们使用 JavaScript 代码和 Node.js 从磁盘读取文件时,它只是将所有这些都推迟到可以实际从磁盘读取文件并返回结果的 C++ 函数。
Javascript 在浏览器中也有绑定。例如;
document.querySelector()
不是 JavaScript 代码。它是由chrome V8引擎实现的。