Node.js API详解之 V8模块用法实例分析


Posted in Javascript onJune 05, 2020

本文实例讲述了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程序设计有所帮助。

Javascript 相关文章推荐
JavaScript下利用fso判断文件是否存在的代码
Dec 11 Javascript
A标签中通过href和onclick传递的this对象实现思路
Apr 19 Javascript
jQuery中addClass()方法用法实例
Jan 05 Javascript
jquery中radio checked问题
Mar 16 Javascript
JavaScript中SetInterval与setTimeout的用法详解
Nov 10 Javascript
js添加千分位的实现代码(超简单)
Aug 01 Javascript
基于JavaScript实现跳转提示页面
Sep 24 Javascript
搭建Bootstrap离线文档的方法
Dec 02 Javascript
angularJS之$http:与服务器交互示例
Mar 17 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
Jan 06 jQuery
Node.js npm命令运行node.js脚本的方法
Oct 10 Javascript
vue使用map代替Aarry数组循环遍历的方法
Apr 30 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
Jun 05 #Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
Jun 05 #Javascript
Vue路由的模块自动化与统一加载实现
Jun 05 #Javascript
Jquery滑动门/tab切换实现方法完整示例
Jun 05 #jQuery
详解JS函数防抖
Jun 05 #Javascript
Vuex的各个模块封装的实现
Jun 05 #Javascript
js实现表单项的全选、反选及删除操作示例
Jun 05 #Javascript
You might like
php中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
PHP5权威编程阅读学习笔记 附电子书下载
2012/07/05 PHP
jquery插件 cluetip 关键词注释
2010/01/12 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
2013/11/25 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
21个值得收藏的Javascript技巧
2014/02/04 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
jQuery 如何实现一个滑动按钮开关
2016/12/01 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
Layui数据表格跳转到指定页的实现方法
2019/09/05 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
2019/12/09 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
Python实现求解一元二次方程的方法示例
2018/06/20 Python
python 实现视频流下载保存MP4的方法
2019/01/09 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
Python3.5局部变量与全局变量作用域实例分析
2019/04/30 Python
python实现五子棋小程序
2019/06/18 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
canvas 如何绘制线段的实现方法
2018/07/12 HTML / CSS
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
初入社会应届生求职信
2013/11/18 职场文书
物业电工岗位职责
2013/11/20 职场文书
大三预备党员入党思想汇报
2014/01/08 职场文书
租房合同协议书
2014/04/09 职场文书
求职信范文大全
2014/05/26 职场文书
党员教师批评与自我批评发言稿
2014/10/15 职场文书
工作收入住址证明
2014/10/28 职场文书
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js