refactor unique() to be faster.

This commit is contained in:
fiatjaf
2023-11-30 01:38:48 -03:00
parent 82ad525b91
commit 8a2fa69cb9
3 changed files with 13 additions and 17 deletions

View File

@@ -290,12 +290,11 @@ func relaysForPubkey(ctx context.Context, pubkey string, extraRelays ...string)
cache.SetJSONWithTTL("io:"+pubkey, pubkeyRelays, time.Hour*24*7)
}
}
pubkeyRelays = unique(pubkeyRelays)
return pubkeyRelays
return unique(pubkeyRelays)
}
func contactsForPubkey(ctx context.Context, pubkey string, extraRelays ...string) []string {
pubkeyContacts := make([]string, 0, 100)
pubkeyContacts := make([]string, 0, 300)
relays := make([]string, 0, 12)
if ok := cache.GetJSON("cc:"+pubkey, &pubkeyContacts); !ok {
log.Debug().Msgf("searching contacts for %s", pubkey)
@@ -335,6 +334,5 @@ func contactsForPubkey(ctx context.Context, pubkey string, extraRelays ...string
cache.SetJSONWithTTL("cc:"+pubkey, pubkeyContacts, time.Hour*6)
}
}
pubkeyContacts = unique(pubkeyContacts)
return pubkeyContacts
return unique(pubkeyContacts)
}

View File

@@ -65,7 +65,6 @@ func loadNpubsArchive(ctx context.Context) {
log.Debug().Msg("refreshing the npubs archive")
contactsArchive := make([]string, 0, 500)
for _, pubkey := range trustedPubKeys {
ctx, cancel := context.WithTimeout(ctx, time.Second*4)
pubkeyContacts := contactsForPubkey(ctx, pubkey)
@@ -73,8 +72,7 @@ func loadNpubsArchive(ctx context.Context) {
cancel()
}
contactsArchive = unique(contactsArchive)
for _, contact := range contactsArchive {
for _, contact := range unique(contactsArchive) {
log.Debug().Msgf("adding contact %s", contact)
cache.SetWithTTL("pa:"+contact, nil, time.Hour*24*90)
}
@@ -92,8 +90,7 @@ func loadRelaysArchive(ctx context.Context) {
cancel()
}
relaysArchive = unique(relaysArchive)
for _, relay := range relaysArchive {
for _, relay := range unique(relaysArchive) {
for _, excluded := range excludedRelays {
if strings.Contains(relay, excluded) {
log.Debug().Msgf("skipping relay %s", relay)

View File

@@ -14,6 +14,7 @@ import (
"time"
"github.com/microcosm-cc/bluemonday"
"golang.org/x/exp/slices"
"mvdan.cc/xurls/v2"
"github.com/nbd-wtf/go-nostr"
@@ -381,15 +382,15 @@ func previewNotesFormatting(input string) string {
}
func unique(strSlice []string) []string {
keys := make(map[string]bool)
list := []string{}
for _, entry := range strSlice {
if _, ok := keys[entry]; !ok {
keys[entry] = true
list = append(list, entry)
slices.Sort(strSlice)
j := 0
for i := 1; i < len(strSlice); i++ {
if strSlice[j] != strSlice[i] {
j++
strSlice[j] = strSlice[i]
}
}
return list
return strSlice[:j+1]
}
func trimProtocol(relay string) string {