mirror of
https://github.com/dergigi/boris.git
synced 2025-12-18 23:24:22 +01:00
perf(local-first): always follow up with remote for articles and titles
This commit is contained in:
@@ -103,7 +103,7 @@ export async function fetchArticleByNaddr(
|
|||||||
? pointer.relays
|
? pointer.relays
|
||||||
: RELAYS
|
: RELAYS
|
||||||
const orderedRelays = prioritizeLocalRelays(baseRelays)
|
const orderedRelays = prioritizeLocalRelays(baseRelays)
|
||||||
const { local: localRelays } = partitionRelays(orderedRelays)
|
const { local: localRelays, remote: remoteRelays } = partitionRelays(orderedRelays)
|
||||||
|
|
||||||
// Fetch the article event
|
// Fetch the article event
|
||||||
const filter = {
|
const filter = {
|
||||||
@@ -112,7 +112,7 @@ export async function fetchArticleByNaddr(
|
|||||||
'#d': [pointer.identifier]
|
'#d': [pointer.identifier]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Local-first: try local relays quickly, then fallback to remote if no result
|
// Local-first: try local relays quickly, then ALWAYS query remote to merge
|
||||||
let events = [] as NostrEvent[]
|
let events = [] as NostrEvent[]
|
||||||
if (localRelays.length > 0) {
|
if (localRelays.length > 0) {
|
||||||
try {
|
try {
|
||||||
@@ -131,18 +131,23 @@ export async function fetchArticleByNaddr(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (events.length === 0) {
|
// Always query remote to ensure we have the latest from the wider network
|
||||||
// Fallback: query all relays, but still time-box
|
if (remoteRelays.length > 0) {
|
||||||
events = await lastValueFrom(
|
try {
|
||||||
relayPool
|
const remoteEvents = await lastValueFrom(
|
||||||
.req(orderedRelays, filter)
|
relayPool
|
||||||
.pipe(
|
.req(remoteRelays, filter)
|
||||||
onlyEvents(),
|
.pipe(
|
||||||
take(1),
|
onlyEvents(),
|
||||||
takeUntil(timer(6000)),
|
take(1),
|
||||||
toArray()
|
takeUntil(timer(6000)),
|
||||||
)
|
toArray()
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
events = events.concat(remoteEvents)
|
||||||
|
} catch {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (events.length === 0) {
|
if (events.length === 0) {
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ export async function fetchArticleTitle(
|
|||||||
? pointer.relays
|
? pointer.relays
|
||||||
: RELAYS
|
: RELAYS
|
||||||
const orderedRelays = prioritizeLocalRelays(baseRelays)
|
const orderedRelays = prioritizeLocalRelays(baseRelays)
|
||||||
const { local: localRelays } = partitionRelays(orderedRelays)
|
const { local: localRelays, remote: remoteRelays } = partitionRelays(orderedRelays)
|
||||||
|
|
||||||
// Fetch the article event
|
// Fetch the article event
|
||||||
const filter = {
|
const filter = {
|
||||||
@@ -52,14 +52,14 @@ export async function fetchArticleTitle(
|
|||||||
events = []
|
events = []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Fallback to all relays if nothing from local quickly
|
// Always follow up with remote relays to ensure we have latest network data
|
||||||
if (events.length === 0) {
|
if (remoteRelays.length > 0) {
|
||||||
const fallbackEvents = await lastValueFrom(
|
const remoteEvents = await lastValueFrom(
|
||||||
relayPool
|
relayPool
|
||||||
.req(orderedRelays, filter)
|
.req(remoteRelays, filter)
|
||||||
.pipe(onlyEvents(), take(1), takeUntil(timer(5000)), toArray())
|
.pipe(onlyEvents(), take(1), takeUntil(timer(5000)), toArray())
|
||||||
)
|
)
|
||||||
events = fallbackEvents as { created_at: number }[]
|
events = events.concat(remoteEvents as unknown as { created_at: number }[])
|
||||||
}
|
}
|
||||||
|
|
||||||
if (events.length === 0) {
|
if (events.length === 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user