在nodejs中使用本机代码的最佳方法是什么?

What is the best way to make use of native code in nodejs?

本文关键字:最佳 方法 是什么 本机代码 nodejs      更新时间:2023-10-16

我正在使用nodejs/electron开发一个应用程序,该应用程序必须处理大量数据,并用C ++编写了其中的性能关键部分。现在应用程序的大部分都已完成,我仍然不确定调用 c++ 代码的最佳方法。似乎最自然的方法是将其编译为共享库,然后从nodejs调用它,但对我来说,这个过程似乎非常复杂,因此我想将c ++代码设置为侦听端口号的独立可执行文件,然后从我的nodejs应用程序向其发送tcp请求。

那么问题来了:这会影响性能吗?这是一个糟糕的设计选择吗?

谢谢

您有以下几种选择:

  1. 将您的代码放入它自己的应用程序中,并找出一种方法来传递您希望它处理的内容(通过cmdline参数,文件,stdio,网络等(,然后通过child_process模块从node.js运行它。

  2. 使用附加 SDK 将代码放入 nodejs 附加组件中,以便可以直接从 nodejs 中调用它。

  3. 将代码编译为 Web 程序集,并直接从 nodejs 中加载/运行该 Web 程序集。 如果你以前没有听说过Web汇编,它是Javascript引擎中一个相当新的功能。 像 Rust 或 C 或 C++ 这样的语言将它们的代码编译为 Web 程序集目标。它有点像Javascript引擎可以直接运行的低级通用(非CPU特定(汇编语言,而其他类型语言(如Rust,C或C++(可以直接编译,就像它们编译为特定编译器目标的本机语言一样。 然后,JS 引擎获取该 Web 程序集并将其动态编译为本地机器语言,同时添加一些内存访问保护措施。

所以我考虑将 C++ 代码作为侦听端口号的独立可执行文件,然后从我的 Nodejs 应用程序向其发送 TCP 请求。

那就好了。

那么问题来了:这会影响性能吗?这是一个糟糕的设计选择吗?

很难知道您的性能目标是什么。 您可能不希望某些快速调用数千次的操作位于单独的服务器中,但是如果您调用它的频率低于该频率,那么它可能很好。

nodejs 附加 SDK 允许您与 Javascript 提供相当高的带宽接口,因为它与许多 nodejs 内置库的实现方式相同。 学习它是如何工作的需要更多的工作,因为如果你要在node中玩进程内.js并使用垃圾收集,你必须以某种方式做很多事情(特别是任何处理内存或将数据传入/传出Javascript的事情(。 但是,它最终是与nodejs Javascript最紧密的连接。