WordPress.org

Make WordPress Core

Opened 4 years ago

Closed 2 years ago

Last modified 2 years ago

#11214 closed enhancement (fixed)

Improve get_themes() so that the size of the in-memory data is smaller

Reported by: westi Owned by: westi
Milestone: 3.4 Priority: normal
Severity: normal Version: 2.9
Component: Themes Keywords: needs-patch
Focuses: Cc:

Description

#10467 introduced the possibility that themes were outside WP_CONTENT_DIR and now we have the full path to all the template files in the data get_themes() returns.

We should be able to refactor this to store less duplicated data.

Attachments (1)

11214-first-pass.diff (2.6 KB) - added by westi 2 years ago.
A first pass at a simple implementation of this

Download all attachments as: .zip

Change History (9)

comment:1 apeatling4 years ago

A logical approach would be to only store a path if it is outside of the standard theme root. 99% of the time it's not going to be, so why duplicate those? I'll help with a patch for this.

comment:2 nacin4 years ago

  • Keywords needs-patch added

comment:3 dd324 years ago

  • Milestone changed from 3.0 to 3.1

We're in feature freeze, Approaching Beta in the near future, This is an enhancement and is not a regression over the previous release. Moving to 3.1 for now

comment:4 nacin3 years ago

  • Milestone changed from Awaiting Triage to Future Release

westi2 years ago

A first pass at a simple implementation of this

comment:5 follow-up: westi2 years ago

This came up again so I took a quick look.

Attached patch:

  • Reduces in memory storage by approx 50% compares to 2.9 post [12226] for 87 themes (wpcom public themes repo r2679)
  • Changes the data we store which may affect plugins / themes although fixing them would be trivial
  • Fixes the theme editor to work with the new storage structure.

Not yet tested with:

  • Page Templates
  • Multiple Themedirs (although the unit tests which gave me the size figure do use an alternate root)

comment:6 in reply to: ↑ 5 duck_2 years ago

Replying to westi:

This came up again so I took a quick look.

Really good idea for some memory usage reduction.

From my reading of the patch I think there are two things still to do:

  • Page templates - get_page_templates() needs to have the same fix that was applied to the theme editor, i.e. prepend the path to the template file name.
  • Child themes need testing. It looks like there could be an issue for template files added in the loop through $stylesheet_dir as their path would be $themes[$theme]['Stylesheet Dir'] and not $themes[$theme]['Template Dir'].

comment:7 nacin2 years ago

  • Resolution set to fixed
  • Status changed from new to closed

In [20029]:

Introduce WP_Theme, wp_get_themes(), and wp_get_theme() to replace get_themes(), get_theme(), get_theme_data(), current_theme_info(), and others.

  • Getters and Helpers: Introduces a series of methods to allow for easy generation of headers for display, and other theme metadata, including page templates.
  • Screenshots: Handles support for multiple screenshots. (see # Additional screenshots must be PNG and start with screenshot-2.png, and be sequential to be counted. see #19816.
  • Error Handling: Broken themes have a WP_Error object attached to them.
  • Caching: Introduces a wp_cache_themes_persistently filter (also in [20020]) to enable persistent caching of all filesystem and sanitization operations normally handled by WP_Theme (and formerly get_file_data() and get_themes()). Themes are cached individually and across five different cache keys for different data pieces.
  • Compatibility: A WP_Theme object is backwards compatible with a theme's array formerly returned by get_themes() and get_theme(), and an stdClass object formerly returned by current_theme_info().
  • i18n/L10n: Theme headers are now localizable with proper Text Domain and Domain Path headers, like plugins. (Language packs may remove the requirement for headers.) For page templates, see #6007 (not fixed yet, but will be easy now). For headers, fixes #15858.
  • PHP and CSS files: New methods that fetch a list of theme files (for the theme editor) only on demand, rather than only loading them into memory. fixes #11214.

Functions deprecated:

  • get_themes(), get_allowed_themes() and get_broken_themes() -- use wp_get_themes()
  • get_theme() and current_theme_info() -- use wp_get_theme()
  • get_site_allowed_themes() -- use WP_Theme::get_allowed_on_network()
  • wpmu_get_blog_allowedthemes() -- use WP_theme::get_allowed_on_site()

see also [20016], [20018], [20019], [20020], [20021], [20022], [20025], [20026], [20027]. also fixes #19244.

see #20103.

comment:8 nacin2 years ago

  • Milestone changed from Future Release to 3.4
Note: See TracTickets for help on using tickets.