Make WordPress Core


Ignore:
Timestamp:
09/26/2023 01:45:23 PM (2 years ago)
Author:
SergeyBiryukov
Message:

Editor: Reduce the use of the _wp_array_get() function to improve performance.

_wp_array_get() is an expensive function, and it's called thousands of times on each page view on the front end. While the function performance was slightly improved in #58376, it is still called more times than it should be.

This commit aims to further optimize its usage:

  • In many cases, _wp_array_get() can be replaced with a much simpler and faster isset() check.
  • The isset() function is capable of checking nested arrays, so isset( $foo['a']['b']['c'] ) will return false even if $foo['a'] is unset, without throwing any errors or warnings.
  • When _wp_array_get() cannot be directly replaced with isset(), it would be good practice to wrap it in an isset() function so that _wp_array_get() only runs when it needs to.

Original PR from Gutenberg repository:

Follow-up to [55851], [56382].

Props aristath, jrf, spacedmonkey, mukesh27, swissspidy, hellofromTonya.
Fixes #59405.

File:
1 edited

Legend:

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

    r56680 r56709  
    176176        }
    177177
    178         $element_style_object = _wp_array_get( $element_block_styles, array( $element_type ), null );
     178        $element_style_object = isset( $element_block_styles[ $element_type ] ) ? $element_block_styles[ $element_type ] : null;
    179179
    180180        // Process primary element type styles.
     
    202202        if ( isset( $element_config['elements'] ) ) {
    203203            foreach ( $element_config['elements'] as $element ) {
    204                 $element_style_object = _wp_array_get( $element_block_styles, array( $element ), null );
     204                $element_style_object = isset( $element_block_styles[ $element ] )
     205                    ? $element_block_styles[ $element ]
     206                    : null;
    205207
    206208                if ( $element_style_object ) {
Note: See TracChangeset for help on using the changeset viewer.