Node.js V8模块怎么用?

文章导读
Previous Quiz Next Chrome V8 引擎 是一个用 C++ 编写的、高性能的 JavaScript 引擎,用于 Google Chrome。计算机只能理解机器语言,而无法理解 JavaScript 或 HTML 对象。
📋 目录
  1. 引入 V8 模块
  2. 打印 V8 堆的统计信息
  3. 打印 V8 堆空间的统计信息
  4. V8 模块方法
  5. Serialization API 方法
  6. Serializer 方法
  7. Deserializer 方法
A A

Node.js - V8 模块



Previous
Quiz
Next

Chrome V8 引擎 是一个用 C++ 编写的、高性能的 JavaScript 引擎,用于 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 版本派生的堆统计信息。

Serialization API 方法

以下是 Serialization API 中可用的方法列表 −

序号 模块 & 描述
1

serialize()

用于将任何数据类型序列化为 buffer。

2

deserialize()

用于将 buffer 值反序列化为 JavaScript 值。

Serializer 方法

以下是 v8.Serializer class 中可用的方法列表 −

序号 模块 & 描述
1

writeHeader()

用于将 header 写入内部 buffer。

2

writeValue()

用于序列化 JavaScript 值,并将序列化表示添加到内部 buffer 中

3

releaseBuffer()

用于获取内部 buffer 中存储的值。

4

writeUnit32()

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

5

writeUnit64()

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

6

writeDouble()

用于将 JavaScript number 值写入内部 buffer。

7

writeRawBytes()

用于将原始字节写入 serializer 的内部 buffer。

Deserializer 方法

以下是 v8.Deserializer class 中可用的方法列表 −

序号 模块 & 描述
1

readHeader()

用于读取并验证内部 buffer 中的 header。

2

readValue()

用于反序列化写入内部 buffer 中的 JavaScript 值。

3

readUnit32()

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

4

readUnit64()

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

5

readRawBytes()

用于从 deserializer 的内部 buffer 中读取原始字节。