Node.js v8.x 中文文档
目录
- V8
- v8.cachedDataVersionTag()
- v8.getHeapSpaceStatistics()
- v8.getHeapStatistics()
- v8.setFlagsFromString(string)
- Serialization API
- v8.serialize(value)
- v8.deserialize(buffer)
- class: v8.Serializer
- new Serializer()
- serializer.writeHeader()
- serializer.writeValue(value)
- serializer.releaseBuffer()
- serializer.transferArrayBuffer(id, arrayBuffer)
- serializer.writeUint32(value)
- serializer.writeUint64(hi, lo)
- serializer.writeDouble(value)
- serializer.writeRawBytes(buffer)
- serializer._writeHostObject(object)
- serializer._getDataCloneError(message)
- serializer._getSharedArrayBufferId(sharedArrayBuffer)
- serializer._setTreatArrayBufferViewsAsHostObjects(flag)
- class: v8.Deserializer
- new Deserializer(buffer)
- deserializer.readHeader()
- deserializer.readValue()
- deserializer.transferArrayBuffer(id, arrayBuffer)
- deserializer.getWireFormatVersion()
- deserializer.readUint32()
- deserializer.readUint64()
- deserializer.readDouble()
- deserializer.readRawBytes(length)
- deserializer._readHostObject()
- class: v8.DefaultSerializer
- class: v8.DefaultDeserializer
V8#
v8
模块暴露了特定于[V8][]版本内置到 Node.js 二进制文件中的API. 通过以下方式使用:
const v8 = require('v8');
注意: APIs 和实现可能在任何时间变动。
v8.cachedDataVersionTag()#
返回一个表示从V8版本,命令行标志和已检测到的CPU功能派生的“version tag”的整数。这对于判断[vm.Script
][] cachedData
是否兼容当前v8实例非常有用。
v8.getHeapSpaceStatistics()#
返回关于v8堆空间的统计,即组成v8堆的片段。通过V8 [GetHeapSpaceStatistics
][] 函数提供统计信息,无论堆空间的顺序,或是堆空间的可用性都可以被保证,并且可能是多个V8版本。
返回一个数组包含如下属性:
space_name
<string>space_size
<number>space_used_size
<number>space_available_size
<number>physical_space_size
<number>
例如:
[
{
"space_name": "new_space",
"space_size": 2063872,
"space_used_size": 951112,
"space_available_size": 80824,
"physical_space_size": 2063872
},
{
"space_name": "old_space",
"space_size": 3090560,
"space_used_size": 2493792,
"space_available_size": 0,
"physical_space_size": 3090560
},
{
"space_name": "code_space",
"space_size": 1260160,
"space_used_size": 644256,
"space_available_size": 960,
"physical_space_size": 1260160
},
{
"space_name": "map_space",
"space_size": 1094160,
"space_used_size": 201608,
"space_available_size": 0,
"physical_space_size": 1094160
},
{
"space_name": "large_object_space",
"space_size": 0,
"space_used_size": 0,
"space_available_size": 1490980608,
"physical_space_size": 0
}
]
v8.getHeapStatistics()#
返回拥有以下参数的对象:
total_heap_size
<number>total_heap_size_executable
<number>total_physical_size
<number>total_available_size
<number>used_heap_size
<number>heap_size_limit
<number>malloced_memory
<number>peak_malloced_memory
<number>does_zap_garbage
<number>
does_zap_garbage
是个0/1式布尔值,它凸显是否设置了--zap_code_space
选项。若为真,那么V8引擎会用一个位模式来覆盖堆中的垃圾。如此,RSS(常驻内存集)会变得越来越大,因为V8会一直征用所有的堆页,从而让他们更难被操作系统交换掉。
For example:
{
total_heap_size: 7326976,
total_heap_size_executable: 4194304,
total_physical_size: 7326976,
total_available_size: 1152656,
used_heap_size: 3476208,
heap_size_limit: 1535115264,
malloced_memory: 16384,
peak_malloced_memory: 1127496,
does_zap_garbage: 0
}
v8.setFlagsFromString(string)#
v8.setFlagsFromString()
可以被用来在脚本中设置V8引擎的命令行标识。此方法应该谨慎使用。在虚拟机已经运行后修改其设置可能会造成不可预测的结果,包括崩溃和数据丢失,或者一点作用也没有。
针对一个特定版本的Node.js,可供其使用的V8选项可以通过运行node --v8-options
来获取。一个非官方的,由社区维护的选项清单及其效果可参见[这里][here]。
用法:
// Print GC events to stdout for one minute.
const v8 = require('v8');
v8.setFlagsFromString('--trace_gc');
setTimeout(function() { v8.setFlagsFromString('--notrace_gc'); }, 60e3);
Serialization API#
序列化API提供了一系列用于序列化JavaScript值的方法,它们兼容于[HTML structured clone algorithm][]。 格式是向下兼容的(可以安心存储于硬盘中)。
注意: 此API正在开发中,任何变化(包括不兼容的API或者传输格式)可能会随时发生直到此警告被移除。
v8.serialize(value)#
- Returns: <Buffer>
使用[DefaultSerializer
][]来序列化value
到一个缓冲区中。
v8.deserialize(buffer)#
buffer
<Buffer> | <Uint8Array> 由[serialize()
][]返回的一个缓冲区。
用默认配置来执行[DefaultDeserializer
][]从而从一个缓冲区中读取一个JS值
class: v8.Serializer#
new Serializer()#
创建一个新的Serializer
对象。
serializer.writeHeader()#
写出一个包含序列化格式版本的头文件
serializer.writeValue(value)#
序列化一个JavaScript值并将结果加入内部的缓冲区。
如果value
不能被序列化则抛出错误。
serializer.releaseBuffer()#
返回存储里的内部缓冲区。若缓冲区已经被释放则不应该使用此序列化机制。如果之前的一次写入操作失败,那么执行此方法会造成不可预知的行为。
serializer.transferArrayBuffer(id, arrayBuffer)#
id
<integer> 一个32位的无符号整型。arrayBuffer
<ArrayBuffer> 一个ArrayBuffer
实例。
标记一个ArrayBuffer
, 表明它的内容正在被带外传输中。同时将ArrayBuffer
包裹于一个反序列化的上下文内,之后将结果传入[deserializer.transferArrayBuffer()
][]中。
serializer.writeUint32(value)#
value
<integer>
写出一个原始32位无符号整型。
此方法在一个自定义的[serializer._writeHostObject()
][]中使用.
serializer.writeUint64(hi, lo)#
写出一个原始64位无符号整型,会被拆分成高32位和低32位两部分。
此方法用于一个自定义的[serializer._writeHostObject()
][].
serializer.writeDouble(value)#
value
<number>
写出一个JS的number
值。
从方法用于一个自定义的[serializer._writeHostObject()
][].
serializer.writeRawBytes(buffer)#
buffer
<Buffer> | <Uint8Array>
将原始字节写入序列化机制的内部缓冲区中。反序列化机制会有对应的方法来获得缓冲区的长度。
此方法用于一个自定义的[serializer._writeHostObject()
][]中。
serializer._writeHostObject(object)#
object
<Object>
此方法用来写出某种宿主对象,进一步说,是由绑定的原生C++代码所生成的一个对象。 如果无法序列化object
,那么一个恰当的异常会被抛出。
此方法在Serializer
对象本身是不存在的,但可在其子类中提供。
serializer._getDataCloneError(message)#
message
<string>
当一个对象无法被克隆时,会使用此方法来生成待抛出的错误对象。
此方法默认为[Error
][]的构造函数,可以在子类中被覆盖。
serializer._getSharedArrayBufferId(sharedArrayBuffer)#
sharedArrayBuffer
<SharedArrayBuffer>
当序列化机制将要序列化一个ShareArrayBuffer
对象时会调用此方法。它必须为这对象返回一个32位无符号整型的ID,但若这个对象已被序列化过,则返回上一次序列化时所分配的ID。这个ID会在对象被反序列化时传入[deserializer.transferArrayBuffer()
][]中。
如果对象不能被序列化,则抛出异常。
Serializer
类本身不包含此方法,但可以在其子类中设置它。
serializer._setTreatArrayBufferViewsAsHostObjects(flag)#
flag
<boolean>
表明是否视TypedArray
,DataView
对象为宿主对象,也就是说,是否能将他们传入[serializer._writeHostObject()
][]中。
默认以上对象非宿主对象。
class: v8.Deserializer#
new Deserializer(buffer)#
buffer
<Buffer> | <Uint8Array> 由[serializer.releaseBuffer()
][]返回的缓冲区
生成一个新的Deserializer
对象。
deserializer.readHeader()#
读取并验证一个头文件(包含格式信息)。
验证在某些情况下有可能不会通过,比如传输格式不合格或者不被支持。若发生上述情况,那么一个Error
会被抛出。
deserializer.readValue()#
从缓冲区中反序列化一个JavaScript值,并返回它。
deserializer.transferArrayBuffer(id, arrayBuffer)#
id
<integer> 一个 32 位无符号整型arrayBuffer
<ArrayBuffer> | <SharedArrayBuffer>ArrayBuffer
实例
标记一个ArrayBuffer
, 表明它的内容正在被带外传输中。同时将ArrayBuffer
包裹于一个序列化的上下文内,之后将结果传入[serializer.transferArrayBuffer()
][]中(当arrayBuffer
是ShareArrayBuffer
实例时,返回[serializer._getSharedArrayBufferId()
][]产生的id
)
deserializer.getWireFormatVersion()#
- Returns: <integer>
读取底层的传输格式的版本。很可能有助于遗留代码来读取旧的传输格式版本。不可在.readHeader()
之前调用此方法。
deserializer.readUint32()#
- Returns: <integer>
读取并返回一个原始32位无符号整型。
用于一个自定义的[deserializer._readHostObject()
][]。
deserializer.readUint64()#
- Returns: <Array>
读取一个原始64位无符号整型,将其拆分成一个包含两个32位无符号整型的[hi, lo]
数组,并返回此数组。
用于一个自定义的[deserializer._readHostObject()
][]。
deserializer.readDouble()#
- Returns: <number>
读取一个JSnumber
值。
用于一个自定义的[deserializer._readHostObject()
][]。
deserializer.readRawBytes(length)#
- Returns: <Buffer>
从反序列化机制的内部缓冲区中读取原始字节。length
必须和传入[serializer.writeRawBytes()
][]中的缓冲区的长度相符。
用于一个自定义的[serializer.writeRawBytes()
][]。
deserializer._readHostObject()#
此方法用来写出某种宿主对象,进一步说,是由绑定的原生C++代码所生成的一个对象。 如果无法序列化数据,那么一个恰当的异常会被抛出。
此方法在Deserializer
对象本身上是不存在的,但可有其子类提供。
class: v8.DefaultSerializer#
[Serializer
][]的子类,用来将TypedArray
(尤其是[Buffer
][])和Dataview
序列化成一个宿主对象,并且对于它们底层的ArrayBuffer
,只有被它们实际指向的部分会被存储起来。
class: v8.DefaultDeserializer#
[Deserializer
][]的一个子类,根据[DefaultSerializer
][]的格式而定。
[Buffer
]: buffer.html
[DefaultDeserializer
]: #v8_class_v8_defaultdeserializer
[DefaultSerializer
]: #v8_class_v8_defaultserializer
[Deserializer
]: #v8_class_v8_deserializer
[Error
]: errors.html#errors_class_error
[Serializer
]: #v8_class_v8_serializer
[deserializer._readHostObject()
]: #v8_deserializer_readhostobject
[deserializer.transferArrayBuffer()
]: #v8_deserializer_transferarraybuffer_id_arraybuffer
[serialize()
]: #v8_v8_serialize_value
[serializer._getSharedArrayBufferId()
]: #v8_serializer_getsharedarraybufferid_sharedarraybuffer
[serializer._writeHostObject()
]: #v8_serializer_writehostobject_object
[serializer.releaseBuffer()
]: #v8_serializer_releasebuffer
[serializer.transferArrayBuffer()
]: #v8_serializer_transferarraybuffer_id_arraybuffer
[serializer.writeRawBytes()
]: #v8_serializer_writerawbytes_buffer
[HTML structured clone algorithm]: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm
[V8]: https://developers.google.com/v8/
[vm.Script
]: vm.html#vm_new_vm_script_code_options
[here]: https://github.com/thlorenz/v8-flags/blob/master/flags-0.11.md
[GetHeapSpaceStatistics
]: https://v8docs.nodesource.com/node-8.0/d5/dda/classv8_1_1_isolate.html#ac673576f24fdc7a33378f8f57e1d13a4
- 断言测试
- 异步钩子(Async Hooks)
- 缓存(Buffer)
- C++ 插件
- C/C++ 插件 - N-API
- 子进程
- 集群(Cluster)
- 命令行参数
- 控制台(Console)
- 加密(Crypto)
- 调试器
- 废弃的 API
- DNS
- 域(Domain)
- ECMAScript 模块
- 错误(Errors)
- 事件(Events)
- 文件系统
- 全局对象(Globals)
- HTTP
- HTTP/2
- HTTPS
- 检查工具(Inspector)
- 国际化
- 模块(Modules)
- 网络(Net)
- 操作系统(OS)
- 路径(Path)
- 性能钩子(Performance Hooks)
- 进程
- Punycode
- 查询字符串
- 逐行读取
- 交互式解释器(REPL)
- 流(Stream)
- 字符串解码
- 定时器(Timers)
- 安全传输层(TLS/SSL)
- 事件跟踪(Tracing)
- TTY
- UDP / 数据报
- URL
- 工具集
- V8
- 虚拟机(VM)
- 压缩(ZLIB)