Lazy @changes hash in Registers — only allocate when a register is actually written\n\nResult: {"status":"keep","combined_µs":4287,"parse_µs":3059,"render_µs":1228,"allocations":25595}

This commit is contained in:
Tobi Lutke
2026-03-11 10:25:29 -04:00
parent e3fc735de7
commit cd308b8b01
+6 -6
View File
@@ -6,15 +6,15 @@ module Liquid
def initialize(registers = {}) def initialize(registers = {})
@static = registers.is_a?(Registers) ? registers.static : registers @static = registers.is_a?(Registers) ? registers.static : registers
@changes = {} @changes = nil
end end
def []=(key, value) def []=(key, value)
@changes[key] = value (@changes ||= {})[key] = value
end end
def [](key) def [](key)
if @changes.key?(key) if @changes&.key?(key)
@changes[key] @changes[key]
else else
@static[key] @static[key]
@@ -22,13 +22,13 @@ module Liquid
end end
def delete(key) def delete(key)
@changes.delete(key) @changes&.delete(key)
end end
UNDEFINED = Object.new UNDEFINED = Object.new
def fetch(key, default = UNDEFINED, &block) def fetch(key, default = UNDEFINED, &block)
if @changes.key?(key) if @changes&.key?(key)
@changes.fetch(key) @changes.fetch(key)
elsif default != UNDEFINED elsif default != UNDEFINED
if block_given? if block_given?
@@ -42,7 +42,7 @@ module Liquid
end end
def key?(key) def key?(key)
@changes.key?(key) || @static.key?(key) @changes&.key?(key) || @static.key?(key)
end end
end end