From db434923d0392dab0f6c05a24dd75478432d52e4 Mon Sep 17 00:00:00 2001 From: Tobi Lutke Date: Wed, 11 Mar 2026 08:04:40 -0400 Subject: [PATCH] hoist write score check out of render loop: skip increment_write_score when no limits active --- lib/liquid/block_body.rb | 8 ++++++-- lib/liquid/resource_limits.rb | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/liquid/block_body.rb b/lib/liquid/block_body.rb index 9908aae4..f452bc77 100644 --- a/lib/liquid/block_body.rb +++ b/lib/liquid/block_body.rb @@ -297,7 +297,11 @@ module Liquid def render_to_output_buffer(context, output) freeze unless frozen? - context.resource_limits.increment_render_score(@nodelist.length) + resource_limits = context.resource_limits + resource_limits.increment_render_score(@nodelist.length) + + # Check if we need per-node write score tracking + check_write = resource_limits.render_length_limit || resource_limits.last_capture_length idx = 0 while (node = @nodelist[idx]) @@ -312,7 +316,7 @@ module Liquid end idx += 1 - context.resource_limits.increment_write_score(output) + resource_limits.increment_write_score(output) if check_write end output diff --git a/lib/liquid/resource_limits.rb b/lib/liquid/resource_limits.rb index 70fac24b..bb4086ea 100644 --- a/lib/liquid/resource_limits.rb +++ b/lib/liquid/resource_limits.rb @@ -3,7 +3,7 @@ module Liquid class ResourceLimits attr_accessor :render_length_limit, :render_score_limit, :assign_score_limit - attr_reader :render_score, :assign_score + attr_reader :render_score, :assign_score, :last_capture_length def initialize(limits) @render_length_limit = limits[:render_length_limit]