首頁 > web前端 > js教程 > C 外掛程式 無 Node.js

C 外掛程式 無 Node.js

Linda Hamilton
發布: 2024-12-04 19:59:15
原創
534 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板