• Node.js Video Tutorials

Node.js - V8 模块



Chrome V8 引擎是一个高性能的 JavaScript 引擎,它使用 C++编写,并用于 Google Chrome。计算机只能理解机器语言,而不能理解 JavaScript 或 HTML 对象。

用 JavaScript 编写的代码只能被浏览器理解,而不能被机器理解。因此,JS V8 引擎会将 JavaScript 代码转换为机器可理解的语言,以便机器能够理解它。

NodeJS V8 模块提供特定于 Node.js 二进制文件中内置的 V8 版本的 API。

包含 V8 模块

要包含 V8 模块,请在 Node.js 文档的开头添加以下语法。

const v8 = require('v8')

V8 模块提供方法,可以使用 NodeJS 的 `v8.getHeapStatistics()` 方法和 `v8.getHeapSpaceStatistics()` 方法来获取有关堆内存的信息。让我们通过合适的示例来了解它们。

打印 V8 堆的统计信息

要打印 V8 堆的统计信息,我们使用 NodeJS 的 `v8.getHeapStatistics()` 方法。

示例

const v8 = require('v8');  
console.log(v8.getHeapStatistics());

输出

{
   total_heap_size: 5369856,
   total_heap_size_executable: 524288,
   total_physical_size: 4303400,
   total_available_size: 17226376544,
   used_heap_size: 2849672,
   heap_size_limit: 17230200832,
   malloced_memory: 8192,
   peak_malloced_memory: 418904,
   does_zap_garbage: 0,
   number_of_native_contexts: 1,
   number_of_detached_contexts: 0
}

打印 V8 堆空间的统计信息

要获取 V8 堆空间的统计信息,我们使用 NodeJS 的 `v8.getHeapSpaceStatistics()` 方法。

示例

const v8 = require('v8');  
console.log(v8.getHeapSpaceStatistics());

输出

[
   {
      space_name: 'read_only_space',
      space_size: 262144,
      space_used_size: 32808,
      space_available_size: 0,
      physical_space_size: 33088
   },
   {
      space_name: 'new_space',
      space_size: 2097152,
      space_used_size: 649416,
      space_available_size: 398040,
      physical_space_size: 2088040
   },
   { 
      space_name: 'old_space',
      space_size: 1916928,
      space_used_size: 1582320,
      space_available_size: 88312,
      physical_space_size: 1584560
   },
   {
      space_name: 'code_space',
      space_size: 430080,
      space_used_size: 155616,
      space_available_size: 0,
      physical_space_size: 172000
   },
   {
      space_name: 'map_space',
      space_size: 528384,
      space_used_size: 308880,
      space_available_size: 0,
      physical_space_size: 309720
   },
   {
      space_name: 'large_object_space',
      space_size: 135168,
      space_used_size: 131112,
      space_available_size: 0,
      physical_space_size: 135168
   },
   {
      space_name: 'code_large_object_space',
      space_size: 0,
      space_used_size: 0,
      space_available_size: 0,
      physical_space_size: 0
   },
   {
      space_name: 'new_large_object_space',
      space_size: 0,
      space_used_size: 0,
      space_available_size: 1047456,
      physical_space_size: 0
   }
]

V8 模块方法

以下是V8 模块中可用方法的列表:

序号 模块和描述
1

cachedDataVersionTag()

用于检索一个整数值,该值将表示 v8 版本、命令行标志和检测到的 CPU 功能的版本标签。

2

getHeapSpaceStatistics()

用于检索 v8 堆空间的统计信息。

3

getHeapStatistics()

用于检索从 v8 版本派生的堆的统计信息

序列化 API 方法

以下是序列化 API中可用方法的列表:

序号 模块和描述
1

serialize()

用于将任何数据类型序列化为缓冲区

2

deserialize()

用于将缓冲区值反序列化为 JavaScript 值。

序列化器方法

以下是v8.Serializer 类中可用方法的列表:

序号 模块和描述
1

writeHeader()

用于将标头写入内部缓冲区。

2

writeValue()

用于序列化 JavaScript 值并将序列化的表示形式添加到内部缓冲区

3

releaseBuffer()

用于检索存储在内部缓冲区中的值。

4

writeUnit32()

用于将原始 32 位无符号整数写入内部缓冲区。

5

writeUnit64()

用于将原始 64 位无符号整数写入内部缓冲区。

6

writeDouble()

用于将 JavaScript 数字值写入内部缓冲区。

7

writeRawBytes()

用于将原始字节写入序列化器的内部缓冲区。

反序列化器方法

以下是v8.Deserializer 类中可用方法的列表:

序号 模块和描述
1

readHeader()

用于读取和验证内部缓冲区中的标头。

2

readValue()

用于反序列化写入内部缓冲区的 JavaScript 值。

3

readUnit32()

用于读取原始 32 位无符号整数并返回它。

4

readUnit64()

用于读取原始 64 位无符号整数并将其作为包含其高位和低位值的数组返回。

5

readRawBytes()

用于从反序列化器的内部缓冲区读取原始字节。

广告