Heim > Web-Frontend > js-Tutorial > C-Addons ohne Node.js

C-Addons ohne Node.js

Linda Hamilton
Freigeben: 2024-12-04 19:59:15
Original
535 Leute haben es durchsucht

C   Addons no Node.js

Was sind C-Add-ons?

Sie sind eine Möglichkeit, die Leistung und Funktionalität Ihres Node.js-Codes zu steigern, indem C-Code direkt in der JavaScript-Umgebung erweitert wird. Mit anderen Worten, ein C-Add-on ist ein Modul, das Sie für Node.js erstellen und das es Ihnen ermöglicht, C-Funktionen und Bibliotheken zu schreiben und diese in Ihrem JavaScript-Code zu verwenden.

Sie sind im Grunde eine Brücke zwischen JavaScript und C, was bedeutet, dass Node.js umfangreichere Codes ausführen kann, ohne an Flexibilität und vor allem an Einfachheit einzubüßen.

Gründe für die Verwendung von C-Addons in Node.js

  • Leistung: C ist eine kompilierte Sprache und bietet im Allgemeinen eine bessere Leistung im Vergleich zu JavaScript, einer interpretierten Sprache. Darüber hinaus ermöglicht es eine kontrolliertere Nutzung der Speicherzuweisung und -freigabe.
  • Bibliotheken und Legacy-Code: Viele Legacy-Systeme und Bibliotheken wurden in C entwickelt. Mithilfe von Add-Ons können Sie diese Bibliotheken effizient in Ihre Umgebung integrieren, was die Wiederverwendung vorhandener Codebasen erleichtert und den Aufwand für das Umschreiben reduziert. Zusätzlich zum Zugriff auf eine Reihe von Bibliotheken, die nicht direkt in JavaScript funktionieren
  • Systemebene: Bestimmte Funktionen auf Systemebene, auf die JavaScript nicht zugreifen kann, können mit Hilfe von Add-ons genutzt werden, sodass bei Bedarf bestimmte Funktionen genutzt werden können.

Wie funktionieren C-Add-ons?

  • Kompilierung: Ein Add-on muss kompiliert werden, bevor es verwendet werden kann. Dazu muss Node-Gyp in Ihrem Repository konfiguriert sein. Dieses Tool kompiliert C-Code in ein „natives“ Modul, das Node.js ausführen kann.
  • Bindungen: Um eine „Brücke“ zwischen JavaScript und C zu erstellen, können Sie die N-API, NAN-Pakete und/oder direkt über V8, libuv und alternative Node.js-Bibliotheken verwenden.
  • Laden der Funktionen: Sobald der Code kompiliert ist und eine „Brücke“ zwischen den beiden Welten besteht, können die erstellten Funktionen über require() aufgerufen werden, wodurch sie für JavaScript zugänglich sind

Praxisbeispiel

Erstellen wir zunächst ein Verzeichnis für unseren Code

 mkdir addon
 cd addon
Nach dem Login kopieren
Nach dem Login kopieren

Als nächstes erstellen wir unsere package.json und laden die Bibliothek node-gyp herunter (stellen Sie sicher, dass Sie die Abhängigkeiten auf Ihrem Betriebssystem korrekt installieren)

npm init -y
npm i node-gyp
Nach dem Login kopieren
Nach dem Login kopieren

In unserem package.json erstellen wir ein Build-Skript für unser Add-on.

 mkdir addon
 cd addon
Nach dem Login kopieren
Nach dem Login kopieren

Jetzt erstellen wir unser Add-on in C und konfigurieren unsere Bindung.

npm init -y
npm i node-gyp
Nach dem Login kopieren
Nach dem Login kopieren
 "scripts": {
    "build": "node-gyp configure build"
  }
Nach dem Login kopieren

Fertig, sobald diese beiden Dateien erstellt sind, können wir unser Build-Skript ausführen (npm run build) und auf den gesamten Prozess warten, um unser Add-on nutzen zu können. Als nächstes erstellen wir eine neue Datei und führen den Befehl node index.js
im Terminal aus

// 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)
}

Nach dem Login kopieren

Abschließende Überlegungen

Add-ons sind leistungsstarke Ressourcen, wenn das Ziel darin besteht, die Leistung bei kritischen Vorgängen zu optimieren oder in nativen Code zu integrieren. Obwohl sie C-Kenntnisse erfordern und die Projektkomplexität erhöhen, können sie die perfekte Lösung für Situationen sein, in denen reines JavaScript nicht die ideale Lösung bietet. Dank Tools wie N-API ist die Add-on-Entwicklung zugänglicher und stabiler geworden, sodass Ihre Projekte die Praktikabilität von JavaScript mit der Effizienz von C kombinieren können.

Repository-Link: cpp-addon-nodejs
Referenzen: Node.js

Das obige ist der detaillierte Inhalt vonC-Addons ohne Node.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage