Perceived wait time is driven by **uncertainty**, not the clock (see perceived-performance). "Loading..." gives no sense of what's happening or how much is left, so 3 seconds and 30 feel equally anxious.
Specific loading copy names the target ("images") and shows progress ("2 of 5"), so users can estimate the end. Multiple studies back the same finding: just knowing what's happening shrinks the perceived wait.
The demo's ✕ repeats the same phrase forever; ✓ visibly updates as progress moves.
When to use
Show a concrete target and progress for anything over ~2 seconds. Under a second, a bare spinner is enough — copy would just add noise.