• 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()

用於從反序列化器的內部緩衝區讀取原始位元組。

廣告