13397158231   jevian_ma@worldflying.cn

nodejs的n api介绍

2019-06-03 22:09:02

    作为nodejs的底层开发语言,c++具有高性能、复用性好等优势,c++编写的chrome v8引擎与libuv、http-parser、zlib等等一起构成了现在大前端技术的基础——nodejs。

    nodejs也提供了编写c++扩展以提高性能的方法。但是原生 C++ 模块的开发一直是一个被人冷落的角落,其中一部分原因在于Node程序员有一部分来自于前端,c++的学习成本很高可能没有系统的C++知识,另一部分原因是node的c++扩展机制很复杂,需要理解v8的各种概念,包括隔离示例、虚拟机、上下文、句柄、内存回收(gc)、模板等等。更难过的是,随着版本的更替,一个编译好的插件发布没多久,就会因为版本的不兼容不得不重新编译以适应版本。

    N-API是node8.3新增的实验性特性,在node10中正式启用,

    我们知道,即使是在 NAN 的开发方式下,一次编写好的代码在不同版本的 Node.js 下也需要重新编译,否则版本不符的话 Node.js 无法正常载入一个 C++ 扩展。即一次编写,到处编译。

而 N-API 相较于 NAPI 来说,它把 Node.js 的所有底层数据结构全部黑盒化,抽象成 N-API 当中的接口。

不同版本的 Node.js 使用同样的接口,这些接口是稳定地 ABI 化的,即应用二进制接口(Application Binary Interface)。这使得在不同 Node.js 下,只要 ABI 的版本号一致,编译好的 C++ 扩展就可以直接使用,而不需要重新编译。事实上,在支持 N-API 接口的 Node.js 中,的确就指定了当前 Node.js 所使用的 ABI 版本。

    N-API是一个构建本地扩展插件的API。它并不依赖于JavaScript运行环境(例如v8)而是作为Node.js自身的组建的一部分运行。在Node.js当中这个API将会作为应用程序二进制接口(ABI) 稳定存在。它的目的是为了可以让插件直接与JS引擎底层交互并允许它们编译一次之后无需为每个新版本的Node重新编译。

    这个插件的构建、打包和使用与一般C++插件相同。惟一的不同的是这组API调用Node.js原生对象,而不是使用v8或者本地抽象的Node.js API。


作者:沃航科技

优秀产品推荐:可编程网络IO控制器

上一篇:cordova程序后台运行js的方法

下一篇:什么叫MD5,MD5通常做什么用处

联系我们

  • 地址:武汉市东湖高新开发区光谷总部国际1栋2412室
  • QQ:932773931
  • 电话:027-59761089-806
  • 手机:13397158231
  • 邮箱:jevian_ma@worldflying.cn

关注公众号

扫码添加微信

沃航(武汉)科技有限公司版权所有

备案号:鄂ICP备16014230号-1

本网站由提供CDN加速/云存储服务