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