Snapshotting
If you’ve read about event sourcing, you’ve likely read about snapshotting. You might also have heartburn from reading that our projections work by reloading all the events in a stream every time we need to project them. Snapshotting is a performance enhancement that makes it so that we don’t need to keep projecting entire streams when we need an entity.
Since streams are append-only logs of immutable events, their underlying data can’t change. When you implemented projections back in Chapter 7, Implementing Your First Component, you loaded a stream’s events and ran them through a call to Array.prototype.reduce, passing in the result of calling a projection’s $init property as the starting point. Let’s consider this in the context ...