【发布时间】:2019-10-05 22:04:30
【问题描述】:
所以,也许这个问题太菜鸟和新手,但我仍然不知道为什么 LIBUV 在 Node JS 架构中占有一席之地?以上就是我对 NodeJs 架构的理解。
- Node Js 基于 V8 构建
- V8 能够运行使用 EcmaScript 标准编写的代码。
- V8 是用 C++ 编写的。
- 因此,如果您想提供任何新功能,我们可以将 V8 嵌入到我们的 C++ 项目中,并使用 C++ 中的新嵌入式 V8 附加新代码。
现在有疑问了,
- 由于 V8 支持 EcmaScript Javascript,这意味着它能够运行使用 EcmaScript 标准编写的回调。
- 所以我们可以在 C++ 中添加用于文件系统访问、HTTP 服务器和 DB 访问的代码,因为 Java 是用 C++ 编写的(如果我错了,请纠正我)并且 Java 有提供该功能的库(头文件)做同样的事情的能力。
- 现在,如果我们可以在 C++ 中添加此功能,那么 Libuv 的位置会在 NodeJs 架构中占据什么位置。
提前致谢 快乐编码:)
【问题讨论】:
-
“我们可以在 C++ 中为 [...] 添加代码” - 或者它可以继续使用 libuv。改变有什么好处?目前尚不清楚您认为“C++”具有哪些符合 libuv 目的的“功能”。有许多库可以抽象出特定于平台的操作……但即使 JVM 实现是用 C++ 编写的(我不知道),所使用的代码也可能不适用于 NodeJS,甚至不可用。
-
那么,V8 运行的是 JS 吗?对(如果我错了,请纠正我),这意味着它可以处理回调,现在为什么不在 V8(在 Cpp 中)中添加代码并完成,libuv 是否提供了任何额外的东西,或者它只是提供相同的和 Node js用它而不是重新发明轮子?
-
libuv 是由 Node.js 发明的 ;-) 所以 libuv 只是 Node.js 很好的打包方式来执行您的建议,即使用 C++ 在 V8 之上提供附加功能。当然,他们可以做不同的事情,但是将可重用的功能分解到一个单独的库中,以便其他项目可以重用它通常是一种很好的做法。
-
好的,现在我明白为什么他们将 Libuv 添加到整体架构中了。无论如何感谢您的信息。
标签: javascript c++ node.js v8 libuv