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:
* [https://github.com/WordPress/gutenberg/pull/51116 #51116 Performance improvement: Reduce the use of the _wp_array_get() function]

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

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

git-svn-id: https://develop.svn.wordpress.org/trunk@56709 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Sergey Biryukov
2023-09-26 13:45:23 +00:00
parent a52838d1b1
commit e77aaf1bae
15 changed files with 189 additions and 105 deletions

View File

@@ -4253,7 +4253,9 @@ function wp_render_duotone_filter_preset( $preset ) {
function wp_skip_border_serialization( $block_type ) {
_deprecated_function( __FUNCTION__, '6.0.0', 'wp_should_skip_block_supports_serialization()' );
$border_support = _wp_array_get( $block_type->supports, array( '__experimentalBorder' ), false );
$border_support = isset( $block_type->supports['__experimentalBorder'] )
? $block_type->supports['__experimentalBorder']
: false;
return is_array( $border_support ) &&
array_key_exists( '__experimentalSkipSerialization', $border_support ) &&
@@ -4275,7 +4277,9 @@ function wp_skip_border_serialization( $block_type ) {
function wp_skip_dimensions_serialization( $block_type ) {
_deprecated_function( __FUNCTION__, '6.0.0', 'wp_should_skip_block_supports_serialization()' );
$dimensions_support = _wp_array_get( $block_type->supports, array( '__experimentalDimensions' ), false );
$dimensions_support = isset( $block_type->supports['__experimentalDimensions'] )
? $block_type->supports['__experimentalDimensions']
: false;
return is_array( $dimensions_support ) &&
array_key_exists( '__experimentalSkipSerialization', $dimensions_support ) &&
@@ -4297,7 +4301,9 @@ function wp_skip_dimensions_serialization( $block_type ) {
function wp_skip_spacing_serialization( $block_type ) {
_deprecated_function( __FUNCTION__, '6.0.0', 'wp_should_skip_block_supports_serialization()' );
$spacing_support = _wp_array_get( $block_type->supports, array( 'spacing' ), false );
$spacing_support = isset( $block_type->supports['spacing'] )
? $block_type->supports['spacing']
: false;
return is_array( $spacing_support ) &&
array_key_exists( '__experimentalSkipSerialization', $spacing_support ) &&