From 93d7511b38406d51f8dc707109c6476b1a5e8300 Mon Sep 17 00:00:00 2001 From: Ed Overton Date: Tue, 21 Feb 2023 09:44:29 -0500 Subject: [PATCH] perf: optimize Gvk.ApiVersion() Convert Gvk.ApiVersion() from using strings.Builder to raw string concatenation. The logic in Gvk.ApiVersion() is simple enough that raw concatenation executes quicker and consumes less memory. --- kyaml/resid/gvk.go | 7 ++----- kyaml/resid/gvk_test.go | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/kyaml/resid/gvk.go b/kyaml/resid/gvk.go index 2c85fada1c..0289cadd78 100644 --- a/kyaml/resid/gvk.go +++ b/kyaml/resid/gvk.go @@ -122,13 +122,10 @@ func (x Gvk) stableSortString() string { // ApiVersion returns the combination of Group and Version func (x Gvk) ApiVersion() string { - var sb strings.Builder if x.Group != "" { - sb.WriteString(x.Group) - sb.WriteString("/") + return x.Group + "/" + x.Version } - sb.WriteString(x.Version) - return sb.String() + return x.Version } // StringWoEmptyField returns a string representation of the GVK. Non-exist diff --git a/kyaml/resid/gvk_test.go b/kyaml/resid/gvk_test.go index 193b886694..7a744ce1aa 100644 --- a/kyaml/resid/gvk_test.go +++ b/kyaml/resid/gvk_test.go @@ -4,6 +4,7 @@ package resid import ( + "fmt" "testing" "github.com/stretchr/testify/assert" @@ -129,6 +130,23 @@ func TestApiVersion(t *testing.T) { } } +func BenchmarkApiVersion(b *testing.B) { + for i, bench := range []Gvk{ + {Kind: "k"}, + {Version: "v", Kind: "k"}, + {Group: "g", Kind: "k"}, + {Group: "g", Version: "v"}, + {Group: "g", Version: "v", Kind: "k"}, + {Group: "bitnami.com", Version: "v1alpha1", Kind: "SealedSecret"}, + } { + b.Run(fmt.Sprintf("%d", i), func(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = bench.ApiVersion() + } + }) + } +} + func TestStringWoEmptyField(t *testing.T) { for _, hey := range stringTests { assert.Equal(t, hey.r, hey.x.StringWoEmptyField())