1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Reduce extra object creations in TaggedLogging

tags_text method creates 3 Ruby objects per each logger call when no custom tags are given
(which is the default setting, and so presumably the majority use case).
This patch reduces two temporary object creations in this case.

    require 'allocation_tracer'
    ObjectSpace::AllocationTracer.setup(%i{type})

    tags = ['a']

    pp before: ObjectSpace::AllocationTracer.trace {
      tags.collect { |tag| "[#{tag}] " }.join
    }

    pp after: ObjectSpace::AllocationTracer.trace {
      "[#{tags[0]}] "
    }

    {:before=>{[:T_ARRAY]=>[1, 0, 0, 0, 0, 0], [:T_STRING]=>[2, 0, 0, 0, 0, 0]}}
    {:after=>{[:T_STRING]=>[1, 0, 0, 0, 0, 0]}}
This commit is contained in:
Akira Matsuda 2018-04-27 01:52:15 +09:00
parent 2929d165c2
commit ac93e7b5c1

View file

@ -52,7 +52,9 @@ module ActiveSupport
def tags_text
tags = current_tags
if tags.any?
if tags.one?
"[#{tags[0]}] "
elsif tags.any?
tags.collect { |tag| "[#{tag}] " }.join
end
end