Loading states are what the user sees while content is being prepared. How they are handled affects perceived speed just as much as the actual loading time. An empty white screen feels slower than an equally long wait accompanied by a hint of the content being prepared. It is good practice to show an outline of the page with placeholders for text and images, to add information about what is happening for longer operations, and not to show an indicator at all for very short loads, so that it does not flicker. It is equally important to reserve space for images and advertising blocks in advance, so that content does not jump around after loading – this is precisely one of the metrics used to evaluate user experience, and also a common cause of buttons being clicked by mistake. It is likewise worth handling the case where loading fails, and offering the option to retry the action instead of an empty screen.
See also: Core Web Vitals, Lazy loading, Error states and empty pages.