为什么我们需要 Node.js 中的 C++ 插件?
在本文中,我们将了解为什么我们需要 NodeJS 中的 C++ 插件。
- Node.js 插件是动态链接的共享对象,用 C++ 编写。
- 它可以使用 require()函数加载到 Node.js 中,也可以像普通 Node.js 模块一样使用。
- 它主要用于在 Node.js 中运行的 JavaScript 和 C/C++ 库之间提供接口。
为什么我们需要 C++ 插件?
- 它提供了进行密集、并行和高精度计算的机会。
- 它还提供了在 NodeJS 中使用 C++ 库的机会。
- 我们可以集成一个用 C/C++ 编写的第三方库,直接在 NodeJS 中使用。
- 在较大的值或计算上,C++ 的性能要好得多。
先决条件:
- Node基础知识
- 已安装 Node.js(版本 12+)。
- 已安装 Npm(版本 6+)。
模块安装:使用以下命令安装所需的模块。
npm i -g node-gyp
文件夹结构:它看起来像这样。
现在使用以下代码创建 binding.gyp、calculate.cc 文件。
文件名:binding.gyp
{
"targets": [
{
"target_name": "calculate", // Name of C++ Addons.
"sources": [ "calculate.cc" ] // Source of C++ file.
}
]
}
calculate.cc
#include
#include
namespace calculate {
using v8:: FunctionCallbackInfo;
using v8 :: Isolate;
using v8 :: Local;
using v8 :: Object;
using v8 :: Number;
using v8 :: Value;
// C++ add function.
void Sum(const FunctionCallbackInfo&args)
{
Isolate* isolate = args.GetIsolate();
int i;
double x = 3.141526, y = 2.718;
for(i=0; i<1000000000; i++)
{
x += y;
}
auto total = Number::New(isolate,x);
args.GetReturnValue().Set(total);
}
// Exports our method
void Initialize(Local
app.js
// Require addons
const calculate = require('./build/Release/calculate');
// Javascript add function.
function calc() {
// Two variables.
let i, x = 3.141526, y = 2.718;
for (i = 0; i < 1000000000; i++) {
x += y;
}
let total = x;
return total;
}
console.time('c++');
calculate.calc();
console.timeEnd('c++');
console.time('js');
calc();
console.timeEnd('js');
应用程序.js
// Require addons
const calculate = require('./build/Release/calculate');
// Javascript add function.
function calc() {
// Two variables.
let i, x = 3.141526, y = 2.718;
for (i = 0; i < 1000000000; i++) {
x += y;
}
let total = x;
return total;
}
console.time('c++');
calculate.calc();
console.timeEnd('c++');
console.time('js');
calc();
console.timeEnd('js');
运行应用程序的步骤:要构建和配置,请运行以下命令。
node-gyp configure build
node app.js
输出:
c++: 1.184s
js: 1.207s