You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.9 KiB
2.9 KiB
ClientService Refactoring Plan
Overview
Breaking down the 4313-line client.service.ts into focused, maintainable services with universal cache-warming strategy.
Service Architecture
1. QueryService (client-query.service.ts) ✅
- Core query/subscription logic
- Race-based fetching strategies
- Relay connection management
- Event tracking
2. CacheService (client-cache.service.ts) ✅
- Universal cache-warming strategy
- Cache refresh scheduling
- TTL management
- Background refresh coordination
3. EventService (client-events.service.ts) ✅
- Single event fetching
- Event caching
- Session cache management
- DataLoader integration
4. ReplaceableEventService (client-replaceable-events.service.ts) ✅
- Replaceable event fetching (profiles, relay lists, etc.)
- Batch operations
- Cache coordination
5. MacroService (client-macro.service.ts) ✅
- Macro-specific event fetching (Bookstr, etc.)
- Macro metadata extraction
- Specialized filtering
- Extensible for future macro types
6. CacheService (client-cache.service.ts) ✅
- Universal cache-warming strategy
- Cache refresh scheduling
- TTL management
- Background refresh coordination
Note on Additional Services
The following services were considered but are currently handled within ClientService as orchestration logic:
- Profile search/index: Handled in
ClientServicewith delegation toReplaceableEventServicefor fetching - Relay management: Publishing and relay selection remain in
ClientServiceas core orchestration - Timeline subscriptions: Complex state management remains in
ClientServicebut usesQueryServiceandEventService
Cache Strategy
Cache-Warming
- On login: Warm up current user's profile, relay list, follow list
- On feed load: Warm up profiles for visible pubkeys (batch, limited to 50)
- Background: Periodically refresh stale entries
Cache-Refreshing
- Stale detection: Check
addedAttimestamp vs refresh thresholds - Background refresh: Non-blocking, queued refresh for stale entries
- Periodic refresh: Every 5 minutes, check and refresh stale profiles
TTLs
- Profiles: 30 min cache, 15 min refresh threshold
- Payment info: 5 min cache, 2 min refresh threshold
- Relay lists: 15 min cache, 10 min refresh threshold
- Follow/Mute lists: 60 min cache, 30 min refresh threshold
Integration Strategy
- Create service instances in main
ClientService - Inject dependencies (QueryService into others)
- Maintain backward compatibility during transition
- Gradually migrate methods to use new services
- Remove old code once migration complete
Performance Benefits
- Faster initial load: Cache-warming pre-fetches critical data
- Better responsiveness: Background refresh keeps cache fresh without blocking UI
- Reduced network calls: Smart cache invalidation prevents unnecessary fetches
- Improved maintainability: Focused services are easier to test and modify