The*_*enx 14 node.js node.js-addon
我正在寻找一个使用带有C ++的node js插件的项目。我遇到了两个我可以使用的抽象库NAN和N-API。但是,我无法决定应该使用哪一个。我无法在这两个库之间找到适当的比较。
两者的优缺点是什么?如何在它们之间进行选择?
到目前为止,我发现NAN有更多关于异步调用的在线教程/文章。但是N-API受到Node的正式支持(虽然不确定,但它是在NAN之后创建的,是更好的选择)。
nat*_*evw 14
我的理解是:
所述的N- API加入到V8.0.0芯的node.js接口。引用该文档,“这是为了使Addons与基础JavaScript引擎的更改保持隔离……” 它还围绕缓冲区和异步工作(这应有助于避免在其“ ABI的影响”一节中提到的一些潜在的不稳定API)提供其他包装器。
nan(Node的本机抽象)确实较旧,因此还支持旧版本的node.js-回到node.js 0.8!尽管作者在2017年声称:
正如我在其他地方提到的那样,N-API并不意味着直接用于任何事情。这个概念从何而来?它是(有效内部的)低层基础结构层,旨在提供ABI稳定性。顶部将有另一层。
…我在官方的Node.js附加文档中没有看到太多警告。也许这另一条评论更有见地:
是的,您仍应将NAN用于生产。它涵盖了Node.js的每个相关版本。另请注意,N-API不适用于最终用户。您最终应该使用https://github.com/nodejs/node-addon-api。
再一次,那是在2017年6月,当时是nan的维护者。似乎node-addon-api在此期间已经成熟并保持活动状态。实际上,我在-addon-api仓库中发现了一条评论,该评论目前只有一个月的历史:
…目标的一部分是使从nan过渡变得容易。
所以我认为答案是:
nan如果您想要成熟并且向后兼容的东西,请使用node-addon-api,如果你想要的东西向前,寻找在C ++N-API如果您愿意使用C并处理可能的低级问题,请使用您应该为新的 C++ 代码使用node-addon-API模块(或为 C 代码使用 N-API)。所有受支持的(非 EOL)Node.js 版本都支持它,并且它使维护和分发本机附加组件变得更加容易:而使用 NAN 的附加组件需要为每个(Node.js 的主要版本)重建模块NODE_MODULE_VERSION,而使用 N 的模块-API/Node-Addon-API 向前兼容:
N-API 的给定版本n将在其发布的 Node.js 主要版本以及 Node.js 的所有后续版本(包括后续主要版本)中提供。
这里有一个有点令人困惑的兼容性矩阵。例如,N-API 版本 3 与 Node.js v8.11.2+、v9.11.0+ 以及所有更高版本的主要版本 (v10+) 兼容。
最重要的是,node-addon-API 修复了 NAN 的许多烦人的部分(比如 Buffers 总是而char*不是,比如说uint8_t*)。
node-addon-API/N-API 插件也与 Bun 和 Deno 运行时兼容。
当然,NAN 仍然有效,并且在线有更多学习资源,但 node-addon-API 是前进的方向。
| 归档时间: |
|
| 查看次数: |
1596 次 |
| 最近记录: |