首页 > web前端 > js教程 > C 插件 无 Node.js

C 插件 无 Node.js

Linda Hamilton
发布: 2024-12-04 19:59:15
原创
535 人浏览过

C   Addons no Node.js

什么是 C 插件?

它们是提高 Node.js 代码性能和功能的一种方法,可以直接在 JavaScript 环境中扩展 C 代码。换句话说,C 插件是您为 Node.js 创建的模块,它允许您编写 C 函数和库并在 JavaScript 代码中使用它们。

它们基本上是 JavaScript 和 C 之间的桥梁,这意味着 Node.js 可以运行较重的代码,而不会失去灵活性,最重要的是,它的简单性。

在 Node.js 中使用 C 插件的原因

  • 性能: C 是一种编译语言,与解释型语言 JavaScript 相比,它通常表现出优越的性能。除了允许更受控地使用内存分配和释放之外。
  • 库和遗留代码:许多遗留系统和库都是用 C 开发的。插件允许您有效地将这些库集成到您的环境中,促进现有代码库的重用并减少重写工作。除了可以访问一系列不能直接在 JavaScript 中运行的库
  • 系统级:某些无法通过JavaScript访问的系统级功能可以在插件的帮助下使用,从而允许在必要时使用特定功能。

C 插件如何工作?

  • 编译:插件需要先编译才能使用。为此,您需要在存储库中配置 node-gyp。该工具将 C 代码编译为 Node.js 可以运行的“本机”模块。
  • 绑定:要在 JavaScript 和 C 之间创建“桥梁”,您可以使用 N-API、NAN 包和/或直接通过 V8、libuv 和替代 Node.js 库。
  • 加载功能:一旦代码被编译并且两个世界之间存在“桥梁”,创建的函数就可以通过require()调用,从而使它们可以被JavaScript访问

实际例子

首先,让我们为我们的代码创建一个目录

 mkdir addon
 cd addon
登录后复制
登录后复制

接下来,让我们创建初始化 package.json 并下载 lib node-gyp (确保在您的操作系统上正确安装依赖项)

npm init -y
npm i node-gyp
登录后复制
登录后复制

在我们的package.json中,我们将为我们的插件创建一个构建脚本。

 mkdir addon
 cd addon
登录后复制
登录后复制

现在,我们将在 C 中创建插件并配置我们的绑定。

npm init -y
npm i node-gyp
登录后复制
登录后复制
 "scripts": {
    "build": "node-gyp configure build"
  }
登录后复制

准备好,一旦创建了这两个文件,我们就可以运行我们的构建脚本(npm run build)并等待整个过程能够享受我们的插件。接下来,我们将创建一个新文件并在终端中执行命令 node index.js

// array_sum.cpp
#include <node.h>
namespace demo
{

  using v8::Array;
  using v8::Context;
  using v8::Exception;
  using v8::FunctionCallbackInfo;
  using v8::Isolate;
  using v8::Local;
  using v8::Number;
  using v8::Object;
  using v8::Value;

  void SumArray(const FunctionCallbackInfo<Value> &args)
  {
    Isolate *isolate = args.GetIsolate();
    Local<Context> context = isolate->GetCurrentContext();

    Local<Array> array = Local<Array>::Cast(args[0]);
    uint32_t length = array->Length();
    double sum = 0;

    for (uint32_t i = 0; i < length; ++i)
    {
      Local<Value> element = array->Get(context, i).ToLocalChecked();
      if (element->IsNumber())
      {
        sum += element->NumberValue(context).FromJust();
      }
    }

    args.GetReturnValue().Set(Number::New(isolate, sum));
  }

  void Initialize(Local<Object> exports)
  {
    NODE_SET_METHOD(exports, "sum", SumArray);
  }

  NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
}

登录后复制

最后的考虑因素

当目标是优化关键操作的性能或与本机代码集成时,插件是强大的资源。尽管它们需要 C 语言知识并增加项目复杂性,但对于纯 JavaScript 无法提供理想解决方案的情况,它们可以成为完美的解决方案。借助 N-API 等工具,插件开发变得更加易于访问和稳定,使您的项目能够将 JavaScript 的实用性与 C 的效率结合起来。

存储库链接: cpp-addon-nodejs
参考文献: Node.js

以上是C 插件 无 Node.js的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板