cps-js第二轮是国家赛嘛

地址:昆山市玉山镇柏庐路401号

咨询电话:9  手机号码: 传真:9

}

导语:当Javascript的性能遭遇瓶颈,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了。

日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项目中进行使用。下面有个列表,你可能对它们的名字很熟悉:

  • 将sass文件编译成css文件

通常,我们开发原生Node.js模块包括但不仅限于以下原因:

  • 对性能有比较苛刻要求的应用。尽管Node.js得益于libuv,在异步I/O操作很有优势,但遇到数字计算时并不是一个很好的选择。
  • 使用更加底层的API,比如操作系统层面的。

Node.js Addons是动态链接的可共享对象,由C/C++编写而成。可以在Node.js中通过require()方法进行调用,使用起来像调用Node.js普通模块一样。 —— 来自

这意味着如果处理得当的话,模块调用者使用由C/C++编写的原生模块的方式和由Node.js编写的模块一样。想要编写Node.js addons,你需要了解一些基本知识:

创建Node.js的原生扩展模块

下面我以一个常见的动态规划问题-青蛙跳台阶为例子来说明如何创建一个原生的Node.js模块。青蛙跳台阶描述为:一只青蛙一次可以跳上一级台阶,也可以跳上2级台阶,求该青蛙跳上n级台阶的共有多少种跳法?

首先创建一个frog_jump.cc原生文件,.cc的意思是c with class,扩展名也可以是.cpp。建议使用.cc,那么此处还是以.cc做为扩展名吧。代码如下:

  • #include "node.h" 是c++里面引入头文件的方式,具体源码:,C++链接时会加载这个头文件。头文件里面引入了v8命名空间,我们可以通过v8::标志来访问v8的接口。访问所有v8的类型,都需要使用v8::标志
  • 通过args对象来访问Node.js传递过来的参数,通过args也可以获取调用相关信息。
  • 通过v8::Isolate*可以获取函数作用域,可以像JS里面一样进行变量赋值,而不用担心垃圾回收问题,垃圾回收器会自动进行。
  • C++ 有丰富的内置类型来保存数字或者字符串,但是JS只能识别v8::里面定义的类型。因此,将c++的变量赋值给JS时,需要转换成可以被JS识别的类型,也即是v8::定义的类型。比如v8::String、v8::Object。

一旦源代码编写完成,需要将它编译成二进制的addon.node文件,之后才能被Node.js require。为了完成编译操作,需要在项目的根目录创建binding.gyp文件,里面定义了Build的配置。binding.gyp的内容是一个JSON。

虽然npm内置了一个node-gyp版本,但是这个版本没有开放给开发者进行调用。npm install的时候会调用它来进行编译和安装工作。因此,开发者想要调用node-gyp必须自己安装一个全局的node-gyp版本。

,Node官方推出的用来编写原生Node扩展模块,是V8和nan的替代,目前处于实验阶段。

}

我要回帖

更多关于 搭载平台是什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信