A third party ATProto appview
at main 2.5 kB view raw
1import { createDataLoader } from './server/services/hydration/dataloader'; 2import { dataLoaderHydrator } from './server/services/hydration/dataloader-hydrator'; 3import { db } from './server/db'; 4import { posts } from './shared/schema'; 5import { desc } from 'drizzle-orm'; 6 7async function testDataLoader() { 8 console.log('Testing DataLoader implementation...\n'); 9 10 try { 11 // Get some test posts 12 const testPosts = await db 13 .select({ uri: posts.uri }) 14 .from(posts) 15 .orderBy(desc(posts.createdAt)) 16 .limit(10); 17 18 if (testPosts.length === 0) { 19 console.log('No posts found in database'); 20 return; 21 } 22 23 const postUris = testPosts.map((p) => p.uri); 24 console.log(`Found ${postUris.length} posts to hydrate\n`); 25 26 // Create a DataLoader instance 27 const dataLoader = createDataLoader(); 28 29 // Test hydration 30 console.log('Hydrating posts with DataLoader...'); 31 const startTime = performance.now(); 32 33 const result = await dataLoaderHydrator.hydratePosts( 34 postUris, 35 undefined, // No viewer for this test 36 dataLoader 37 ); 38 39 const duration = performance.now() - startTime; 40 41 console.log(`\n✅ Hydration complete in ${duration.toFixed(2)}ms`); 42 console.log(`\nStats:`); 43 console.log(`- Posts hydrated: ${result.posts.size}`); 44 console.log(`- Authors loaded: ${result.actors.size}`); 45 console.log(`- Aggregations loaded: ${result.aggregations.size}`); 46 console.log(`- DataLoader batches: ${result.stats.dataLoaderBatches}`); 47 console.log(`- Query time: ${result.stats.queryTime.toFixed(2)}ms`); 48 console.log(`- Total time: ${result.stats.totalTime.toFixed(2)}ms`); 49 50 // Test cache hit 51 console.log('\n\nTesting cache hit (re-hydrating same posts)...'); 52 const startTime2 = performance.now(); 53 54 const result2 = await dataLoaderHydrator.hydratePosts( 55 postUris, 56 undefined, 57 dataLoader // Same DataLoader instance 58 ); 59 60 const duration2 = performance.now() - startTime2; 61 62 console.log(`✅ Re-hydration complete in ${duration2.toFixed(2)}ms`); 63 console.log(`- Posts hydrated: ${result2.posts.size}`); 64 console.log(`- DataLoader batches: ${result2.stats.dataLoaderBatches}`); 65 console.log( 66 `Cache hit improvement: ${(((duration - duration2) / duration) * 100).toFixed(1)}% faster` 67 ); 68 69 // Clean up 70 dataLoader.clearAll(); 71 } catch (error) { 72 console.error('Error:', error); 73 } 74} 75 76testDataLoader().then(() => process.exit(0));