require "benchmark/ips" class VarComponent def initialize(klass = nil) @class = klass @size = "w-48 h-64" @shadow = "shadow-md" @hover = "hover:bg-base-300 hover:scale-105 transition-transform" @structure = "flex flex-col items-start rounded-lg" @spacing = "gap-y-4 p-4" @color = "bg-base-200" end def view_template [@structure, @color, @hover, @size, @shadow, @spacing, @class] end end class AttrComponent attr_reader :size, :shadow, :hover, :structure, :spacing, :color def initialize(klass = nil) @class = klass @size = "w-48 h-64" @shadow = "shadow-md" @hover = "hover:bg-base-300 hover:scale-105 transition-transform" @structure = "flex flex-col items-start rounded-lg" @spacing = "gap-y-4 p-4" @color = "bg-base-200" end def view_template [structure, color, hover, size, shadow, spacing, @class] end end class DefComponent def initialize(klass = nil) @class = klass end def size = "w-48 h-64" def shadow = "shadow-md" def hover = "hover:bg-base-300 hover:scale-105 transition-transform" def structure = "flex flex-col items-start rounded-lg" def spacing = "gap-y-4 p-4" def color = "bg-base-200" def view_template [structure, color, hover, size, shadow, spacing, @class] end end Benchmark.ips do |x| x.report("VarComponent") { VarComponent.new.view_template } x.report("AttrComponent") { AttrComponent.new.view_template } x.report("DefComponent") { DefComponent.new.view_template } x.compare! end