A component, usually a block, that produces no output is now skipped: it is not added to its region. If every component in the section is skipped, the section itself is not rendered, so its layout and region markup are gone from the page.
The cacheability of a skipped component is kept, so cached pages are invalidated as before.
This is a structural check, made while the section is built: a component is skipped only when its render array holds nothing but #cache or #weight, which Element::isEmpty() considers empty. A component is still kept if it returns markup that renders as an empty string, attaches a #lazy_builder, or holds a placeholder that hook_entity_view_alter() replaces later, as extra field blocks do.
There are two exceptions:
- A section that has no components at all is unchanged and still renders as before.
- Preview is unaffected: nothing is skipped while a layout is being edited.
Implications
A layout with styling on its wrapper, such as margins, padding or a border, no longer leaves a visible gap where a section produced nothing.
A layout's preprocess functions and Twig template are skipped when the section is not rendered.
Custom layout plugins that inspect the regions passed to build() may receive fewer of them. A region where no component produced output is now missing, just like a region with no components.