mirror of
https://github.com/coracle-social/coracle.git
synced 2024-09-18 19:23:40 +00:00
Speed up routes filtering
This commit is contained in:
parent
88f7703088
commit
d9414b2a27
@ -1,5 +1,5 @@
|
||||
import type {MyEvent} from 'src/util/types'
|
||||
import {partition, uniq, uniqBy, prop, map, propEq, reject, groupBy, pluck} from 'ramda'
|
||||
import {partition, uniq, uniqBy, prop, propEq, reject, groupBy, pluck} from 'ramda'
|
||||
import {personKinds, findReplyId} from 'src/util/nostr'
|
||||
import {log} from 'src/util/logger'
|
||||
import {chunk} from 'hurdak/lib/hurdak'
|
||||
|
@ -1,6 +1,6 @@
|
||||
import type {Relay} from 'src/util/types'
|
||||
import {warn} from 'src/util/logger'
|
||||
import {pick, objOf, map, assoc, sortBy, uniqBy, prop} from 'ramda'
|
||||
import {pick, groupBy, objOf, map, assoc, sortBy, uniqBy, prop} from 'ramda'
|
||||
import {first, createMap, updateIn} from 'hurdak/lib/hurdak'
|
||||
import {Tags, normalizeRelayUrl, isRelay, findReplyId} from 'src/util/nostr'
|
||||
import {shuffle} from 'src/util/misc'
|
||||
@ -49,10 +49,11 @@ export const initializeRelayList = async () => {
|
||||
|
||||
// Pubkey relays
|
||||
|
||||
export const getPubkeyRelays = (pubkey, mode = null) => {
|
||||
export const getPubkeyRelays = (pubkey, mode = null, routes = null) => {
|
||||
const filter = mode ? {pubkey, mode} : {pubkey}
|
||||
const filteredRoutes = routes || database.routes.all(filter)
|
||||
|
||||
return sortByScore(map(pick(['url', 'score']), database.routes.all(filter)))
|
||||
return sortByScore(map(pick(['url', 'score']), filteredRoutes))
|
||||
}
|
||||
|
||||
export const getPubkeyReadRelays = pubkey => getPubkeyRelays(pubkey, 'read')
|
||||
@ -61,14 +62,21 @@ export const getPubkeyWriteRelays = pubkey => getPubkeyRelays(pubkey, 'write')
|
||||
|
||||
// Multiple pubkeys
|
||||
|
||||
export const getAllPubkeyRelays = (pubkeys, mode = null) =>
|
||||
aggregateScores(pubkeys.map(pubkey => getPubkeyRelays(pubkey, mode)))
|
||||
export const getAllPubkeyRelays = (pubkeys, mode = null) => {
|
||||
// As an optimization, filter the database once and group by pubkey
|
||||
const filter = mode ? {pubkey: pubkeys, mode} : {pubkey: pubkeys}
|
||||
const routesByPubkey = groupBy(prop('pubkey'), database.routes.all(filter))
|
||||
|
||||
export const getAllPubkeyReadRelays = pubkeys =>
|
||||
aggregateScores(pubkeys.map(getPubkeyReadRelays))
|
||||
return aggregateScores(
|
||||
pubkeys.map(
|
||||
pubkey => getPubkeyRelays(pubkey, mode, routesByPubkey[pubkey] || [])
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
export const getAllPubkeyWriteRelays = pubkeys =>
|
||||
aggregateScores(pubkeys.map(getPubkeyWriteRelays))
|
||||
export const getAllPubkeyReadRelays = pubkeys => getAllPubkeyRelays(pubkeys, 'read')
|
||||
|
||||
export const getAllPubkeyWriteRelays = pubkeys => getAllPubkeyRelays(pubkeys, 'write')
|
||||
|
||||
// Current user
|
||||
|
||||
@ -145,7 +153,7 @@ export const sampleRelays = (relays, scale = 1) => {
|
||||
}
|
||||
|
||||
// Remove relays that are currently in an error state
|
||||
relays => relays.filter(r => getConnection(r.url)?.hasRecentError())
|
||||
relays => relays.filter(r => pool.getConnection(r.url)?.hasRecentError())
|
||||
|
||||
// Shuffle and limit target relays
|
||||
relays = shuffle(relays).slice(0, limit)
|
||||
|
@ -1,6 +1,6 @@
|
||||
<script lang="ts">
|
||||
import {onMount} from 'svelte'
|
||||
import {partition, last, propEq, always, mergeRight, uniqBy, sortBy, prop} from 'ramda'
|
||||
import {partition, last, propEq, always, uniqBy, sortBy, prop} from 'ramda'
|
||||
import {slide} from 'svelte/transition'
|
||||
import {quantify} from 'hurdak/lib/hurdak'
|
||||
import {createScroller, now, Cursor} from 'src/util/misc'
|
||||
|
Loading…
Reference in New Issue
Block a user