2014-12-09 22:57:48 +01:00
|
|
|
|
# V8
|
|
|
|
|
|
2017-01-23 04:16:21 +01:00
|
|
|
|
<!--introduced_in=v4.0.0-->
|
|
|
|
|
|
2016-05-18 07:11:57 +02:00
|
|
|
|
The `v8` module exposes APIs that are specific to the version of [V8][]
|
|
|
|
|
built into the Node.js binary. It can be accessed using:
|
2014-12-09 22:57:48 +01:00
|
|
|
|
|
2016-05-18 07:11:57 +02:00
|
|
|
|
```js
|
|
|
|
|
const v8 = require('v8');
|
|
|
|
|
```
|
|
|
|
|
|
2018-02-06 06:55:16 +01:00
|
|
|
|
The APIs and implementation are subject to change at any time.
|
2014-12-09 22:57:48 +01:00
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
## `v8.cachedDataVersionTag()`
|
2017-02-23 08:04:48 +01:00
|
|
|
|
<!-- YAML
|
2017-03-16 04:26:14 +01:00
|
|
|
|
added: v8.0.0
|
2017-02-23 08:04:48 +01:00
|
|
|
|
-->
|
|
|
|
|
|
2018-04-11 20:07:14 +02:00
|
|
|
|
* Returns: {integer}
|
|
|
|
|
|
2017-02-23 08:04:48 +01:00
|
|
|
|
Returns an integer representing a "version tag" derived from the V8 version,
|
|
|
|
|
command line flags and detected CPU features. This is useful for determining
|
|
|
|
|
whether a [`vm.Script`][] `cachedData` buffer is compatible with this instance
|
|
|
|
|
of V8.
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
## `v8.getHeapSpaceStatistics()`
|
2016-05-11 05:21:30 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v6.0.0
|
2017-02-21 23:38:50 +01:00
|
|
|
|
changes:
|
|
|
|
|
- version: v7.5.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/10186
|
|
|
|
|
description: Support values exceeding the 32-bit unsigned integer range.
|
2016-05-11 05:21:30 +02:00
|
|
|
|
-->
|
2015-12-29 11:54:35 +01:00
|
|
|
|
|
2018-04-11 20:07:14 +02:00
|
|
|
|
* Returns: {Object[]}
|
|
|
|
|
|
2015-12-29 11:54:35 +01:00
|
|
|
|
Returns statistics about the V8 heap spaces, i.e. the segments which make up
|
2016-05-18 07:11:57 +02:00
|
|
|
|
the V8 heap. Neither the ordering of heap spaces, nor the availability of a
|
|
|
|
|
heap space can be guaranteed as the statistics are provided via the V8
|
|
|
|
|
[`GetHeapSpaceStatistics`][] function and may change from one V8 version to the
|
|
|
|
|
next.
|
|
|
|
|
|
|
|
|
|
The value returned is an array of objects containing the following properties:
|
2019-09-06 07:42:22 +02:00
|
|
|
|
|
2016-05-18 07:11:57 +02:00
|
|
|
|
* `space_name` {string}
|
|
|
|
|
* `space_size` {number}
|
|
|
|
|
* `space_used_size` {number}
|
|
|
|
|
* `space_available_size` {number}
|
|
|
|
|
* `physical_space_size` {number}
|
2015-12-29 11:54:35 +01:00
|
|
|
|
|
2016-07-09 07:13:09 +02:00
|
|
|
|
```json
|
2015-12-29 11:54:35 +01:00
|
|
|
|
[
|
|
|
|
|
{
|
|
|
|
|
"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
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
```
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
## `v8.getHeapSnapshot()`
|
2019-03-07 17:51:36 +01:00
|
|
|
|
<!-- YAML
|
2019-03-27 22:43:03 +01:00
|
|
|
|
added: v11.13.0
|
2019-03-07 17:51:36 +01:00
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
* Returns: {stream.Readable} A Readable Stream containing the V8 heap snapshot
|
|
|
|
|
|
|
|
|
|
Generates a snapshot of the current V8 heap and returns a Readable
|
|
|
|
|
Stream that may be used to read the JSON serialized representation.
|
|
|
|
|
This JSON stream format is intended to be used with tools such as
|
|
|
|
|
Chrome DevTools. The JSON schema is undocumented and specific to the
|
|
|
|
|
V8 engine, and may change from one version of V8 to the next.
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const stream = v8.getHeapSnapshot();
|
|
|
|
|
stream.pipe(process.stdout);
|
|
|
|
|
```
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
## `v8.getHeapStatistics()`
|
2017-02-13 03:49:35 +01:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v1.0.0
|
2017-02-21 23:38:50 +01:00
|
|
|
|
changes:
|
|
|
|
|
- version: v7.2.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/8610
|
|
|
|
|
description: Added `malloced_memory`, `peak_malloced_memory`,
|
|
|
|
|
and `does_zap_garbage`.
|
|
|
|
|
- version: v7.5.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/10186
|
|
|
|
|
description: Support values exceeding the 32-bit unsigned integer range.
|
2017-02-13 03:49:35 +01:00
|
|
|
|
-->
|
|
|
|
|
|
2018-04-11 20:07:14 +02:00
|
|
|
|
* Returns: {Object}
|
|
|
|
|
|
2017-02-13 03:49:35 +01:00
|
|
|
|
Returns an object with the following properties:
|
|
|
|
|
|
|
|
|
|
* `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}
|
2019-05-28 12:41:12 +02:00
|
|
|
|
* `number_of_native_contexts` {number}
|
|
|
|
|
* `number_of_detached_contexts` {number}
|
|
|
|
|
|
2018-02-12 08:31:55 +01:00
|
|
|
|
`does_zap_garbage` is a 0/1 boolean, which signifies whether the
|
|
|
|
|
`--zap_code_space` option is enabled or not. This makes V8 overwrite heap
|
|
|
|
|
garbage with a bit pattern. The RSS footprint (resident memory set) gets bigger
|
|
|
|
|
because it continuously touches all heap pages and that makes them less likely
|
|
|
|
|
to get swapped out by the operating system.
|
2017-02-13 03:49:35 +01:00
|
|
|
|
|
2019-05-28 12:41:12 +02:00
|
|
|
|
`number_of_native_contexts` The value of native_context is the number of the
|
|
|
|
|
top-level contexts currently active. Increase of this number over time indicates
|
|
|
|
|
a memory leak.
|
|
|
|
|
|
|
|
|
|
`number_of_detached_contexts` The value of detached_context is the number
|
|
|
|
|
of contexts that were detached and not yet garbage collected. This number
|
|
|
|
|
being non-zero indicates a potential memory leak.
|
|
|
|
|
|
2017-07-03 02:05:59 +02:00
|
|
|
|
<!-- eslint-skip -->
|
2017-02-13 03:49:35 +01:00
|
|
|
|
```js
|
|
|
|
|
{
|
|
|
|
|
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,
|
2019-05-28 12:41:12 +02:00
|
|
|
|
does_zap_garbage: 0,
|
|
|
|
|
number_of_native_contexts: 1,
|
|
|
|
|
number_of_detached_contexts: 0
|
2017-02-13 03:49:35 +01:00
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
## `v8.getHeapCodeStatistics()`
|
2019-05-30 15:41:03 +02:00
|
|
|
|
<!-- YAML
|
2019-08-06 15:06:33 +02:00
|
|
|
|
added: v12.8.0
|
2019-05-30 15:41:03 +02:00
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
* Returns: {Object}
|
|
|
|
|
|
|
|
|
|
Returns an object with the following properties:
|
|
|
|
|
|
|
|
|
|
* `code_and_metadata_size` {number}
|
|
|
|
|
* `bytecode_and_metadata_size` {number}
|
|
|
|
|
* `external_script_source_size` {number}
|
|
|
|
|
|
|
|
|
|
<!-- eslint-skip -->
|
|
|
|
|
```js
|
|
|
|
|
{
|
|
|
|
|
code_and_metadata_size: 212208,
|
|
|
|
|
bytecode_and_metadata_size: 161368,
|
|
|
|
|
external_script_source_size: 1410794
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
## `v8.setFlagsFromString(flags)`
|
2016-05-11 05:21:30 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v1.0.0
|
|
|
|
|
-->
|
2019-09-06 07:42:22 +02:00
|
|
|
|
|
2017-10-27 01:31:23 +02:00
|
|
|
|
* `flags` {string}
|
2014-12-09 22:57:48 +01:00
|
|
|
|
|
2016-11-15 18:56:15 +01:00
|
|
|
|
The `v8.setFlagsFromString()` method can be used to programmatically set
|
2016-05-18 07:11:57 +02:00
|
|
|
|
V8 command line flags. This method should be used with care. Changing settings
|
2014-12-09 22:57:48 +01:00
|
|
|
|
after the VM has started may result in unpredictable behavior, including
|
2016-05-18 07:11:57 +02:00
|
|
|
|
crashes and data loss; or it may simply do nothing.
|
2014-12-09 22:57:48 +01:00
|
|
|
|
|
2015-12-07 20:20:50 +01:00
|
|
|
|
The V8 options available for a version of Node.js may be determined by running
|
2019-04-08 03:18:27 +02:00
|
|
|
|
`node --v8-options`.
|
2014-12-09 22:57:48 +01:00
|
|
|
|
|
|
|
|
|
Usage:
|
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2014-12-09 22:57:48 +01:00
|
|
|
|
// Print GC events to stdout for one minute.
|
2015-12-15 00:20:25 +01:00
|
|
|
|
const v8 = require('v8');
|
2014-12-09 22:57:48 +01:00
|
|
|
|
v8.setFlagsFromString('--trace_gc');
|
2018-11-24 08:00:12 +01:00
|
|
|
|
setTimeout(() => { v8.setFlagsFromString('--notrace_gc'); }, 60e3);
|
2014-12-09 22:57:48 +01:00
|
|
|
|
```
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
## `v8.writeHeapSnapshot([filename])`
|
2019-03-07 17:51:36 +01:00
|
|
|
|
<!-- YAML
|
2019-03-27 22:43:03 +01:00
|
|
|
|
added: v11.13.0
|
2019-03-07 17:51:36 +01:00
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
* `filename` {string} The file path where the V8 heap snapshot is to be
|
|
|
|
|
saved. If not specified, a file name with the pattern
|
|
|
|
|
`'Heap-${yyyymmdd}-${hhmmss}-${pid}-${thread_id}.heapsnapshot'` will be
|
|
|
|
|
generated, where `{pid}` will be the PID of the Node.js process,
|
|
|
|
|
`{thread_id}` will be `0` when `writeHeapSnapshot()` is called from
|
|
|
|
|
the main Node.js thread or the id of a worker thread.
|
|
|
|
|
* Returns: {string} The filename where the snapshot was saved.
|
|
|
|
|
|
|
|
|
|
Generates a snapshot of the current V8 heap and writes it to a JSON
|
|
|
|
|
file. This file is intended to be used with tools such as Chrome
|
|
|
|
|
DevTools. The JSON schema is undocumented and specific to the V8
|
|
|
|
|
engine, and may change from one version of V8 to the next.
|
|
|
|
|
|
|
|
|
|
A heap snapshot is specific to a single V8 isolate. When using
|
2020-06-14 23:49:34 +02:00
|
|
|
|
[worker threads][], a heap snapshot generated from the main thread will
|
2019-03-07 17:51:36 +01:00
|
|
|
|
not contain any information about the workers, and vice versa.
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const { writeHeapSnapshot } = require('v8');
|
|
|
|
|
const {
|
|
|
|
|
Worker,
|
|
|
|
|
isMainThread,
|
|
|
|
|
parentPort
|
|
|
|
|
} = require('worker_threads');
|
|
|
|
|
|
|
|
|
|
if (isMainThread) {
|
|
|
|
|
const worker = new Worker(__filename);
|
|
|
|
|
|
|
|
|
|
worker.once('message', (filename) => {
|
|
|
|
|
console.log(`worker heapdump: ${filename}`);
|
|
|
|
|
// Now get a heapdump for the main thread.
|
|
|
|
|
console.log(`main thread heapdump: ${writeHeapSnapshot()}`);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Tell the worker to create a heapdump.
|
|
|
|
|
worker.postMessage('heapdump');
|
|
|
|
|
} else {
|
|
|
|
|
parentPort.once('message', (message) => {
|
|
|
|
|
if (message === 'heapdump') {
|
|
|
|
|
// Generate a heapdump for the worker
|
|
|
|
|
// and return the filename to the parent.
|
|
|
|
|
parentPort.postMessage(writeHeapSnapshot());
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2017-01-27 06:38:11 +01:00
|
|
|
|
## Serialization API
|
|
|
|
|
|
|
|
|
|
The serialization API provides means of serializing JavaScript values in a way
|
|
|
|
|
that is compatible with the [HTML structured clone algorithm][].
|
2020-01-28 13:59:25 +01:00
|
|
|
|
|
2017-01-27 06:38:11 +01:00
|
|
|
|
The format is backward-compatible (i.e. safe to store to disk).
|
2020-01-28 13:59:25 +01:00
|
|
|
|
Equal JavaScript values may result in different serialized output.
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
### `v8.serialize(value)`
|
2018-04-14 04:37:43 +02:00
|
|
|
|
<!-- YAML
|
2017-03-16 04:26:14 +01:00
|
|
|
|
added: v8.0.0
|
2017-01-27 06:38:11 +01:00
|
|
|
|
-->
|
|
|
|
|
|
2018-07-12 19:48:11 +02:00
|
|
|
|
* `value` {any}
|
2017-01-27 06:38:11 +01:00
|
|
|
|
* Returns: {Buffer}
|
|
|
|
|
|
|
|
|
|
Uses a [`DefaultSerializer`][] to serialize `value` into a buffer.
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
### `v8.deserialize(buffer)`
|
2018-04-14 04:37:43 +02:00
|
|
|
|
<!-- YAML
|
2017-03-16 04:26:14 +01:00
|
|
|
|
added: v8.0.0
|
2017-01-27 06:38:11 +01:00
|
|
|
|
-->
|
|
|
|
|
|
2018-10-29 12:36:19 +01:00
|
|
|
|
* `buffer` {Buffer|TypedArray|DataView} A buffer returned by [`serialize()`][].
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
Uses a [`DefaultDeserializer`][] with default options to read a JS value
|
|
|
|
|
from a buffer.
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
### Class: `v8.Serializer`
|
2018-04-14 04:37:43 +02:00
|
|
|
|
<!-- YAML
|
2017-03-16 04:26:14 +01:00
|
|
|
|
added: v8.0.0
|
2017-01-27 06:38:11 +01:00
|
|
|
|
-->
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `new Serializer()`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
Creates a new `Serializer` object.
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `serializer.writeHeader()`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
Writes out a header, which includes the serialization format version.
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `serializer.writeValue(value)`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
2018-07-12 19:48:11 +02:00
|
|
|
|
* `value` {any}
|
|
|
|
|
|
2017-01-27 06:38:11 +01:00
|
|
|
|
Serializes a JavaScript value and adds the serialized representation to the
|
|
|
|
|
internal buffer.
|
|
|
|
|
|
|
|
|
|
This throws an error if `value` cannot be serialized.
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `serializer.releaseBuffer()`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
2018-04-11 20:07:14 +02:00
|
|
|
|
* Returns: {Buffer}
|
|
|
|
|
|
2017-01-27 06:38:11 +01:00
|
|
|
|
Returns the stored internal buffer. This serializer should not be used once
|
|
|
|
|
the buffer is released. Calling this method results in undefined behavior
|
|
|
|
|
if a previous write has failed.
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `serializer.transferArrayBuffer(id, arrayBuffer)`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
* `id` {integer} A 32-bit unsigned integer.
|
|
|
|
|
* `arrayBuffer` {ArrayBuffer} An `ArrayBuffer` instance.
|
|
|
|
|
|
2019-02-26 07:30:23 +01:00
|
|
|
|
Marks an `ArrayBuffer` as having its contents transferred out of band.
|
2017-01-27 06:38:11 +01:00
|
|
|
|
Pass the corresponding `ArrayBuffer` in the deserializing context to
|
|
|
|
|
[`deserializer.transferArrayBuffer()`][].
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `serializer.writeUint32(value)`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
* `value` {integer}
|
|
|
|
|
|
|
|
|
|
Write a raw 32-bit unsigned integer.
|
|
|
|
|
For use inside of a custom [`serializer._writeHostObject()`][].
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `serializer.writeUint64(hi, lo)`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
* `hi` {integer}
|
|
|
|
|
* `lo` {integer}
|
|
|
|
|
|
|
|
|
|
Write a raw 64-bit unsigned integer, split into high and low 32-bit parts.
|
|
|
|
|
For use inside of a custom [`serializer._writeHostObject()`][].
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `serializer.writeDouble(value)`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
* `value` {number}
|
|
|
|
|
|
|
|
|
|
Write a JS `number` value.
|
|
|
|
|
For use inside of a custom [`serializer._writeHostObject()`][].
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `serializer.writeRawBytes(buffer)`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
2018-10-29 12:36:19 +01:00
|
|
|
|
* `buffer` {Buffer|TypedArray|DataView}
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
Write raw bytes into the serializer’s internal buffer. The deserializer
|
|
|
|
|
will require a way to compute the length of the buffer.
|
|
|
|
|
For use inside of a custom [`serializer._writeHostObject()`][].
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `serializer._writeHostObject(object)`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
* `object` {Object}
|
|
|
|
|
|
|
|
|
|
This method is called to write some kind of host object, i.e. an object created
|
|
|
|
|
by native C++ bindings. If it is not possible to serialize `object`, a suitable
|
|
|
|
|
exception should be thrown.
|
|
|
|
|
|
|
|
|
|
This method is not present on the `Serializer` class itself but can be provided
|
|
|
|
|
by subclasses.
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `serializer._getDataCloneError(message)`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
* `message` {string}
|
|
|
|
|
|
|
|
|
|
This method is called to generate error objects that will be thrown when an
|
|
|
|
|
object can not be cloned.
|
|
|
|
|
|
2017-12-31 10:45:43 +01:00
|
|
|
|
This method defaults to the [`Error`][] constructor and can be overridden on
|
2017-01-27 06:38:11 +01:00
|
|
|
|
subclasses.
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `serializer._getSharedArrayBufferId(sharedArrayBuffer)`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
* `sharedArrayBuffer` {SharedArrayBuffer}
|
|
|
|
|
|
|
|
|
|
This method is called when the serializer is going to serialize a
|
|
|
|
|
`SharedArrayBuffer` object. It must return an unsigned 32-bit integer ID for
|
|
|
|
|
the object, using the same ID if this `SharedArrayBuffer` has already been
|
|
|
|
|
serialized. When deserializing, this ID will be passed to
|
|
|
|
|
[`deserializer.transferArrayBuffer()`][].
|
|
|
|
|
|
|
|
|
|
If the object cannot be serialized, an exception should be thrown.
|
|
|
|
|
|
|
|
|
|
This method is not present on the `Serializer` class itself but can be provided
|
|
|
|
|
by subclasses.
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `serializer._setTreatArrayBufferViewsAsHostObjects(flag)`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
2018-04-02 03:44:32 +02:00
|
|
|
|
* `flag` {boolean} **Default:** `false`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
Indicate whether to treat `TypedArray` and `DataView` objects as
|
2017-07-20 20:01:51 +02:00
|
|
|
|
host objects, i.e. pass them to [`serializer._writeHostObject()`][].
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
### Class: `v8.Deserializer`
|
2018-04-14 04:37:43 +02:00
|
|
|
|
<!-- YAML
|
2017-03-16 04:26:14 +01:00
|
|
|
|
added: v8.0.0
|
2017-01-27 06:38:11 +01:00
|
|
|
|
-->
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `new Deserializer(buffer)`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
2018-10-29 12:36:19 +01:00
|
|
|
|
* `buffer` {Buffer|TypedArray|DataView} A buffer returned by
|
2018-02-12 08:31:55 +01:00
|
|
|
|
[`serializer.releaseBuffer()`][].
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
Creates a new `Deserializer` object.
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `deserializer.readHeader()`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
Reads and validates a header (including the format version).
|
|
|
|
|
May, for example, reject an invalid or unsupported wire format. In that case,
|
|
|
|
|
an `Error` is thrown.
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `deserializer.readValue()`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
Deserializes a JavaScript value from the buffer and returns it.
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `deserializer.transferArrayBuffer(id, arrayBuffer)`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
* `id` {integer} A 32-bit unsigned integer.
|
|
|
|
|
* `arrayBuffer` {ArrayBuffer|SharedArrayBuffer} An `ArrayBuffer` instance.
|
|
|
|
|
|
2019-02-26 07:30:23 +01:00
|
|
|
|
Marks an `ArrayBuffer` as having its contents transferred out of band.
|
2017-01-27 06:38:11 +01:00
|
|
|
|
Pass the corresponding `ArrayBuffer` in the serializing context to
|
|
|
|
|
[`serializer.transferArrayBuffer()`][] (or return the `id` from
|
|
|
|
|
[`serializer._getSharedArrayBufferId()`][] in the case of `SharedArrayBuffer`s).
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `deserializer.getWireFormatVersion()`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
* Returns: {integer}
|
|
|
|
|
|
|
|
|
|
Reads the underlying wire format version. Likely mostly to be useful to
|
|
|
|
|
legacy code reading old wire format versions. May not be called before
|
|
|
|
|
`.readHeader()`.
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `deserializer.readUint32()`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
* Returns: {integer}
|
|
|
|
|
|
|
|
|
|
Read a raw 32-bit unsigned integer and return it.
|
|
|
|
|
For use inside of a custom [`deserializer._readHostObject()`][].
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `deserializer.readUint64()`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
2018-04-09 14:25:04 +02:00
|
|
|
|
* Returns: {integer[]}
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
Read a raw 64-bit unsigned integer and return it as an array `[hi, lo]`
|
|
|
|
|
with two 32-bit unsigned integer entries.
|
|
|
|
|
For use inside of a custom [`deserializer._readHostObject()`][].
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `deserializer.readDouble()`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
* Returns: {number}
|
|
|
|
|
|
|
|
|
|
Read a JS `number` value.
|
|
|
|
|
For use inside of a custom [`deserializer._readHostObject()`][].
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `deserializer.readRawBytes(length)`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
2018-07-12 19:48:11 +02:00
|
|
|
|
* `length` {integer}
|
2017-01-27 06:38:11 +01:00
|
|
|
|
* Returns: {Buffer}
|
|
|
|
|
|
|
|
|
|
Read raw bytes from the deserializer’s internal buffer. The `length` parameter
|
|
|
|
|
must correspond to the length of the buffer that was passed to
|
|
|
|
|
[`serializer.writeRawBytes()`][].
|
|
|
|
|
For use inside of a custom [`deserializer._readHostObject()`][].
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
#### `deserializer._readHostObject()`
|
2017-01-27 06:38:11 +01:00
|
|
|
|
|
|
|
|
|
This method is called to read some kind of host object, i.e. an object that is
|
|
|
|
|
created by native C++ bindings. If it is not possible to deserialize the data,
|
|
|
|
|
a suitable exception should be thrown.
|
|
|
|
|
|
|
|
|
|
This method is not present on the `Deserializer` class itself but can be
|
|
|
|
|
provided by subclasses.
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
### Class: `v8.DefaultSerializer`
|
2018-04-14 04:37:43 +02:00
|
|
|
|
<!-- YAML
|
2017-03-16 04:26:14 +01:00
|
|
|
|
added: v8.0.0
|
2017-01-27 06:38:11 +01:00
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
A subclass of [`Serializer`][] that serializes `TypedArray`
|
|
|
|
|
(in particular [`Buffer`][]) and `DataView` objects as host objects, and only
|
|
|
|
|
stores the part of their underlying `ArrayBuffer`s that they are referring to.
|
|
|
|
|
|
2019-12-25 00:56:57 +01:00
|
|
|
|
### Class: `v8.DefaultDeserializer`
|
2018-04-14 04:37:43 +02:00
|
|
|
|
<!-- YAML
|
2017-03-16 04:26:14 +01:00
|
|
|
|
added: v8.0.0
|
2017-01-27 06:38:11 +01:00
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
A subclass of [`Deserializer`][] corresponding to the format written by
|
|
|
|
|
[`DefaultSerializer`][].
|
|
|
|
|
|
|
|
|
|
[`Buffer`]: buffer.html
|
2017-05-08 18:30:13 +02:00
|
|
|
|
[`DefaultDeserializer`]: #v8_class_v8_defaultdeserializer
|
|
|
|
|
[`DefaultSerializer`]: #v8_class_v8_defaultserializer
|
|
|
|
|
[`Deserializer`]: #v8_class_v8_deserializer
|
2017-01-27 06:38:11 +01:00
|
|
|
|
[`Error`]: errors.html#errors_class_error
|
2020-01-08 13:56:25 +01:00
|
|
|
|
[`GetHeapSpaceStatistics`]: https://v8docs.nodesource.com/node-13.2/d5/dda/classv8_1_1_isolate.html#ac673576f24fdc7a33378f8f57e1d13a4
|
2017-05-08 18:30:13 +02:00
|
|
|
|
[`Serializer`]: #v8_class_v8_serializer
|
2017-01-27 06:38:11 +01:00
|
|
|
|
[`deserializer._readHostObject()`]: #v8_deserializer_readhostobject
|
2017-05-08 18:30:13 +02:00
|
|
|
|
[`deserializer.transferArrayBuffer()`]: #v8_deserializer_transferarraybuffer_id_arraybuffer
|
|
|
|
|
[`serialize()`]: #v8_v8_serialize_value
|
|
|
|
|
[`serializer._getSharedArrayBufferId()`]: #v8_serializer_getsharedarraybufferid_sharedarraybuffer
|
|
|
|
|
[`serializer._writeHostObject()`]: #v8_serializer_writehostobject_object
|
2017-01-27 06:38:11 +01:00
|
|
|
|
[`serializer.releaseBuffer()`]: #v8_serializer_releasebuffer
|
2017-05-08 18:30:13 +02:00
|
|
|
|
[`serializer.transferArrayBuffer()`]: #v8_serializer_transferarraybuffer_id_arraybuffer
|
2017-01-27 06:38:11 +01:00
|
|
|
|
[`serializer.writeRawBytes()`]: #v8_serializer_writerawbytes_buffer
|
2020-06-07 07:06:34 +02:00
|
|
|
|
[`vm.Script`]: vm.html#vm_new_vm_script_code_options
|
2017-01-27 06:38:11 +01:00
|
|
|
|
[HTML structured clone algorithm]: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm
|
2017-05-26 11:19:20 +02:00
|
|
|
|
[V8]: https://developers.google.com/v8/
|
2020-06-14 23:49:34 +02:00
|
|
|
|
[worker threads]: worker_threads.html
|