Rumah > hujung hadapan web > tutorial js > C Addons no Node.js

C Addons no Node.js

Linda Hamilton
Lepaskan: 2024-12-04 19:59:15
asal
542 orang telah melayarinya

C   Addons no Node.js

Apakah C Addons?

Ia adalah cara untuk meningkatkan prestasi dan kefungsian kod Node.js anda, memanjangkan kod C terus dalam persekitaran JavaScript. Dalam erti kata lain, tambahan C ialah modul yang anda buat untuk Node.js yang membolehkan anda menulis fungsi dan perpustakaan C serta menggunakannya dalam kod JavaScript anda.

Ia pada asasnya adalah jambatan antara JavaScript dan C, yang bermaksud bahawa Node.js boleh menjalankan kod yang lebih berat tanpa kehilangan fleksibiliti dan, di atas semua, kesederhanaannya.

Sebab untuk menggunakan C Addons dalam Node.js

  • Prestasi: C ialah bahasa tersusun, ia secara amnya membentangkan prestasi unggul jika dibandingkan dengan JavaScript, yang merupakan bahasa yang ditafsirkan. Selain membenarkan penggunaan peruntukan memori dan urusan jual beli yang lebih terkawal.
  • Perpustakaan dan kod warisan: Banyak sistem dan perpustakaan warisan telah dibangunkan dalam C . Addons membolehkan anda menyepadukan perpustakaan ini dengan cekap ke dalam persekitaran anda, memudahkan penggunaan semula asas kod sedia ada dan mengurangkan usaha menulis semula. Selain mempunyai akses kepada pelbagai perpustakaan yang tidak berfungsi secara langsung dalam JavaScript
  • Tahap sistem: Ciri peringkat sistem tertentu, yang tidak boleh diakses oleh JavaScript, boleh digunakan dengan bantuan tambahan, membenarkan penggunaan fungsi tertentu apabila perlu.

Bagaimanakah C Addons berfungsi?

  • Kompilasi: Addon perlu disusun sebelum ia boleh digunakan. Untuk melakukan ini, anda perlu mempunyai nod-gyp dikonfigurasikan dalam repositori anda. Alat ini menyusun kod C ke dalam modul "asli" yang boleh dijalankan oleh Node.js.
  • Pengikatan: Untuk mencipta "jambatan" antara JavaScript dan C, anda boleh menggunakan N-API, pakej NAN dan/atau terus melalui perpustakaan V8, libuv dan Node.js alternatif .
  • Memuatkan ciri: Setelah kod disusun dan "jambatan" wujud antara dua dunia, fungsi yang dicipta boleh dipanggil melalui require(), menyebabkan ia boleh diakses oleh JavaScript

Contoh Praktikal

Pertama, mari buat direktori untuk kod kami

 mkdir addon
 cd addon
Salin selepas log masuk
Salin selepas log masuk

Seterusnya, mari buat permulaan package.json kami dan muat turun lib node-gyp (pastikan anda memasang kebergantungan pada OS anda dengan betul)

npm init -y
npm i node-gyp
Salin selepas log masuk
Salin selepas log masuk

Dalam package.json kami, kami akan mencipta skrip binaan untuk addon kami.

 mkdir addon
 cd addon
Salin selepas log masuk
Salin selepas log masuk

Sekarang, kami akan mencipta addon kami dalam C dan mengkonfigurasi pengikatan kami.

npm init -y
npm i node-gyp
Salin selepas log masuk
Salin selepas log masuk
 "scripts": {
    "build": "node-gyp configure build"
  }
Salin selepas log masuk

Sedia, setelah kedua-dua fail ini dibuat, kami boleh menjalankan skrip binaan kami (npm run build) dan tunggu sehingga keseluruhan proses dapat menikmati addon kami. Seterusnya, kami akan mencipta fail baharu dan laksanakan arahan node index.js
dalam 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)
}

Salin selepas log masuk

Pertimbangan akhir

Tambahan ialah sumber yang berkuasa apabila objektifnya adalah untuk mengoptimumkan prestasi dalam operasi kritikal atau disepadukan dengan kod asli. Walaupun mereka memerlukan pengetahuan tentang C dan meningkatkan kerumitan projek, mereka boleh menjadi penyelesaian yang sempurna untuk situasi di mana JavaScript tulen tidak menawarkan penyelesaian yang ideal. Terima kasih kepada alatan seperti N-API, pembangunan addon telah menjadi lebih mudah diakses dan stabil, membolehkan projek anda menggabungkan kepraktisan JavaScript dengan kecekapan C .

Pautan Repositori: cpp-addon-nodejs
Rujukan: Node.js

Atas ialah kandungan terperinci C Addons no Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan