byGalax
|
44088b35d7
|
perf: bundle splitting, caches, thumbnails, batching, virtualization, release tuning
Route splitting
- React.lazy for AdminPage, SettingsPage, FriendsPage, DevicePage,
AuthCallbackPage; ChatsPage + ConversationPage stay eager
- RouteSuspense wrapper with spinner fallback
Vendor chunking
- Vite manualChunks splits livekit-client, libsodium, @supabase, react
into dedicated cacheable chunks
Image thumbnails
- createImageBitmap + OffscreenCanvas downscales inline preview to
max 640px, emits webp; full blob reserved for the lightbox
- Passes through gif/apng/webp so animation is preserved
- decoding="async" on the inline img
Attachment cache
- lib/attachmentCache.ts backed by OPFS; 7-day TTL
- AttachmentImage/Audio/Video/PDF/Generic read cache first, decrypt on
miss, write-through on success; graceful no-op when OPFS missing
Avatar cache
- lib/avatarCache.ts — session Map<url, blobUrl> + warmAvatarCache()
helper for bulk preload
Message batching
- Realtime INSERT burst collapses to a single refresh() when >3 ids
land within a 250ms window; solo inserts keep the per-id path for
latency parity
Conversation-list virtualization
- VirtualConversationList with IntersectionObserver sentinel, initial
40 rows + 40 per batch; no overhead under threshold
Rust release tuning
- Cargo [profile.release]: lto, codegen-units=1, strip=symbols,
panic=abort, opt-level="s" — ~20-30% smaller binary, faster startup
|
2026-04-21 10:24:31 +02:00 |
|