Make WordPress Core

Changeset 55167


Ignore:
Timestamp:
01/31/2023 03:22:33 PM (2 years ago)
Author:
jorgefilipecosta
Message:

Update: Improve performance of gutenberg_render_layout_support_flag.

Backports https://github.com/WordPress/gutenberg/pull/46074 into the core.
render_layout_support_flag is run per block, and inside we called get_global_settings three times. get_global_settings calls get_merged_data, which is costly. render_layout_support_flag is a filter called during the block render. When the blocks start rendering, there is no expectation that the theme.json settings change during the block render, so the settings and their derived information should all be static information of this function.
This simple change removes 3*NUMBER_OF_BLOCKS calls of get_merged_data to just one call.

Props oandregal, aristath, felixarntz, tellthemachines, andrewserong, aaronrobertshaw, aaronrobertshaw.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/block-supports/layout.php

    r55086 r55167  
    317317    }
    318318
    319     $block_gap              = wp_get_global_settings( array( 'spacing', 'blockGap' ) );
    320     $global_layout_settings = wp_get_global_settings( array( 'layout' ) );
    321     $has_block_gap_support  = isset( $block_gap ) ? null !== $block_gap : false;
    322     $default_block_layout   = _wp_array_get( $block_type->supports, array( '__experimentalLayout', 'default' ), array() );
    323     $used_layout            = isset( $block['attrs']['layout'] ) ? $block['attrs']['layout'] : $default_block_layout;
    324 
    325     if ( isset( $used_layout['inherit'] ) && $used_layout['inherit'] ) {
    326         if ( ! $global_layout_settings ) {
    327             return $block_content;
    328         }
     319    $global_settings               = wp_get_global_settings();
     320    $block_gap                     = _wp_array_get( $global_settings, array( 'spacing', 'blockGap' ), null );
     321    $has_block_gap_support         = isset( $block_gap );
     322    $global_layout_settings        = _wp_array_get( $global_settings, array( 'layout' ), null );
     323    $root_padding_aware_alignments = _wp_array_get( $global_settings, array( 'useRootPaddingAwareAlignments' ), false );
     324
     325    $default_block_layout = _wp_array_get( $block_type->supports, array( '__experimentalLayout', 'default' ), array() );
     326    $used_layout          = isset( $block['attrs']['layout'] ) ? $block['attrs']['layout'] : $default_block_layout;
     327
     328    if ( isset( $used_layout['inherit'] ) && $used_layout['inherit'] && ! $global_layout_settings ) {
     329        return $block_content;
    329330    }
    330331
     
    341342
    342343    if (
    343         wp_get_global_settings( array( 'useRootPaddingAwareAlignments' ) ) &&
     344        $root_padding_aware_alignments &&
    344345        isset( $used_layout['type'] ) &&
    345346        'constrained' === $used_layout['type']
Note: See TracChangeset for help on using the changeset viewer.