From 6f824852002d9af32c803b099211d68f85d30ab2 Mon Sep 17 00:00:00 2001 From: nayan9617 Date: Thu, 30 Apr 2026 14:25:16 +0530 Subject: [PATCH 1/2] perf: add deriveDedupedProfile to cache profile store instances by pubkey --- src/app/core/state.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/app/core/state.ts b/src/app/core/state.ts index 0630385d..1ec0d289 100644 --- a/src/app/core/state.ts +++ b/src/app/core/state.ts @@ -147,6 +147,7 @@ import { makeUserData, makeUserLoader, manageRelay, + deriveProfile, displayProfileByPubkey, getProfile, } from "@welshman/app" @@ -155,6 +156,25 @@ import {readFeed} from "@lib/feeds" export const fromCsv = (s: string) => (s || "").split(",").filter(identity) +const profileStoreCache = new Map>() + +export const deriveDedupedProfile = ( + ...args: Parameters +): ReturnType => { + const key = JSON.stringify(args) + const cached = profileStoreCache.get(key) + + if (cached) { + return cached + } + + const store = deriveProfile(...args) + + profileStoreCache.set(key, store) + + return store +} + export const ROOM = "h" export const PROTECTED = ["-"] -- 2.52.0 From d33ed4105d9007dd030bee50a73eac393f36809b Mon Sep 17 00:00:00 2001 From: nayan9617 Date: Thu, 30 Apr 2026 16:53:44 +0530 Subject: [PATCH 2/2] perf: throttle member list derivation and use deduped profile stores in SpaceMembers and RoomMembersAdd --- src/app/components/ProfileCircle.svelte | 4 ++-- src/app/components/ProfileDetail.svelte | 16 ++++++++-------- src/app/components/ProfileInfo.svelte | 4 ++-- src/app/components/RoomMembersAdd.svelte | 3 ++- src/app/components/SpaceMembers.svelte | 3 ++- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/app/components/ProfileCircle.svelte b/src/app/components/ProfileCircle.svelte index 49f769b2..773d95b2 100644 --- a/src/app/components/ProfileCircle.svelte +++ b/src/app/components/ProfileCircle.svelte @@ -1,9 +1,9 @@ import {removeUndefined} from "@welshman/lib" - import {deriveProfile} from "@welshman/app" + import {deriveDedupedProfile} from "@app/core/state" import ContentMinimal from "@app/components/ContentMinimal.svelte" export type Props = { @@ -10,7 +10,7 @@ const {pubkey, url}: Props = $props() - const profile = deriveProfile(pubkey, removeUndefined([url])) + const profile = deriveDedupedProfile(pubkey, removeUndefined([url])) {#if $profile} diff --git a/src/app/components/RoomMembersAdd.svelte b/src/app/components/RoomMembersAdd.svelte index e02954ad..917e7301 100644 --- a/src/app/components/RoomMembersAdd.svelte +++ b/src/app/components/RoomMembersAdd.svelte @@ -1,5 +1,6 @@