Maison > interface Web > js tutoriel > Modules complémentaires C sans Node.js

Modules complémentaires C sans Node.js

Linda Hamilton
Libérer: 2024-12-04 19:59:15
original
536 Les gens l'ont consulté

C   Addons no Node.js

Que sont les modules complémentaires C ?

Ils constituent un moyen d'augmenter les performances et les fonctionnalités de votre code Node.js, en étendant le code C directement dans l'environnement JavaScript. En d'autres termes, un module complémentaire C est un module que vous créez pour Node.js qui vous permet d'écrire des fonctions et des bibliothèques C et de les utiliser dans votre code JavaScript.

Ils constituent essentiellement un pont entre JavaScript et C, ce qui signifie que Node.js peut exécuter des codes plus lourds sans perdre en flexibilité et, surtout, en simplicité.

Raisons d'utiliser les modules complémentaires C dans Node.js

  • Perfomance : C est un langage compilé, il présente généralement des performances supérieures par rapport à JavaScript, qui est un langage interprété. En plus de permettre une utilisation plus contrôlée de l'allocation et de la désallocation de mémoire.
  • Bibliothèques et code existant : De nombreux systèmes et bibliothèques existants ont été développés en C . Les modules complémentaires vous permettent d'intégrer efficacement ces bibliothèques dans votre environnement, facilitant la réutilisation des bases de code existantes et réduisant les efforts de réécriture. En plus d'avoir accès à un panel de bibliothèques qui ne fonctionnent pas directement en JavaScript
  • Niveau système : Certaines fonctionnalités au niveau système, qui ne sont pas accessibles par JavaScript, peuvent être utilisées à l'aide d'addons, permettant l'utilisation de fonctionnalités spécifiques chaque fois que nécessaire.

Comment fonctionnent les modules complémentaires C ?

  • Compilation : Un module complémentaire doit être compilé avant de pouvoir être utilisé. Pour ce faire, vous devez configurer node-gyp dans votre référentiel. Cet outil compile le code C dans un module "natif" que Node.js peut exécuter.
  • Liaisons : Pour créer un "pont" entre JavaScript et C, vous pouvez utiliser les packages N-API, NAN et/ou directement via V8, libuv et les bibliothèques alternatives Node.js.
  • Chargement des fonctionnalités : Une fois le code compilé et qu'un "pont" existe entre les deux mondes, les fonctions créées peuvent être appelées via require(), les rendant ainsi accessibles à JavaScript

Exemple pratique

Tout d'abord, créons un répertoire pour notre code

 mkdir addon
 cd addon
Copier après la connexion
Copier après la connexion

Ensuite, créons, initialisons notre package.json et téléchargeons la lib node-gyp (assurez-vous d'installer correctement les dépendances sur votre OS)

npm init -y
npm i node-gyp
Copier après la connexion
Copier après la connexion

Au sein de notre package.json, nous allons créer un script de build pour notre module complémentaire.

 mkdir addon
 cd addon
Copier après la connexion
Copier après la connexion

Maintenant, nous allons créer notre addon en C et configurer notre liaison.

npm init -y
npm i node-gyp
Copier après la connexion
Copier après la connexion
 "scripts": {
    "build": "node-gyp configure build"
  }
Copier après la connexion

Prêt, une fois ces deux fichiers créés, nous pouvons exécuter notre script de build (npm run build) et attendre l'ensemble du processus pour pouvoir profiter de notre addon. Ensuite, nous allons créer un nouveau fichier et exécuter la commande node index.js
dans le terminal

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

Copier après la connexion

Considérations finales

Les modules complémentaires sont des ressources puissantes lorsque l'objectif est d'optimiser les performances des opérations critiques ou de s'intégrer au code natif. Bien qu’ils nécessitent une connaissance du C et augmentent la complexité du projet, ils peuvent constituer la solution parfaite dans les situations où le JavaScript pur n’offre pas la solution idéale. Grâce à des outils comme N-API, le développement d'addons est devenu plus accessible et stable, permettant à vos projets de combiner la praticité de JavaScript avec l'efficacité du C .

Lien du référentiel : cpp-addon-nodejs
Références : Node.js

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal