Make WordPress Core

Changeset 60400


Ignore:
Timestamp:
07/01/2025 03:59:12 PM (16 months ago)
Author:
dmsnell
Message:

do_blocks(): Document transient-memory-leak optimization.

Adds explanatory comment indicating why the optimization was added
and guarding against accidental removal.

This is a documentation-only change and should include no functional
or visual changes.

Props audrasjb, dmsnell, joemcgill, sirlouen, westonruter, zunaid321.
Follow-up to [60316].
Fixes #63588.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/blocks.php

    r60355 r60400  
    24092409        $output                = '';
    24102410
     2411        /**
     2412         * Parsed blocks consist of a list of top-level blocks. Those top-level
     2413         * blocks may themselves contain nested inner blocks. However, every
     2414         * top-level block is rendered independently, meaning there are no data
     2415         * dependencies between them.
     2416         *
     2417         * Ideally, therefore, the parser would only need to parse one complete
     2418         * top-level block at a time, render it, and move on. Unfortunately, this
     2419         * is not possible with {@see \parse_blocks()} because it must parse the
     2420         * entire given document at once.
     2421         *
     2422         * While the current implementation prevents this optimization, it’s still
     2423         * possible to reduce the peak memory use when calls to `render_block()`
     2424         * on those top-level blocks are memory-heavy (which many of them are).
     2425         * By setting each parsed block to `NULL` after rendering it, any memory
     2426         * allocated during the render will be freed and reused for the next block.
     2427         * Before making this change, that memory was retained and would lead to
     2428         * out-of-memory crashes for certain posts that now run with this change.
     2429         */
    24112430        for ( $i = 0; $i < $top_level_block_count; $i++ ) {
    24122431                $output .= render_block( $blocks[ $i ] );
Note: See TracChangeset for help on using the changeset viewer.