[wp-trac] [WordPress Trac] #35025: Performance regression in comments_template in 4.4
WordPress Trac
noreply at wordpress.org
Sat Dec 12 03:37:09 UTC 2015
#35025: Performance regression in comments_template in 4.4
-------------------------------+--------------------------
Reporter: rogerhub | Owner:
Type: defect (bug) | Status: new
Priority: normal | Milestone: 4.4.1
Component: Comments | Version: 4.4
Severity: normal | Resolution:
Keywords: reporter-feedback | Focuses: performance
-------------------------------+--------------------------
Changes (by boonebgorges):
* keywords: => reporter-feedback
Comment:
Hi @rogerhub - Thanks for the report, and welcome to Trac!
When the system works the way it was designed in 4.4,
`$comment->get_children()` should result in no extra database queries,
when called on comments that were fetched using `WP_Comment_Query` with
`'hierarchical' => 'threaded'`. Here's the rundown:
1. `comment_template()` calls `WP_Comment_Query` with `'hierarchical' =>
'threaded'`. https://core.trac.wordpress.org/browser/tags/4.4/src/wp-
includes/comment-template.php?marks=1288,1327#L1283
2. `WP_Comment_Query::get_comments()` then calls the `fill_descendants()`
method https://core.trac.wordpress.org/browser/tags/4.4/src/wp-includes
/class-wp-comment-query.php?marks=443-445#L440
3. `fill_descendants()` does only a single DB query for each hierarchy
level across all located comments. In your case, this should mean just two
queries: one for the top-level comments (ie, all of them), and then one
for children of those comments (should return none, at which point db
queries should stop)
4. When `fill_descendants()` then builds the comment tree, it marks each
comment with the `populated_children` flag.
https://core.trac.wordpress.org/browser/tags/4.4/src/wp-includes/class-wp-
comment-query.php?marks=925-928#L906
5. When `populated_children` is set, the `get_children()` method of
`WP_Comment` should *not* do a database query:
https://core.trac.wordpress.org/browser/tags/4.4/src/wp-includes/class-wp-
comment.php?marks=290-296#L279 See [34730].
(phew)
So, that's how it's supposed to work. (I'm going to attach a unit test
that demonstrates that what I've described above is working, at least in
the simple case.) If it's not working for you, it must be short-circuiting
at one of these steps. With the above sketch in mind, do you think you
could do some more debugging to see at which point the process is failing?
--
Ticket URL: <https://core.trac.wordpress.org/ticket/35025#comment:2>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list