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 <brian.brazil@robustperception.io>
This commit is contained in:
Brian Brazil 2020-01-01 15:45:01 +00:00 committed by GitHub
parent edf8f135bc
commit a9ed3b980d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -18,7 +18,6 @@ import (
"encoding/json" "encoding/json"
"sort" "sort"
"strconv" "strconv"
"strings"
"github.com/cespare/xxhash" "github.com/cespare/xxhash"
) )
@ -285,11 +284,19 @@ func Compare(a, b Labels) int {
} }
for i := 0; i < l; i++ { for i := 0; i < l; i++ {
if d := strings.Compare(a[i].Name, b[i].Name); d != 0 { if a[i].Name != b[i].Name {
return d if a[i].Name < b[i].Name {
return -1
} else {
return 1
}
} }
if d := strings.Compare(a[i].Value, b[i].Value); d != 0 { if a[i].Value != b[i].Value {
return d 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. // If all labels so far were in common, the set with fewer labels comes first.