mirror of
https://github.com/WordPress/WordPress.git
synced 2024-12-23 01:27:36 +01:00
Themes: Improve performance of applying background image styles in theme.json
.
The cost of using `WP_Theme_JSON::get_block_nodes()` for this in its original shape was high enough to lead to a performance regression. Therefore this changeset introduces a new option on the method that allows to bypass all logic except for retrieving the node paths, which is much faster and everything that this functionality needs. Follow up to [58936]. Props mukesh27, flixos90, ramonopoly, joemcgill, andrewserong, swissspidy. Fixes #61858. Built from https://develop.svn.wordpress.org/trunk@59213 git-svn-id: http://core.svn.wordpress.org/trunk@58606 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
2234d91da2
commit
d7fd9dc225
@ -2690,13 +2690,15 @@ class WP_Theme_JSON {
|
|||||||
* @since 6.1.0
|
* @since 6.1.0
|
||||||
* @since 6.3.0 Refactored and stabilized selectors API.
|
* @since 6.3.0 Refactored and stabilized selectors API.
|
||||||
* @since 6.6.0 Added optional selectors and options for generating block nodes.
|
* @since 6.6.0 Added optional selectors and options for generating block nodes.
|
||||||
|
* @since 6.7.0 Added $include_node_paths_only option.
|
||||||
*
|
*
|
||||||
* @param array $theme_json The theme.json converted to an array.
|
* @param array $theme_json The theme.json converted to an array.
|
||||||
* @param array $selectors Optional list of selectors per block.
|
* @param array $selectors Optional list of selectors per block.
|
||||||
* @param array $options {
|
* @param array $options {
|
||||||
* Optional. An array of options for now used for internal purposes only (may change without notice).
|
* Optional. An array of options for now used for internal purposes only (may change without notice).
|
||||||
*
|
*
|
||||||
* @type bool $include_block_style_variations Includes nodes for block style variations. Default false.
|
* @type bool $include_block_style_variations Include nodes for block style variations. Default false.
|
||||||
|
* @type bool $include_node_paths_only Return only block nodes node paths. Default false.
|
||||||
* }
|
* }
|
||||||
* @return array The block nodes in theme.json.
|
* @return array The block nodes in theme.json.
|
||||||
*/
|
*/
|
||||||
@ -2712,7 +2714,16 @@ class WP_Theme_JSON {
|
|||||||
return $nodes;
|
return $nodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$include_variations = $options['include_block_style_variations'] ?? false;
|
||||||
|
$include_node_paths_only = $options['include_node_paths_only'] ?? false;
|
||||||
|
|
||||||
foreach ( $theme_json['styles']['blocks'] as $name => $node ) {
|
foreach ( $theme_json['styles']['blocks'] as $name => $node ) {
|
||||||
|
$node_path = array( 'styles', 'blocks', $name );
|
||||||
|
if ( $include_node_paths_only ) {
|
||||||
|
$nodes[] = array(
|
||||||
|
'path' => $node_path,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
$selector = null;
|
$selector = null;
|
||||||
if ( isset( $selectors[ $name ]['selector'] ) ) {
|
if ( isset( $selectors[ $name ]['selector'] ) ) {
|
||||||
$selector = $selectors[ $name ]['selector'];
|
$selector = $selectors[ $name ]['selector'];
|
||||||
@ -2729,7 +2740,6 @@ class WP_Theme_JSON {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$variation_selectors = array();
|
$variation_selectors = array();
|
||||||
$include_variations = $options['include_block_style_variations'] ?? false;
|
|
||||||
if ( $include_variations && isset( $node['variations'] ) ) {
|
if ( $include_variations && isset( $node['variations'] ) ) {
|
||||||
foreach ( $node['variations'] as $variation => $node ) {
|
foreach ( $node['variations'] as $variation => $node ) {
|
||||||
$variation_selectors[] = array(
|
$variation_selectors[] = array(
|
||||||
@ -2741,7 +2751,7 @@ class WP_Theme_JSON {
|
|||||||
|
|
||||||
$nodes[] = array(
|
$nodes[] = array(
|
||||||
'name' => $name,
|
'name' => $name,
|
||||||
'path' => array( 'styles', 'blocks', $name ),
|
'path' => $node_path,
|
||||||
'selector' => $selector,
|
'selector' => $selector,
|
||||||
'selectors' => $feature_selectors,
|
'selectors' => $feature_selectors,
|
||||||
'duotone' => $duotone_selector,
|
'duotone' => $duotone_selector,
|
||||||
@ -2749,11 +2759,20 @@ class WP_Theme_JSON {
|
|||||||
'variations' => $variation_selectors,
|
'variations' => $variation_selectors,
|
||||||
'css' => $selector,
|
'css' => $selector,
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if ( isset( $theme_json['styles']['blocks'][ $name ]['elements'] ) ) {
|
if ( isset( $theme_json['styles']['blocks'][ $name ]['elements'] ) ) {
|
||||||
foreach ( $theme_json['styles']['blocks'][ $name ]['elements'] as $element => $node ) {
|
foreach ( $theme_json['styles']['blocks'][ $name ]['elements'] as $element => $node ) {
|
||||||
|
$node_path = array( 'styles', 'blocks', $name, 'elements', $element );
|
||||||
|
if ( $include_node_paths_only ) {
|
||||||
$nodes[] = array(
|
$nodes[] = array(
|
||||||
'path' => array( 'styles', 'blocks', $name, 'elements', $element ),
|
'path' => $node_path,
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$nodes[] = array(
|
||||||
|
'path' => $node_path,
|
||||||
'selector' => $selectors[ $name ]['elements'][ $element ],
|
'selector' => $selectors[ $name ]['elements'][ $element ],
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -2761,8 +2780,16 @@ class WP_Theme_JSON {
|
|||||||
if ( isset( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $element ] ) ) {
|
if ( isset( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $element ] ) ) {
|
||||||
foreach ( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $element ] as $pseudo_selector ) {
|
foreach ( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $element ] as $pseudo_selector ) {
|
||||||
if ( isset( $theme_json['styles']['blocks'][ $name ]['elements'][ $element ][ $pseudo_selector ] ) ) {
|
if ( isset( $theme_json['styles']['blocks'][ $name ]['elements'][ $element ][ $pseudo_selector ] ) ) {
|
||||||
|
$node_path = array( 'styles', 'blocks', $name, 'elements', $element );
|
||||||
|
if ( $include_node_paths_only ) {
|
||||||
$nodes[] = array(
|
$nodes[] = array(
|
||||||
'path' => array( 'styles', 'blocks', $name, 'elements', $element ),
|
'path' => $node_path,
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$nodes[] = array(
|
||||||
|
'path' => $node_path,
|
||||||
'selector' => static::append_to_selector( $selectors[ $name ]['elements'][ $element ], $pseudo_selector ),
|
'selector' => static::append_to_selector( $selectors[ $name ]['elements'][ $element ], $pseudo_selector ),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -3236,7 +3263,11 @@ class WP_Theme_JSON {
|
|||||||
* some values provide exceptions, namely style values that are
|
* some values provide exceptions, namely style values that are
|
||||||
* objects and represent unique definitions for the style.
|
* objects and represent unique definitions for the style.
|
||||||
*/
|
*/
|
||||||
$style_nodes = static::get_styles_block_nodes();
|
$style_nodes = static::get_block_nodes(
|
||||||
|
$this->theme_json,
|
||||||
|
array(),
|
||||||
|
array( 'include_node_paths_only' => true )
|
||||||
|
);
|
||||||
foreach ( $style_nodes as $style_node ) {
|
foreach ( $style_nodes as $style_node ) {
|
||||||
$path = $style_node['path'];
|
$path = $style_node['path'];
|
||||||
/*
|
/*
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
*
|
*
|
||||||
* @global string $wp_version
|
* @global string $wp_version
|
||||||
*/
|
*/
|
||||||
$wp_version = '6.7-beta2-59210';
|
$wp_version = '6.7-beta2-59213';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||||
|
Loading…
Reference in New Issue
Block a user