Skip respond_to?(:context=) for primitive types in find_variable — avoids method lookup overhead\n\nResult: {"status":"keep","combined_µs":4207,"parse_µs":2943,"render_µs":1264,"allocations":25535}

This commit is contained in:
Tobi Lutke
2026-04-04 17:42:33 -07:00
committed by Chris Pak
parent 1dfdce82dc
commit dc35b765e8
+10 -2
View File
@@ -226,11 +226,19 @@ module Liquid
end
# update variable's context before invoking #to_liquid
variable.context = self if variable.respond_to?(:context=)
# Fast path: skip respond_to? check for common primitive types
unless variable.instance_of?(String) || variable.instance_of?(Integer) || variable.instance_of?(Float) ||
variable.instance_of?(NilClass) || variable.instance_of?(TrueClass) || variable.instance_of?(FalseClass)
variable.context = self if variable.respond_to?(:context=)
end
liquid_variable = variable.to_liquid
liquid_variable.context = self if variable != liquid_variable && liquid_variable.respond_to?(:context=)
if variable != liquid_variable
unless liquid_variable.instance_of?(String) || liquid_variable.instance_of?(Integer)
liquid_variable.context = self if liquid_variable.respond_to?(:context=)
end
end
liquid_variable
end