Improve performance a bit

This commit is contained in:
Jon Staab
2024-12-09 14:03:59 -08:00
parent 880093296e
commit ea0e1a6c9a
4 changed files with 35 additions and 48 deletions

View File

@@ -1,17 +1,13 @@
<script lang="ts"> <script lang="ts">
import {fromPairs} from "@welshman/lib" import {fromPairs} from "@welshman/lib"
import {secondsToDate, getLocale, formatTimestamp, formatTimestampAsDate} from "@welshman/app" import {formatTimestamp, formatTimestampAsDate, formatTimestampAsTime} from "@welshman/app"
import Icon from "@lib/components/Icon.svelte" import Icon from "@lib/components/Icon.svelte"
export let event export let event
const timeFmt = new Intl.DateTimeFormat(getLocale(), {timeStyle: "short"})
$: meta = fromPairs(event.tags) as Record<string, string> $: meta = fromPairs(event.tags) as Record<string, string>
$: end = parseInt(meta.end) $: end = parseInt(meta.end)
$: start = parseInt(meta.start) $: start = parseInt(meta.start)
$: startDate = secondsToDate(start)
$: endDate = secondsToDate(end)
$: startDateDisplay = formatTimestampAsDate(start) $: startDateDisplay = formatTimestampAsDate(start)
$: endDateDisplay = formatTimestampAsDate(end) $: endDateDisplay = formatTimestampAsDate(end)
$: isSingleDay = startDateDisplay === endDateDisplay $: isSingleDay = startDateDisplay === endDateDisplay
@@ -21,6 +17,8 @@
<span>{meta.title || meta.name}</span> <span>{meta.title || meta.name}</span>
<div class="flex items-center gap-2 text-sm"> <div class="flex items-center gap-2 text-sm">
<Icon icon="clock-circle" size={4} /> <Icon icon="clock-circle" size={4} />
{timeFmt.format(startDate)}{isSingleDay ? timeFmt.format(endDate) : formatTimestamp(end)} {formatTimestampAsTime(start)}{isSingleDay
? formatTimestampAsTime(end)
: formatTimestamp(end)}
</div> </div>
</div> </div>

View File

@@ -46,7 +46,7 @@ import {
getDefaultNetContext, getDefaultNetContext,
makeRouter, makeRouter,
tracker, tracker,
trackerStore, makeTrackerStore,
relay, relay,
getSession, getSession,
getSigner, getSigner,
@@ -224,6 +224,8 @@ export const pullConservatively = ({relays, filters}: AppSyncOpts) => {
return Promise.all(promises) return Promise.all(promises)
} }
export const trackerStore = makeTrackerStore()
export const deriveEvent = (idOrAddress: string, hints: string[] = []) => { export const deriveEvent = (idOrAddress: string, hints: string[] = []) => {
let attempted = false let attempted = false

View File

@@ -150,7 +150,6 @@
setupAnalytics() setupAnalytics()
ready = initStorage("flotilla", 4, { ready = initStorage("flotilla", 4, {
events: storageAdapters.fromRepository(repository, {throttle: 300, migrate: migrateEvents}),
relays: {keyPath: "url", store: throttled(1000, relays)}, relays: {keyPath: "url", store: throttled(1000, relays)},
handles: {keyPath: "nip05", store: throttled(1000, handles)}, handles: {keyPath: "nip05", store: throttled(1000, handles)},
checked: storageAdapters.fromObjectStore(checked, {throttle: 1000}), checked: storageAdapters.fromObjectStore(checked, {throttle: 1000}),
@@ -162,7 +161,10 @@
throttle: 1000, throttle: 1000,
migrate: migratePlaintext, migrate: migratePlaintext,
}), }),
tracker: storageAdapters.fromTracker(tracker, {throttle: 1000}), events: storageAdapters.fromRepositoryAndTracker(repository, tracker, {
throttle: 3000,
migrate: migrateEvents,
}),
}).then(() => sleep(300)) }).then(() => sleep(300))
// Unwrap gift wraps as they come in, but throttled // Unwrap gift wraps as they come in, but throttled

View File

@@ -1,12 +1,3 @@
<script lang="ts" context="module">
type Element = {
id: string
type: "date" | "note"
value: string | TrustedEvent
showPubkey: boolean
}
</script>
<script lang="ts"> <script lang="ts">
import {nip19} from "nostr-tools" import {nip19} from "nostr-tools"
import {onMount, onDestroy} from "svelte" import {onMount, onDestroy} from "svelte"
@@ -49,7 +40,7 @@
const {room = GENERAL} = $page.params const {room = GENERAL} = $page.params
const content = popKey<string>("content") || "" const content = popKey<string>("content") || ""
const url = decodeRelay($page.params.relay) const url = decodeRelay($page.params.relay)
const events = deriveChannelMessages(url, room) const events = throttled(300, deriveChannelMessages(url, room))
const assertEvent = (e: any) => e as TrustedEvent const assertEvent = (e: any) => e as TrustedEvent
@@ -76,39 +67,33 @@
let scroller: Scroller let scroller: Scroller
let editor: Readable<Editor> let editor: Readable<Editor>
const elements = throttled( const elements = derived(events, $events => {
300, const $elements = []
derived(
events,
$events => {
const $elements = []
let previousDate let previousDate
let previousPubkey let previousPubkey
for (const event of $events.toReversed()) { for (const event of $events.toReversed()) {
const {id, pubkey, created_at} = event const {id, pubkey, created_at} = event
const date = formatTimestampAsDate(created_at) const date = formatTimestampAsDate(created_at)
if (date !== previousDate) { if (date !== previousDate) {
$elements.push({type: "date", value: date, id: date, showPubkey: false}) $elements.push({type: "date", value: date, id: date, showPubkey: false})
}
$elements.push({
id,
type: "note",
value: event,
showPubkey: date !== previousDate || previousPubkey !== pubkey,
})
previousDate = date
previousPubkey = pubkey
}
return $elements.reverse().slice(0, limit)
} }
)
) $elements.push({
id,
type: "note",
value: event,
showPubkey: date !== previousDate || previousPubkey !== pubkey,
})
previousDate = date
previousPubkey = pubkey
}
return $elements.reverse().slice(0, limit)
})
onMount(async () => { onMount(async () => {
// Sveltekiiit // Sveltekiiit