From d72667d7374b84ba54f63fbf958528282c194779 Mon Sep 17 00:00:00 2001 From: "K. Adam White" Date: Wed, 28 Jun 2023 15:53:26 +0000 Subject: [PATCH] REST API: Cache schema in block pattern and menu item endpoints. Performance improvement to add schema caching to pattern and menu item REST endpoints, so identical schema object are not needlessly regenerated. Props spacedmonkey. Fixes #58657. See [45811]. Built from https://develop.svn.wordpress.org/trunk@56093 git-svn-id: http://core.svn.wordpress.org/trunk@55605 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- .../class-wp-rest-block-pattern-categories-controller.php | 8 +++++++- .../endpoints/class-wp-rest-block-patterns-controller.php | 8 +++++++- .../endpoints/class-wp-rest-blocks-controller.php | 8 +++++++- .../endpoints/class-wp-rest-menu-items-controller.php | 8 +++++++- .../rest-api/endpoints/class-wp-rest-menus-controller.php | 8 +++++++- wp-includes/version.php | 2 +- 6 files changed, 36 insertions(+), 6 deletions(-) diff --git a/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php b/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php index f8a6c0c190..36a7534160 100644 --- a/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php +++ b/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php @@ -125,6 +125,10 @@ class WP_REST_Block_Pattern_Categories_Controller extends WP_REST_Controller { * @return array Item schema data. */ public function get_item_schema() { + if ( $this->schema ) { + return $this->add_additional_fields_schema( $this->schema ); + } + $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'block-pattern-category', @@ -151,6 +155,8 @@ class WP_REST_Block_Pattern_Categories_Controller extends WP_REST_Controller { ), ); - return $this->add_additional_fields_schema( $schema ); + $this->schema = $schema; + + return $this->add_additional_fields_schema( $this->schema ); } } diff --git a/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php b/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php index 3acaefdf2c..d8f083924e 100644 --- a/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php +++ b/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php @@ -199,6 +199,10 @@ class WP_REST_Block_Patterns_Controller extends WP_REST_Controller { * @return array Item schema data. */ public function get_item_schema() { + if ( $this->schema ) { + return $this->add_additional_fields_schema( $this->schema ); + } + $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'block-pattern', @@ -287,6 +291,8 @@ class WP_REST_Block_Patterns_Controller extends WP_REST_Controller { ), ); - return $this->add_additional_fields_schema( $schema ); + $this->schema = $schema; + + return $this->add_additional_fields_schema( $this->schema ); } } diff --git a/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php b/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php index 4a316685e1..cd2e63d7c5 100644 --- a/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php +++ b/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php @@ -67,6 +67,10 @@ class WP_REST_Blocks_Controller extends WP_REST_Posts_Controller { * @return array Item schema data. */ public function get_item_schema() { + if ( $this->schema ) { + return $this->add_additional_fields_schema( $this->schema ); + } + // Do not cache this schema because all properties are derived from parent controller. $schema = parent::get_item_schema(); @@ -86,7 +90,9 @@ class WP_REST_Blocks_Controller extends WP_REST_Posts_Controller { unset( $schema['properties']['title']['properties']['rendered'] ); unset( $schema['properties']['content']['properties']['rendered'] ); - return $schema; + $this->schema = $schema; + + return $this->add_additional_fields_schema( $this->schema ); } } diff --git a/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php b/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php index 59edfa5bcd..940e0702df 100644 --- a/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php +++ b/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php @@ -710,6 +710,10 @@ class WP_REST_Menu_Items_Controller extends WP_REST_Posts_Controller { * @return array Item schema data. */ public function get_item_schema() { + if ( $this->schema ) { + return $this->add_additional_fields_schema( $this->schema ); + } + $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => $this->post_type, @@ -914,7 +918,9 @@ class WP_REST_Menu_Items_Controller extends WP_REST_Posts_Controller { $schema['links'] = $schema_links; } - return $this->add_additional_fields_schema( $schema ); + $this->schema = $schema; + + return $this->add_additional_fields_schema( $this->schema ); } /** diff --git a/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php b/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php index 18b2c8fcfd..719377db8f 100644 --- a/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php +++ b/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php @@ -523,6 +523,10 @@ class WP_REST_Menus_Controller extends WP_REST_Terms_Controller { * @return array Item schema data. */ public function get_item_schema() { + if ( $this->schema ) { + return $this->add_additional_fields_schema( $this->schema ); + } + $schema = parent::get_item_schema(); unset( $schema['properties']['count'], $schema['properties']['link'], $schema['properties']['taxonomy'] ); @@ -566,6 +570,8 @@ class WP_REST_Menus_Controller extends WP_REST_Terms_Controller { 'type' => 'boolean', ); - return $schema; + $this->schema = $schema; + + return $this->add_additional_fields_schema( $this->schema ); } } diff --git a/wp-includes/version.php b/wp-includes/version.php index 0c9ed48785..ff6eec73c8 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.3-alpha-56092'; +$wp_version = '6.3-alpha-56093'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.