Node.js API详解之 V8模块用法实例分析
本文实例讲述了node.js api详解之 v8模块用法。分享给大家供大家参考,具体如下:
node.js api详解之 v8
v8 模块暴露了特定于v8版本内置到 node.js 二进制文件中的api. 通过以下方式使用:
const v8 = require('v8');
注意: apis 和实现可能在任何时间变动。
v8.cacheddataversiontag()
说明:
返回一个表示从v8版本,命令行标志和已检测到的cpu功能派生的“version tag”的整数。
这对于判断vm.script cacheddata是否兼容当前v8实例非常有用。
demo:
const v8 = require('v8'); console.log( v8.cacheddataversiontag() ); // 2299951209
v8.getheapspacestatistics()
说明:
返回关于v8堆空间的统计,即组成v8堆的片段。
通过v8 getheapspacestatistics 函数提供统计信息,无论堆空间的顺序,或是堆空间的可用性都可以被保证,并且可能是多个v8版本。
demo:
const v8 = require('v8'); console.log( v8.getheapspacestatistics() ); // [ { space_name: 'new_space', // space_size: 2097152, // space_used_size: 706992, // space_available_size: 324176, // physical_space_size: 2051712 }, // { space_name: 'old_space', // space_size: 2420736, // space_used_size: 2325072, // space_available_size: 176, // physical_space_size: 2368592 } ]
v8.getheapstatistics()
说明:
返回拥有以下参数的对象:
total_heap_size
total_heap_size_executable
total_physical_size
total_available_size
used_heap_size
heap_size_limit
malloced_memory
peak_malloced_memory
does_zap_garbage
does_zap_garbage是个0/1式布尔值,它凸显是否设置了–zap_code_space选项。
若为真,那么v8引擎会用一个位模式来覆盖堆中的垃圾。
如此,rss(常驻内存集)会变得越来越大,因为v8会一直征用所有的堆页,从而让他们更难被操作系统交换掉。
demo:
const v8 = require('v8'); console.log( v8.getheapstatistics() ); // { total_heap_size: 7159808, // total_heap_size_executable: 3670016, // total_physical_size: 6020992, // total_available_size: 1492618992, // used_heap_size: 4550336, // heap_size_limit: 1501560832, // malloced_memory: 8192, // peak_malloced_memory: 1185928, // does_zap_garbage: 0 }
v8.setflagsfromstring(string)
说明:
v8.setflagsfromstring()可以被用来在脚本中设置v8引擎的命令行标识。此方法应该谨慎使用。
在虚拟机已经运行后修改其设置可能会造成不可预测的结果,包括崩溃和数据丢失,或者一点作用也没有。
针对一个特定版本的node.js,可供其使用的v8选项可以通过运行node –v8-options来获取。
一个非官方的,由社区维护的选项清单及其效果可参见这里。
demo:
const v8 = require('v8'); v8.setflagsfromstring('mbp v8');
serialization api
说明:
序列化api提供了一系列用于序列化javascript值的方法,它们兼容于html structured clone algorithm。
格式是向下兼容的(可以安心存储于硬盘中)。
注意: 此api正在开发中,任何变化(包括不兼容的api或者传输格式)可能会随时发生直到此警告被移除。
v8.serialize(value)
说明:
使用defaultserializer来序列化value到一个缓冲区中。
demo:
const v8 = require('v8'); console.log( v8.serialize('isjs') ); //
v8.deserialize(buffer)
说明:
用默认配置来执行defaultdeserializer从而从一个缓冲区中读取一个js值
demo:
const v8 = require('v8'); const serializeval = v8.serialize('isjs'); console.log( serializeval ); // console.log( v8.deserialize(serializeval); // isjs
class: v8.defaultserializer
说明:
serializer的子类,用来将typedarray(尤其是buffer)和dataview序列化成一个宿主对象,
并且对于它们底层的arraybuffer,只有被它们实际指向的部分会被存储起来。
class: v8.defaultdeserializer
说明:
deserializer的一个子类,根据defaultserializer的格式而定。
new serializer()
说明:
创建一个新的serializer对象。
serializer.writeheader()
说明:
写出一个包含序列化格式版本的头文件
serializer.writevalue(value)
说明:
序列化一个javascript值并将结果加入内部的缓冲区。
如果value不能被序列化则抛出错误。
serializer.releasebuffer()
说明:
返回存储里的内部缓冲区。若缓冲区已经被释放则不应该使用此序列化机制。
如果之前的一次写入操作失败,那么执行此方法会造成不可预知的行为。
serializer.transferarraybuffer(id, arraybuffer)
说明:
标记一个arraybuffer, 表明它的内容正在被带外传输中。
同时将arraybuffer包裹于一个反序列化的上下文内,之后将结果传入deserializer.transferarraybuffer()中。
serializer.writeuint32(value)
说明:
写出一个原始32位无符号整型。
此方法在一个自定义的serializer._writehostobject()中使用.
serializer.writeuint64(hi, lo)
说明:
写出一个原始64位无符号整型,会被拆分成高32位和低32位两部分。
此方法用于一个自定义的serializer._writehostobject().
serializer.writedouble(value)
说明:
写出一个js的number值。 从方法用于一个自定义的serializer._writehostobject().
serializer.writerawbytes(buffer)
说明:
将原始字节写入序列化机制的内部缓冲区中。
反序列化机制会有对应的方法来获得缓冲区的长度。
此方法用于一个自定义的serializer._writehostobject()中。
serializer._writehostobject(object)
说明:
此方法用来写出某种宿主对象,进一步说,是由绑定的原生c++代码所生成的一个对象。
如果无法序列化object,那么一个恰当的异常会被抛出。
此方法在serializer对象本身是不存在的,但可在其子类中提供。
serializer._getdatacloneerror(message)
说明:
当一个对象无法被克隆时,会使用此方法来生成待抛出的错误对象。
此方法默认为error的构造函数,可以在子类中被覆盖。
serializer._getsharedarraybufferid(sharedarraybuffer)
说明:
当序列化机制将要序列化一个sharearraybuffer对象时会调用此方法。
它必须为这对象返回一个32位无符号整型的id,但若这个对象已被序列化过,则返回上一次序列化时所分配的id。
这个id会在对象被反序列化时传入deserializer.transferarraybuffer()中。
如果对象不能被序列化,则抛出异常。
serializer类本身不包含此方法,但可以在其子类中设置它。
serializer._settreatarraybufferviewsashostobjects(flag)
说明:
表明是否视typedarray,dataview对象为宿主对象,也就是说,是否能将他们传入serializer._writehostobject()中。
默认以上对象非宿主对象。
new deserializer(buffer)
说明:
生成一个新的deserializer对象。
deserializer.readheader()
说明:
读取并验证一个头文件(包含格式信息)。
验证在某些情况下有可能不会通过,比如传输格式不合格或者不被支持。
若发生上述情况,那么一个error会被抛出。
deserializer.readvalue()
说明:
从缓冲区中反序列化一个javascript值,并返回它。
deserializer.transferarraybuffer(id, arraybuffer)
说明:
标记一个arraybuffer, 表明它的内容正在被带外传输中。
同时将arraybuffer包裹于一个序列化的上下文内,之后将结果传入serializer.transferarraybuffer()中
(当arraybuffer是sharearraybuffer实例时,返回serializer._getsharedarraybufferid()产生的id)
deserializer.getwireformatversion()
说明:
读取底层的传输格式的版本。很可能有助于遗留代码来读取旧的传输格式版本。
不可在.readheader()之前调用此方法。
deserializer.readuint32()
说明:
读取并返回一个原始32位无符号整型。
用于一个自定义的deserializer._readhostobject()。
deserializer.readuint64()
说明:
读取一个原始64位无符号整型,将其拆分成一个包含两个32位无符号整型的[hi, lo]数组,并返回此数组。
用于一个自定义的deserializer._readhostobject()。
deserializer.readdouble()
说明:
读取一个jsnumber值。 用于一个自定义的deserializer._readhostobject()。
deserializer.readrawbytes(length)
说明:
从反序列化机制的内部缓冲区中读取原始字节。length必须和传入serializer.writerawbytes()中的缓冲区的长度相符。
用于一个自定义的serializer.writerawbytes()。
deserializer._readhostobject()
说明:
此方法用来写出某种宿主对象,进一步说,是由绑定的原生c++代码所生成的一个对象。
如果无法序列化数据,那么一个恰当的异常会被抛出。
此方法在deserializer对象本身上是不存在的,但可有其子类提供。
希望本文所述对大家node.js程序设计有所帮助。
推荐阅读
-
Node.js JSON模块用法实例分析
-
Python3.5内置模块之time与datetime模块用法实例分析
-
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
-
Node.js API详解之 tty功能与用法实例分析
-
Python3.5内置模块之random模块用法实例分析
-
Node.js API详解之 dgram模块用法实例分析
-
Node.js API详解之 V8模块用法实例分析
-
Node.js API详解之 console模块用法详解
-
Python3.5 Pandas模块之DataFrame用法实例分析
-
Python3.5 Pandas模块之Series用法实例分析