A decentralized music tracking and discovery platform built on AT Protocol ๐ŸŽต

Increase page and batch sizes and reduce delays

Set PAGE_SIZE to 500 and PAGE_DELAY_MS to 0, add YIELD_EVERY_N_PAGES
to yield periodically between pages. Remove the small initial connection
delay and reduce per-page logging frequency to once every 10 pages.
Increase BATCH_SIZE to 200 and lower BATCH_TIMEOUT_MS to 50. Remove
verbose ping/pong log messages.

+9 -14
+7 -12
tap/src/main.ts
··· 6 import { omit } from "@es-toolkit/es-toolkit/compat"; 7 import type { SelectEvent } from "./schema/event.ts"; 8 9 - const PAGE_SIZE = 10; 10 - const PAGE_DELAY_MS = 1; 11 12 interface ClientState { 13 socket: WebSocket; ··· 68 69 (async () => { 70 try { 71 - // Small delay to ensure connection is fully established 72 - await new Promise((resolve) => setTimeout(resolve, 100)); 73 - 74 let page = 0; 75 let hasMore = true; 76 let totalEvents = 0; ··· 90 } 91 92 while (hasMore && socket.readyState === WebSocket.OPEN) { 93 - logger.info`๐Ÿ“„ Fetching page ${page}...`; 94 - 95 const events = await ctx.db 96 .select() 97 .from(schema.events) ··· 100 .limit(PAGE_SIZE) 101 .execute(); 102 103 - logger.info`๐Ÿ“„ Got ${events.length} events from page ${page}`; 104 105 for (const evt of events) { 106 if (socket.readyState === WebSocket.OPEN) { ··· 119 hasMore = events.length === PAGE_SIZE; 120 page++; 121 122 - // Yield to event loop between pages 123 - if (hasMore) { 124 await new Promise((resolve) => setTimeout(resolve, PAGE_DELAY_MS)); 125 } 126 } ··· 173 }); 174 175 socket.addEventListener("message", (event) => { 176 - logger.info`๐Ÿ“จ Received message: ${event.data}`; 177 if (event.data === "ping") { 178 socket.send("pong"); 179 - logger.info`๐Ÿ“ค Sent pong`; 180 } 181 }); 182
··· 6 import { omit } from "@es-toolkit/es-toolkit/compat"; 7 import type { SelectEvent } from "./schema/event.ts"; 8 9 + const PAGE_SIZE = 500; 10 + const PAGE_DELAY_MS = 0; 11 + const YIELD_EVERY_N_PAGES = 5; 12 13 interface ClientState { 14 socket: WebSocket; ··· 69 70 (async () => { 71 try { 72 let page = 0; 73 let hasMore = true; 74 let totalEvents = 0; ··· 88 } 89 90 while (hasMore && socket.readyState === WebSocket.OPEN) { 91 const events = await ctx.db 92 .select() 93 .from(schema.events) ··· 96 .limit(PAGE_SIZE) 97 .execute(); 98 99 + if (page % 10 === 0) { 100 + logger.info`๐Ÿ“„ Fetching page ${page}... (${totalEvents} events sent so far)`; 101 + } 102 103 for (const evt of events) { 104 if (socket.readyState === WebSocket.OPEN) { ··· 117 hasMore = events.length === PAGE_SIZE; 118 page++; 119 120 + if (hasMore && page % YIELD_EVERY_N_PAGES === 0) { 121 await new Promise((resolve) => setTimeout(resolve, PAGE_DELAY_MS)); 122 } 123 } ··· 170 }); 171 172 socket.addEventListener("message", (event) => { 173 if (event.data === "ping") { 174 socket.send("pong"); 175 } 176 }); 177
+2 -2
tap/src/tap.ts
··· 8 9 export const TAP_WS_URL = Deno.env.get("TAP_URL") || "http://localhost:2480"; 10 11 - const BATCH_SIZE = 50; 12 - const BATCH_TIMEOUT_MS = 100; 13 14 export default function connectToTap() { 15 const tap = new Tap(TAP_WS_URL);
··· 8 9 export const TAP_WS_URL = Deno.env.get("TAP_URL") || "http://localhost:2480"; 10 11 + const BATCH_SIZE = 200; 12 + const BATCH_TIMEOUT_MS = 50; 13 14 export default function connectToTap() { 15 const tap = new Tap(TAP_WS_URL);