Make WordPress Core


Ignore:
Timestamp:
09/26/2023 01:45:23 PM (7 months 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/class-wp-duotone.php

    r56226 r56709  
    972972         * treated as a selector and requires scoping.
    973973         */
    974         $experimental_duotone = _wp_array_get( $block_type->supports, array( 'color', '__experimentalDuotone' ), false );
     974        $experimental_duotone = isset( $block_type->supports['color']['__experimentalDuotone'] )
     975            ? $block_type->supports['color']['__experimentalDuotone']
     976            : false;
    975977        if ( $experimental_duotone ) {
    976978            $root_selector = wp_get_block_css_selector( $block_type );
     
    10011003        // Get the per block settings from the theme.json.
    10021004        $tree              = wp_get_global_settings();
    1003         $presets_by_origin = _wp_array_get( $tree, array( 'color', 'duotone' ), array() );
     1005        $presets_by_origin = isset( $tree['color']['duotone'] ) ? $tree['color']['duotone'] : array();
    10041006
    10051007        self::$global_styles_presets = array();
     
    12631265     */
    12641266    public static function migrate_experimental_duotone_support_flag( $settings, $metadata ) {
    1265         $duotone_support = _wp_array_get( $metadata, array( 'supports', 'color', '__experimentalDuotone' ), null );
     1267        $duotone_support = isset( $metadata['supports']['color']['__experimentalDuotone'] )
     1268            ? $metadata['supports']['color']['__experimentalDuotone']
     1269            : null;
    12661270
    12671271        if ( ! isset( $settings['supports']['filter']['duotone'] ) && null !== $duotone_support ) {
Note: See TracChangeset for help on using the changeset viewer.