Snapshot
- Node.js course
- Expert
- Lesson 5/47
- 5 min
Learn V8 snapshot and fast startup.
V8 snapshot
V8's snapshot feature loads the initial state (built-in objects, prototypes) from a pre-serialized string. This skips rebuilding built-ins from scratch when Node.js starts, resulting in faster startup.
A serializeSnapshot(state) function models this idea: it turns a state into a reloadable string. Example: serializeSnapshot({port: 3000, host: 'localhost'}) returns 'host=localhost;port=3000'. Keys are sorted so the output is deterministic. Object.keys(state).sort() gets the keys, .map(k => k + '=' + state[k]) turns each into key=value, .join(';') combines them. This is a simple model of V8's serialization logic.
Sorting the keys
To make snapshot output deterministic we sort the keys. Object.keys(state).sort() puts keys in alphabetical order. This way the same state always yields the same string; this is essential for snapshot comparison.
Example: the keys of {port: 3000, host: 'localhost'} come as ['port', 'host'] (insertion order). .sort() turns this into ['host', 'port']. Then .map(k => k + '=' + state[k]) yields ['host=localhost', 'port=3000']. .join(';') produces 'host=localhost;port=3000'. Sorting guarantees the same output even if insertion order differs. V8 snapshots rely on this determinism.
Practice Write the snapshot serializer
Write function serializeSnapshot(state). Get and sort keys with const keys = Object.keys(state).sort(). Return keys.map(k => k + '=' + state[k]).join(';'). Print console.log(serializeSnapshot({port: 3000, host: 'localhost'})).
Starter code
// Write a serializeSnapshot function
// Get keys with Object.keys, sort them
// Join as 'key=value' with ';'
// Call with {port: 3000, host: 'localhost'} and print
// write hereSample solution
function serializeSnapshot(state) {
const keys = Object.keys(state).sort();
return keys.map(k => k + '=' + state[k]).join(';');
}
console.log(serializeSnapshot({port: 3000, host: 'localhost'}));Expected output
host=localhost;port=3000
Questions and answers
Review the lesson questions together with their answers. To test yourself, solve the lesson interactively.
1 Complete the join call
keys.map(k => k + '=' + state[k]).____(';')
keys.map(k => k + '=' + state[k]).join(';')
Explanation: join combines the array into a string.
2 Match each concept to its description
| Term | Meaning |
|---|---|
Snapshot |
Serializes initial state |
Object.keys |
Gets the keys |
.sort() |
Sorts alphabetically |
.join(';') |
Combines the array into a string |
3 What does Object.keys({b: 1, a: 2}).sort() produce?
Object.keys({b: 1, a: 2}).sort()- ['b', 'a']
- [1, 2]
- ['a', 'b'] Correct answer
- 'ab'
Explanation: sort orders alphabetically: ['a', 'b'].