Lay a gradient (transparent → bright → transparent) over a grey block as a background-image and animate background-position. Make background-size much wider than the element itself so the light band eases in and out smoothly.
It reads as "something is actively happening" better than a flat pulsing skeleton, which improves perceived performance regardless of actual load time.
When to use
Use it only when the actual load genuinely takes over a second. Adding a skeleton to content that loads instantly makes it look slower, not faster.