最近在研究替换 C-Lodop 的方案。
方案一:C++ addon
C++ addon 是用 C++ 编写的动态链接的共享对象。require() 函数可以将插件加载为普通的Node.js 模块。插件提供了 JavaScript 和 C/C++ 库之间的接口。
实现插件的三种方式:
实现插件的方式 | 优点 | 缺点 |
---|---|---|
Node-API | 可移植、可跨不同 Node.js 版本 | |
nan | 不用考虑 node.js 版本 | |
直接使用内部 V8、libuv 和 Node.js 库 | 实现复杂 |
Node-API(以前的 N-API)是一种用于构建本机插件的 API。
方案二:ffi-napi
ffi-napi 是一个 Node.js 模块,它提供了一个简单的方式来调用外部(本地)的 C/C++ 函数,而无需编写 C++ 插件。它使用了 Node.js 的 N-API 来实现跨版本的稳定性,并且具有良好的跨平台兼容性。
优点:不用编写 C++ 代码或者构建 C++ 插件。
缺点:安装 ffi-napi 需要 node-gyp 构建、Python、msvs。项目已不再更新,最后一次更新 2021-03-18
https://github.com/node-ffi-napi/node-ffi-napi
方案三:koffi
Koffi 是 Node.js 的一个快速且易用的 C FFI 模块。
特性:
1、低开销,高性能。
2、通过引用(指针)和值支持基元和聚合数据类型(结构和固定大小的数组)。
3、Javascript函数可以用作C回调(自1.2.0起)。
https://github.com/Koromix/rygel/
名词解释:
FFI: Foreign Function Interface
NAN: Native Abstractions for Node.js