WordPress.org

Make WordPress Core

Opened 21 months ago

Last modified 5 months ago

#25233 assigned enhancement

Revisions metabox improvements

Reported by: jkudish Owned by: adamsilverstein
Milestone: Awaiting Review Priority: normal
Severity: normal Version:
Component: Revisions Keywords: needs-patch
Focuses: Cc:

Description

The revisions metabox suffers from performance degradation when unlimited revisions are allowed and a large amount of revisions (e.g. 600+) is achieved on a post.

Symptoms:

  • Slow wp-admin page loads
  • Out of memory errors and 500 errors.

This seems to be mainly due to:

  • All revisions are loaded at once when a post is loaded in wp-admin
  • For each revision, the entire $post object is loaded, when only a few pieces of information are needed
  • The queries in get_children() are not cached

Proposed solution:

  • Rewrite the revisions meta box to load the revisions via ajax instead of with the initial page load, possibly with pagination or some kind of infinite scroll.
  • Only load the information required and not the entire $post object for each revision.
  • Cache the queries involved.

Possible bottlenecks:

  • The get_children() and wp_get_post_revisions() functions are used in a bunch of different places, so it might be difficult to bake in compatibility for everything. Might be easier to create some new functions for the metabox specifically.
  • Currently WordPress loads all the revsions in order to possibly upgrade them to the 3.6 versioning of revisions. It does so on every post loaded in wp-admin. It might make sense to move this to an upgrade routine or somewhere else as it adds to the performance degradation.

If this sounds like a good approach I'd be happy to work on a patch.

Change History (4)

comment:1 @jkudish21 months ago

  • Type changed from defect (bug) to enhancement

comment:2 @johnbillion21 months ago

Related: #25123 where it's been suggested that the revisions meta box is removed altogether.

comment:3 @adamsilverstein21 months ago

  • Cc adamsilverstein@… added

Related: #24958

comment:4 @adamsilverstein5 months ago

  • Owner set to adamsilverstein
  • Status changed from new to assigned

The plan is now to remove the revisions meta box, plugins can easily add similar functionality (see plugin linked in #25123). The revisions page itself can likely use some optimization (especially with many/large revisions. In any case, there is no reason to burden the post editing page!

Even setting the publish meta box X Revisions count (https://core.trac.wordpress.org/browser/tags/4.1/src/wp-admin/edit-form-advanced.php#L153) gets all revisions and can be costly: that should get fixed as well (i tried fields=> ids to no avail).

The version upgrade check, this call should only be loading in one revision: https://core.trac.wordpress.org/browser/tags/4.1/src/wp-admin/includes/post.php#L210

Note: See TracTickets for help on using tickets.