Make WordPress Core

Opened 4 weeks ago

#65614 new enhancement

Site Editor: skip block-theme-only preloads for classic themes

Reported by: extrachill Owned by:
Priority: normal Milestone: Awaiting Review
Component: Editor Version: trunk
Severity: normal Keywords:
Cc: Focuses: performance

Description

Since classic themes gained access to the Site Editor (Patterns screen for all themes, template parts mode via block-template-parts theme support), wp-admin/site-editor.php executes its full static REST preload list on every load — but several of those preloads exist only for the block theme canvas and are never requested by the classic theme editor UI.

Measured on Twenty Twenty-One (both plain and with add_theme_support( 'block-template-parts' )), using a WordPress Playground sandbox with a browser request waterfall: of the static preload set, only the site index, /wp/v2/types?context=view, active theme, settings, and the active global styles entries were consumed by the client. The following preloads executed server-side and were never fetched in either classic mode:

  • /wp/v2/templates?context=edit&per_page=-1 — fetch-all, the most expensive entry
  • /wp/v2/template-parts?context=edit&per_page=-1 — fetch-all
  • /wp/v2/types/wp_template?context=edit
  • /wp/v2/types/wp_template_part?context=edit
  • /wp/v2/global-styles/themes/{stylesheet}/variations?context=view
  • /wp/v2/block-patterns/categories

Each preload path runs a full internal REST dispatch during the admin page render, so classic theme sites pay time-to-first-byte cost for responses that are discarded. The two per_page=-1 queries scale with template/template part count.

Proposal: gate the block-theme-only entries on wp_is_block_theme(). The template part related entries could remain when current_theme_supports( 'block-template-parts' ) if measurement shows the template parts mode consumes them.

Related: #65206 added route-aware canvas preloads which are already guarded with wp_is_block_theme() after the same measurement showed classic themes never consume them (see the discussion with @t-hamano on https://github.com/WordPress/wordpress-develop/pull/11766). The reproducible measurement workload and full consumed/wasted tables per theme: https://github.com/chubes4/homeboy-rigs/pull/676

Happy to submit a PR with the guard if this direction looks right.

Change History (0)

Note: See TracTickets for help on using tickets.