Node JS 插件 - NAN 与 N-API? [关闭]

2023-12-29

我正在寻找一个使用 Node js 插件和 C++ 的项目。我遇到了两个可以使用的抽象库 NAN 和 N-API。但是我无法决定应该使用哪一个。我无法找到这两个库之间的正确比较。

两者的优缺点和区别是什么?他们之间如何选择?

到目前为止,我发现 NAN 有更多关于异步调用的在线教程/文章。但 N-API 得到了 Node 的正式支持(并且是在 NAN 之后创建的,作为更好的替代方案,尽管不确定。)


我的理解是这样的:

The Node-API https://nodejs.org/docs/latest-v10.x/api/addons.html#addons_n_api(以前称为 N-API)在 v8.0.0 中被添加到核心 Node.js 接口中。 “它的目的是将插件与底层 JavaScript 引擎的更改隔离开来……”引用文档。它还提供了一些其他围绕缓冲区和异步工作等内容的包装器(这应该有助于避免它们中提到的一些底层不稳定 API)ABI 稳定性的影响 https://nodejs.org/docs/latest-v10.x/api/n-api.html#n_api_implications_of_abi_stability部分)。

nan(节点的本机抽象) https://github.com/nodejs/nan#native-abstractions-for-nodejs确实较旧,因此也支持旧版本的node.js - 回到node.js 0.8!现在尽管其作者声称回到2017年 https://github.com/nodejs/nan/issues/676#issuecomment-307214546:

正如我在其他地方提到的,N-API 并不意味着可以直接用于任何用途。这个观念从何而来?它是一个(实际上是内部的)低级基础设施层,旨在提供 ABI 稳定性。上面还会有另一层。

…我在官方 Node.js 附加文档中没有看到太多关于此效果的警告。也许这另一条评论 https://github.com/nodejs/nan/issues/674#issuecomment-306960508更有洞察力一点:

是的,您仍然应该使用 NAN 进行生产。它涵盖了 Node.js 的每个相关版本。另请注意,N-API 不适用于最终用户。你最终应该使用https://github.com/nodejs/node-addon-api https://github.com/nodejs/node-addon-api.

同样,那是 2017 年 6 月由当时的 nan 维护者完成的。与此同时,node-addon-api 似乎已经成熟并保持活跃。事实上,我发现-addon-api 存储库中的评论 https://github.com/nodejs/node-addon-api/issues/439#issuecomment-459468329目前只有一个月大:

…目标的一部分是让从 nan 的过渡变得容易。

所以我认为答案是:

  • use nan https://github.com/nodejs/nan如果您想要成熟且向后兼容的东西
  • use node-addon-api https://github.com/nodejs/node-addon-api如果您想要 C++ 中的前瞻性内容
  • use Node-API/N-API如果您习惯使用 C 语言工作并处理可能的较低级别的问题
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node JS 插件 - NAN 与 N-API? [关闭] 的相关文章

