From 8a694e81ff3eedd53657ffa0340e5f509cc9d728 Mon Sep 17 00:00:00 2001 From: Denny Gursky Date: Tue, 21 Jun 2022 21:49:30 -0700 Subject: [PATCH] string builder speed up for Module.String() --- internal/addrs/module.go | 16 +++++++++++++--- internal/addrs/module_test.go | 14 ++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/internal/addrs/module.go b/internal/addrs/module.go index 4ae72b4e42..04ceac7625 100644 --- a/internal/addrs/module.go +++ b/internal/addrs/module.go @@ -33,11 +33,21 @@ func (m Module) String() string { if len(m) == 0 { return "" } - var steps []string + size := 0 for _, s := range m { - steps = append(steps, "module", s) + size += len(s) } - return strings.Join(steps, ".") + var sb strings.Builder + // 8 is len("module.") + len(".") + sb.Grow(8*len(m) + size) + for i, s := range m { + sb.WriteString("module.") + sb.WriteString(s) + if i != len(m)-1 { + sb.WriteString(".") + } + } + return sb.String() } func (m Module) Equal(other Module) bool { diff --git a/internal/addrs/module_test.go b/internal/addrs/module_test.go index 829704faf1..86065df4c7 100644 --- a/internal/addrs/module_test.go +++ b/internal/addrs/module_test.go @@ -55,3 +55,17 @@ func TestModuleEqual_false(t *testing.T) { }) } } + +func BenchmarkModuleStringShort(b *testing.B) { + module := Module{"a", "b"} + for n := 0; n < b.N; n++ { + module.String() + } +} + +func BenchmarkModuleStringLong(b *testing.B) { + module := Module{"southamerica-brazil-region", "user-regional-desktop", "user-name"} + for n := 0; n < b.N; n++ { + module.String() + } +}