mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-12 23:40:45 -07:00
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:
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user