From a9ed3b980d1833e382df1d100cf593110058b363 Mon Sep 17 00:00:00 2001 From: Brian Brazil Date: Wed, 1 Jan 2020 15:45:01 +0000 Subject: [PATCH] Optimise labels.Compare (#6539) strings.Compare isn't meant to be used, and this way we save one comparison which is thus very slightly cheaper. benchmark old ns/op new ns/op delta BenchmarkPostingsForMatchers/Head/n="1"-4 236305440 233515705 -1.18% Signed-off-by: Brian Brazil --- pkg/labels/labels.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/pkg/labels/labels.go b/pkg/labels/labels.go index da6f60bd1..3b462e68d 100644 --- a/pkg/labels/labels.go +++ b/pkg/labels/labels.go @@ -18,7 +18,6 @@ import ( "encoding/json" "sort" "strconv" - "strings" "github.com/cespare/xxhash" ) @@ -285,11 +284,19 @@ func Compare(a, b Labels) int { } for i := 0; i < l; i++ { - if d := strings.Compare(a[i].Name, b[i].Name); d != 0 { - return d + if a[i].Name != b[i].Name { + if a[i].Name < b[i].Name { + return -1 + } else { + return 1 + } } - if d := strings.Compare(a[i].Value, b[i].Value); d != 0 { - return d + if a[i].Value != b[i].Value { + if a[i].Value < b[i].Value { + return -1 + } else { + return 1 + } } } // If all labels so far were in common, the set with fewer labels comes first.