随机推荐

  • 将列添加到稀疏矩阵

    当我执行以下代码时 我得到一个稀疏矩阵 import numpy as np from scipy sparse import csr matrix row np array 0 0 1 2 2 2 col np array 0 2 2 0
  • 实体框架是否与 SQL Server 绑定?

    如果我想连接到 Oracle MySQL 甚至 MS Access 怎么办 不 它使用 ADO Net 提供程序 模型插入数据库提供程序以提供对任何第三方数据库的访问 可用列表第三方 EF 提供商在这里 http msdn microsof
  • 进入前台时的 UIRefreshControl 错误

    当我使用时我注意到一个小错误 但真的很烦人 UIRefreshControl在我的视图控制器中 当应用程序从后台返回时UIRefreshControl已经加载 看起来像这样 正如你所看到的 我使用了一个自定义导航控制器 它像 Faceboo
  • 为什么 Google 云端硬盘返回“无法解析内容范围标头。”?

    这是我的简单代码 用于恢复 可能 中断的 Google Drive 上传 Using message New ByteArrayContent New Byte message Headers ContentRange New Header
  • 从左到右表达式求值

    在 C 中 是否保证表达式从左到右计算 例如 myClass GetClass if myClass null myClass Property gt 0 continue 是否存在不符合规定的语言 您实际上指的是一种称为 短路逻辑表达式
  • 如何拥有与 OnPropertyChanged 一起使用的 UserControl 的可绑定属性

    我有一个带有一些公共属性的简单用户控件 WinForms 当我使用此控件时 我想将 DataSourceUpdateMode 设置为的数据绑定到这些属性属性改变时 数据源是一个实现 INotifyPropertyChanged 的 类 我知
  • 如何使用 Django 智能选择来过滤 ManyToManyField?

    class Course models Model course code models CharField max length 100 unique True title models CharField max length 200
  • 插入数据库时​​对密码进行哈希加密

    我正在为学校做一个应用程序 在将密码插入我的用户数据库时需要加密密码的帮助 我正在使用 C 编程语言进行编程 并且使用 MS server 2008 R2 来操作我的数据库 我正在考虑进行哈希加密 如果有人帮助我 我会很高兴 这是我将数据插
  • 查找 System.AccessViolationException 的原因

    我们的应用程序遇到了奇怪的致命 System AccessViolationException 当我们配置 AppDomain CurrentDomain UnhandledException 事件来记录异常时 我们会看到这些 Except
  • 这个 PHP 代码安全吗?

    只是一个简单的问题 以下 PHP 代码安全吗 还有什么你认为我可以或应该补充的吗 post GET post if is numeric post post mysql real escape string post else die NA
  • C# 将一个字符串的一部分复制到另一个字符串

    我正在尝试将文本框的部分文本复制到另一个字符串 例如 如果我的文本框包含 10 个字符 我想将字符 3 到字符 7 复制到另一个名为 TEST 的字符串 我们该怎么做呢 when textbox contains ABCDEFGHIJ th
  • 从 R 中的一系列情节创建电影 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有没有一种简单的方法可以通过在 R 中将多个情节拼接在一起来创建 电影 这是我使用 R 帮助找到的一种方法 要创建单独的图像帧 jpe
  • 写入 log4net FileAppender 时存在多线程性能问题

    TickZoom 是一款非常高性能的应用程序 它使用自己的并行化库和多个操作系统线程来平滑地利用多核计算机 该应用程序遇到了瓶颈 用户需要从单独的操作系统线程将信息写入 LogAppender FileAppender 使用 Minimal
  • hide() 单选按钮*和*它在 jquery 中的文本标签

    我正在回顾最近的一个项目 解决可访问性问题 并确保所有表单元素都有标签 将标签文本放入标签中会导致我之前编写的一些笨拙代码出现问题 基本上 如果您有一个单选按钮及其标签
  • R 将正数和负数的 $xxx.xx 更改为 xxx.xx 但不舍入

    我有一个 df 其中第 2 列及以后的列是美元金额 例如 1004 23 1482 40 2423 94 等 类似于下面的示例 gt df id desc price 1 0 apple 1 00 2 1 banana 2 25 3 2 g
  • 从 C# 调用时将记录选项返回为 null

    是否有可能返回record option从 F 到 C 的值作为空值 我想将一些逻辑封装在 F 程序集中 并尽可能多地隐藏在外观后面 对 C 来说更自然 这是一些综合示例 type Data DataField1 int DataField
  • 用于信标的 CoreBluetooth

    我有一个需要信标范围的项目 我查看了很多示例代码 它们都使用CLLocationManager and CLBeaconRegion 我的问题是didRangeBeacons每秒仅调用一次回调 尽管我没有找到任何专门针对信标的代码示例 但我
  • 如何在没有完成块的情况下在 NSURLSession 中获取服务器响应数据

    我在用NSURLSession用于背景图片上传 根据上传的图像 我的服务器给了我响应 我确实在我的应用程序中进行了相应的更改 但是当我的应用程序在后台上传图像时 我无法获得服务器响应 因为没有完成块 有没有办法在不使用完成块的情况下获得响应
  • iPhone 应用程序转换为 iPad? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想将我的应用程序转换为通用应用程序 谁能推荐一些好的教程来实现这一目标 我需要将 Interface
  • Node JS 插件 - NAN 与 N-API? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一个使用 Node js 插件和 C 的项目 我遇到了两个可以使用的抽象库 NAN 和 N API 但是我无法决定应该使用哪一个