首页
学习
活动
专区
圈层
工具
发布

Node.js为什么需要C++扩展?

一.概念 本质上,Node.js 扩展就是 C++动态链接库: Addons are dynamically-linked shared objects written in C++....(尤其是 V8 API 经常发生变化) 基于nan:即 Native Abstractions for Node.js,为了屏蔽不同 Node/V8 版本间 C++ API 差异而加的一层抽象,期望将下层...不用 N-API 的话,手搓一个有些复杂,涉及好几层的知识: V8:Node.js 依赖的 JavaScript 引擎,对象创建、函数调用等机制都是 V8 提供的,具体 C++ API 见头文件node...并且 C++并不总是比 JS 快(比如正则匹配的某些场景) 参考资料 C++ Addons | Node.js v14.0.0 Documentation why write C/C++ addons...generation Node.js APIs for native modules N-API: Next generation APIs for Node.js native addons available

2.8K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    通过N-API使用Libuv线程池

    Node.js不适合处理耗时操作是一直存在的问题,为此Node.js提供了三种解决方案。 1 子进程 2 子线程 3 Libuv线程池 前两种是开发效率比较高的,因为我们只需要写js。...但是也有些缺点 1 执行js的成本 2 虽然可以间接使用Libuv线程池,但是受限于Node.js提供的API。 3 无法利用c/c++层提供的解决方案(内置或业界的)。...::Localv8::Context> context = env->context(); v8::Localv8::Object> resource; if (async_resource...总结:通过N-API提供的API,使得我们不再受限于Nod.js本身提供的一些异步接口(使用Libuv线程池的接口),而是直接使用Libuv线程池,这样我们不仅可以自己写c/c++,还可以复用业界的一些解决方案解决...Node.js里的一些耗时任务。

    1.1K10

    编写原生 Node.js 模块

    在C/C++和Node.js之间创建一个Bridge,进行通信。 什么是原生模块? Node.js Addons是动态链接的可共享对象,由C/C++编写而成。...想要编写Node.js addons,你需要了解一些基本知识: Libuv V8 Node.js internals 推荐阅读这些资料。...C++ 有丰富的内置类型来保存数字或者字符串,但是JS只能识别v8::里面定义的类型。因此,将c++的变量赋值给JS时,需要转换成可以被JS识别的类型,也即是v8::定义的类型。...比如v8::String、v8::Object。 编译原生的Node.js模块 一旦源代码编写完成,需要将它编译成二进制的addon.node文件,之后才能被Node.js require。...N-API,Node官方推出的用来编写原生Node扩展模块,是V8和nan的替代,目前处于实验阶段。

    4.3K00

    拥抱Node.js 8.0,N-API入门极简例子

    N-API简介 Node.js 8.0 在2017年6月份发布,升级的特性中,包含了N-API。编写过或者使用过 node扩展的同学,不少都遇到过升级node版本,node扩展编译失败的情况。...因为node扩展严重依赖于V8暴露的API,而node不同版本依赖的V8版本可能不同,一旦升级node版本,原先运行正常的node扩展就编译失败了。...它跟底层JS引擎无关,只要N-API暴露的API足够稳定,那么node扩展的编写者就不用过分担忧node的升级问题。...这里只是简单返回一个字符串 napi_value HelloMethod (napi_env env, napi_callback_info info) { napi_value world; napi_create_string_utf8...相关链接 N-API:https://nodejs.org/api/n-api.html C++ Addons:https://nodejs.org/api/addons.html 本文摘录自《Nodejs

    2.5K70

    Node.js 原生模块开发方式变迁

    一直到最后,会比较详细地对 Node.js v8.x 新出的原生模块开发接口 N-API 做一次初步的尝试和解析,使得大家对 Node.js 原生 C++ 模块开发的固有印象(认为特别麻烦)有一个比较好的改观...在早期的时候,Node.js 原生 C++ 模块开发方式是非常暴力的,直接使用其提供的原生模块开发头文件。 开发者直接深入到 Node.js 的各种 API,以及 Google V8 的 API。...帝国时代:符合 ABI 的 N-API 自从前几天 Node.js v8.0.0 发布之后,Node.js 推出了全新的用于开发 C++ 原生模块的接口,N-API。..._onLine (readline.js:278:10) at REPLServer.Interface....并且代码里面并没有任何 Node.js 非 N-API 所暴露出来的数据结构和 V8 的数据结构——版本差异消除了。

    1.6K30

    拥抱Node.js 8.0,N-API入门极简例子

    本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载 N-API简介 Node.js 8.0 在2017年6月份发布,升级的特性中,包含了N-API。...因为node扩展严重依赖于V8暴露的API,而node不同版本依赖的V8版本可能不同,一旦升级node版本,原先运行正常的node扩展就编译失败了。...它跟底层JS引擎无关,只要N-API暴露的API足够稳定,那么node扩展的编写者就不用过分担忧node的升级问题。...这里只是简单返回一个字符串 napi_value HelloMethod (napi_env env, napi_callback_info info) { napi_value world; napi_create_string_utf8...相关链接 N-API:https://nodejs.org/api/n-api.html C++ Addons:https://nodejs.org/api/addons.html 本文摘录自《Nodejs

    1.6K20

    Node 10 新功能概览(译)

    N-API 不再是实验性功能 Node文档将N-API描述为构建本地插件的API。 它独立于底层的JavaScript运行时(ex V8),并作为Node.js本身的一部分进行维护。...它旨在将Addons与基础JavaScript引擎中的更改隔离,并允许为一个版本编译的模块在更高版本的Node.js上运行,而无需重新编译。...之前在Node 8中实验性地引入了N-API,并将从Node 10开始稳定。在Node版本之间升级不再会引起模块损坏。 它也将向后移植以实现Node.js v6.x和v8.x的兼容性。...V8 引擎 v6.6 的性能改进 Node 停止使用 Chromium 中的 V8 JavaScript引擎,并且 Node.js v10 使用了最新版本的V8 引擎。...TLS 1.3最近已完成定稿,待 Node.js v10 在10月份发布 LTS 时,它将会完全支持该标准。

    87330

    如何开发 Node.js Native Add-on?

    目前 N-API 的 C++ 封装 node-addon-api 每周的下载量已经超过了 250万次,并且所有 Node.js LTS(长期支持版本)都已经支持了 N-API v3 或者更高版本 ,Node.js...其他辅助函数 除了以上几个重要功能之外,我们也发现了许多在维护 Node.js add-on 的过程中经常会使用到的类型方法与函数,包括: Date 对象; BigInts; 从 JavaScript...结尾 从 Node.js 诞生之初,Node.js 就支持通过 C/C++ 代码来给 JavaScript 暴露更多的特性接口。...大版本之后重新编译 add-on 模块; 我们可以在除了使用 V8 作为 JavaScript 引擎的 Node.js 之外的运行环境实现 N-API,也意味着这些为 Node.js 开发的 add-on...N-API 是单纯的 C API,这意味着我们可以使用 C/C++ 之外的语言、运行时开发 Node.js add-on,比如 Go 或者是 Rust。

    2K20

    Node.js 10带着npm 6来了!

    Node.js 10.x 将是第一个支持 OpenSSL 1.1.0 的版本。该版本配备了 Google V8 6.6 JavaScript 引擎,性能会增强,错误处理和跟踪诊断能力也将会提升。...此版本还将推出 Node.js API(N-API),N-API 是一个稳定的 API 模块,它独立于 V8,这样就不会阻碍模块在不重新编译的情况下运行新版本的 Node.js。...Node.js 是一个非常灵活的平台,可用于构建 API、物联网和移动应用程序等。” 关于 N-API N-API 提高了 Node.js 的 ABI 稳定性,有助于模块的部署和维护。...Node.js 10 将 ABI 的稳定模块 API(N-API)作为官方支持的 API 层。...Node.js 10.x 引入 npm 6 Node.js 10.0.0 附带 npm 5.7.x, 但是,预计在 Node.js 10.x 生命周期的早期会更新为 npm 6。

    93030

    鸿蒙(HarmonyOS)安全和高效的使用N-API开发Native模块

    简介N-API 是 Node.js Addon Programming Interface 的缩写,是 Node.js 提供的一组 C++ API,封装了 V8 引擎 的能力,用于编写 Node.js...通过 N-API,开发者可以使用 C++ 编写高性能的 Node.js 模块,同时保持与 Node.js 的兼容性。...Node.js 官网中已经给出 N-API 接口基础能力的介绍,同时, 方舟 ArkTS 运行时 提供的 N-API 接口,封装了方舟引擎的能力,在功能上与 Node.js 社区保持一致,这里不再赘述。...TestDefineClass, NULL, NULL, NULL, napi_enumerable|napi_static, NULL}; NODE_API_CALL(env, napi_create_object...目前,通过 N-API 接口实现 ArkTS 调用 C++ 的场景大致分为三类:ArkTS 直接调用 C++ 接口、ArkTS 监听 C++ 接口以及 ArkTS 接收 C++ 回调。

    77620

    Node.js 8有哪些重要功能和修复?

    Node.js 8将从2017年10月起,正式成为当前的LTS版本,并持续到2019年12月31日。这也意味着Node.js 6版本将在2018年4月进入到维护模式,并在2019年4月结束维护支持。...N-API 介绍 N-API是用于构建原生插件的API。它独立于底层JavaScript运行时,并作为Node.js自身的一部分进行维护。...N-API的目的是将附加组件和基础JavaScript引擎中的更改区分开,以便原生插件在不需要重新编译情况下,就可以运行不同的Node.js版本。 了解更多N-API信息。...将 V8 升级到 5.8:TurboFan & Ingnition 使用Node.js 8版本,底层的V8 JavaScript引擎也会更新。...对于Node.js用户来说,最大的变化就是引入TurboFan和Ignition。Ignition是V8的解释器,TurboFan是优化编译器。

    1.3K20

    Node.js v15.0.0 is here!

    N-API 版本 7 npm 7 unhandled rejections 默认抛出 QUIC V8 8.6 AbortController Node.js 15 加入了 AbortController...N-API 7 N-API 7 是上一个大版本以来的第一个新版,并带来了使用 ArrayBuffers 的更多方法。 npm 7 Node.js 15 附带了 npm 的新大版本 npm 7。...去年是 Node.js 成立 10 周年,我们启动了《Node.js 的下一个 10 年》的项目。这项工作的目的是反思 Node.js 在头十年中成功的原因,并为下一个十年中的成功设定方向。...现在也是开始计划升级到 Node.js 14 的好时机,它将在下周升级到 LTS,支持会持续到直到 2023 年 4 月。 还要注意的是,Node.js 10 将于 2021 年 4 月结束生命周期。...因此,如果你仍在使用 Node.js 10,我们建议你开始计划升级。

    1.2K10

    Node.js v25.2.0 新功能速览!

    前言 Node.js v25.2.0 (Current) 发布了!...本文带大家详细看看更细内容 正文 本次更新新增 util.deprecate 选项、类型剥离稳定版 和 V8 堆统计扩展等功能,进一步优化了开发工具和性能监控。...抛出错误,提升安全性 类型剥离稳定:模块类型剥离功能标记为稳定,简化 ESM/CommonJS 混合使用 网络家族自动选择超时:net模块超时增至500ms,提升IPv4/IPv6自动切换的鲁棒性 N-API...对象创建:新增napi_create_object_with_properties,高效批量设置对象属性 V8堆统计扩展:HeapStatistics新增total_allocated_bytes,精确追踪内存分配...simdjson 至 4.0.7、corepack 至 0.34.1 修复:HTTP/2 内存泄漏、ECMA-402兼容、WebAssembly 缓存 构建/文档:iBMI/AIX可见性、配置加载 最后 Node.js

    23710
    领券