ytptube/ui/app
Jesse Bate 0cb3a95a41 perf: batch item_updated WebSocket events into a single per-tick payload
The per-download 500ms throttle still scales linearly with concurrency:
N active downloads produce up to 2N item_updated frames per second, each
with its own serialization pass and per-client send.

Add an ItemBatcher at the WebSocket boundary that coalesces dirty items
by _id (last write wins) and emits one item_updated frame per 500ms
tick whose payload is always a list of items, even for a single update.
Leading-edge emits keep isolated updates (e.g. renames via the API)
instant, and a trailing flush at most 500ms later delivers the rest.
Pending items are flushed on shutdown before clients disconnect.

Emitter call sites, the EventBus, and the StatusTracker throttle are
unchanged; the batcher only changes the wire format. The frontend now
types item_updated as StoreItem[] and iterates the array.

BREAKING CHANGE: the item_updated WebSocket event payload (data) is now
always an array of items instead of a single item object.
2026-06-10 23:38:27 +09:30
..
assets/css rerfactor: add page transition toggle 2026-06-08 07:53:05 +03:00
components perf: lazy-load folders on demand; remove queue from config endpoint 2026-06-10 20:07:19 +09:30
composables perf: batch item_updated WebSocket events into a single per-tick payload 2026-06-10 23:38:27 +09:30
layouts rerfactor: add page transition toggle 2026-06-08 07:53:05 +03:00
pages refactor: fix loading older logs 2026-06-08 09:56:21 +03:00
plugins fix: opacity interaction with the new form guard 2026-04-15 18:14:36 +03:00
types perf: batch item_updated WebSocket events into a single per-tick payload 2026-06-10 23:38:27 +09:30
utils feat: add system diagnostics endpoint. 2026-05-26 19:22:36 +03:00
app.config.ts Refactor: rebase the UI on top of nuxt/ui 2026-03-25 22:59:53 +03:00
error.vue Refactor: rebase the UI on top of nuxt/ui 2026-03-25 22:59:53 +03:00
spa-loading-template.html refactor: minor UI update for diagnostics page 2026-05-31 16:08:45 +03:00