I think it's worth noting that fancier ways of showing loading usually take a lot more effort to implement so a loading spinner is a better-than-nothing default.
Skeleton UIs need to replicate and be kept in sync with your real UI implementation, progressively loaded images usually requires some server side pre-processing of the images and storing metadata, and calculating + receiving accurate server progress updates isn't trivial when the progress depends on unpredictable algorithms and multiple services.
Skeleton UIs need to replicate and be kept in sync with your real UI implementation, progressively loaded images usually requires some server side pre-processing of the images and storing metadata, and calculating + receiving accurate server progress updates isn't trivial when the progress depends on unpredictable algorithms and multiple services.