在nodejs中使用本机代码的最佳方法是什么?
What is the best way to make use of native code in nodejs?
我正在使用nodejs/electron开发一个应用程序,该应用程序必须处理大量数据,并用C ++编写了其中的性能关键部分。现在应用程序的大部分都已完成,我仍然不确定调用 c++ 代码的最佳方法。似乎最自然的方法是将其编译为共享库,然后从nodejs调用它,但对我来说,这个过程似乎非常复杂,因此我想将c ++代码设置为侦听端口号的独立可执行文件,然后从我的nodejs应用程序向其发送tcp请求。
那么问题来了:这会影响性能吗?这是一个糟糕的设计选择吗?
谢谢
您有以下几种选择:
-
将您的代码放入它自己的应用程序中,并找出一种方法来传递您希望它处理的内容(通过cmdline参数,文件,stdio,网络等(,然后通过child_process模块从node.js运行它。
-
使用附加 SDK 将代码放入 nodejs 附加组件中,以便可以直接从 nodejs 中调用它。
-
将代码编译为 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最紧密的连接。
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 检测win32服务创建和删除的最佳方法
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 将线程中的数据存储到全局容器的最佳方法?
- 将一系列整数放入类的最佳方法是什么?
- 在派生类中使用基类的私有成员变量的最佳方法
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 比较两个节点坐标的最佳方法是什么?
- 在nodejs中使用本机代码的最佳方法是什么?
- 将 pybind11 绑定标记为已弃用的最佳方法
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?