[wp-trac] [WordPress Trac] #63588: do_blocks(): Free up transient memory leak

WordPress Trac noreply at wordpress.org
Wed Jun 18 00:19:02 UTC 2025


#63588: do_blocks(): Free up transient memory leak
-------------------------+-----------------------------
 Reporter:  dmsnell      |      Owner:  (none)
     Type:  enhancement  |     Status:  new
 Priority:  normal       |  Milestone:  Awaiting Review
Component:  Editor       |    Version:  trunk
 Severity:  normal       |   Keywords:
  Focuses:  performance  |
-------------------------+-----------------------------
 There has been a memory inefficiency inside of do_blocks() where it parses
 the given content then iterates through each top-level block to render it.
 Unfortunately each top-level block can considerably add to the overall
 memory use involved, and once moving on to the next top-level block, all
 of the allocated memory will be retained until the end of the call to
 do_blocks().

 In this change, each parsed block sub-tree is freed via reset to null
 after it has been rendered. All top-level blocks are rendered
 independently of each other and so this operation is safe — there are no
 data dependencies between them.

 For a test post of length 2.3 MB containing 138 top-level blocks, this
 brought the minimum memory requirement for the PHP process down from
 around 450 MB to around 316 MB. This was “around” since the memory
 requirements are non-deterministic and some runs will succeed while other
 runs will crash for out-of-memory given the same memory_limit.

 Impact of this change will be most profound when there exist one or more
 top-level blocks which allocate a significant amount of memory which are
 not the last top-level-block in a post. This means that this change might
 even impact small and typical posts, if the right blocks are near the
 start of the post.

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/63588>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list