From afdef918e728530725e31090b2474e6fa3d116db Mon Sep 17 00:00:00 2001 From: skevetter <69881238+skevetter@users.noreply.github.com> Date: Mon, 7 Sep 2026 22:00:55 +0000 Subject: [PATCH 1/3] perf: optimize toProjectName by extracting regex compilation Extracted the `regexp.MustCompile` calls in `toProjectName` into package-level variables so they are compiled only once during initialization rather than on every invocation. --- pkg/compose/helper.go | 9 +++++++-- pkg/compose/helper_bench_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 pkg/compose/helper_bench_test.go diff --git a/pkg/compose/helper.go b/pkg/compose/helper.go index ff97305ec..47ec9aed9 100644 --- a/pkg/compose/helper.go +++ b/pkg/compose/helper.go @@ -371,13 +371,18 @@ func (h *ComposeHelper) SanitizeProjectName(name string) string { return h.toProjectName(name) } +var ( + oldProjectNameRegex = regexp.MustCompile("[^a-z0-9]") + newProjectNameRegex = regexp.MustCompile("[^-_a-z0-9]") +) + func (h *ComposeHelper) toProjectName(projectName string) string { useNewProjectNameFormat, _ := h.useNewProjectName() if !useNewProjectNameFormat { - return regexp.MustCompile("[^a-z0-9]").ReplaceAllString(strings.ToLower(projectName), "") + return oldProjectNameRegex.ReplaceAllString(strings.ToLower(projectName), "") } - return regexp.MustCompile("[^-_a-z0-9]").ReplaceAllString(strings.ToLower(projectName), "") + return newProjectNameRegex.ReplaceAllString(strings.ToLower(projectName), "") } func (h *ComposeHelper) buildCmd(ctx context.Context, args ...string) *exec.Cmd { diff --git a/pkg/compose/helper_bench_test.go b/pkg/compose/helper_bench_test.go new file mode 100644 index 000000000..afaa07f30 --- /dev/null +++ b/pkg/compose/helper_bench_test.go @@ -0,0 +1,27 @@ +package compose + +import ( + "testing" +) + +func BenchmarkToProjectName(b *testing.B) { + helper := &ComposeHelper{ + Version: "1.29.2", // Old version format + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + helper.toProjectName("My_Project-Name") + } +} + +func BenchmarkToProjectName_NewFormat(b *testing.B) { + helper := &ComposeHelper{ + Version: "2.0.0", // New version format + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + helper.toProjectName("My_Project-Name") + } +} From 566ff6ab25537ec365955b3fcb071206d2a72121 Mon Sep 17 00:00:00 2001 From: skevetter <69881238+skevetter@users.noreply.github.com> Date: Mon, 7 Sep 2026 22:06:17 +0000 Subject: [PATCH 2/3] perf: optimize toProjectName by extracting regex compilation Extracted the regexp.MustCompile calls in toProjectName into package-level variables so they are compiled only once during initialization rather than on every invocation. From 2bd9ea54cda76409e9d0e9e962a21a414fddba96 Mon Sep 17 00:00:00 2001 From: skevetter <69881238+skevetter@users.noreply.github.com> Date: Mon, 7 Sep 2026 22:13:51 +0000 Subject: [PATCH 3/3] perf: optimize toProjectName by extracting regex compilation Extracted the regexp.MustCompile calls in toProjectName into package-level variables so they are compiled only once during initialization rather than on every invocation.