perf(explore): virtualize compact list, shallow log state, lighter table renders#93
Draft
mr-karan wants to merge 1 commit into
Draft
perf(explore): virtualize compact list, shallow log state, lighter table renders#93mr-karan wants to merge 1 commit into
mr-karan wants to merge 1 commit into
Conversation
…ble renders Implements the high-priority items from .plans/spec_explore_perf.md. Frontend: - CompactLogListSimple: TanStack vue-virtual windowing + row formatting memo. DOM count for a 10k-row query drops from ~271k elements to ~2.1k. - Stores: log rows held in a shallow/raw shape so Vue does not deep-proxy every cell. Heap on 10k-row query drops from ~324MB to ~95MB. - data-table: hoist regex/formatter caching, drop the no-op ResizeObserver and unused refs, lighter resize state churn. - columns.ts: pre-compile per-column regex and memoize timestamp formatting; cell renderer no longer re-allocates per cell render. - LogExplorer: extract query-parsing logic into useExploreQueryParsing composable; drop the redundant /translate roundtrip in favor of inline metadata from the execute response. Backend: - logchefql translate / query: return fields_used + parsed conditions with the execute response so the frontend does not need a second round-trip for column highlighting. Benchmark: - docs/benchmarks/explore-10k-rendering.md captures before/after for 10k-row queries. Long-task blocking time drops 95%, run-click-to-paint drops 55%, with backend execution time unchanged. Spec items shipped: #1 (debounce persistDraft path), #2 (virtualize compact list), #4 (cell renderer caching), #5 (drop translate round-trip), #10 (shallow result state), #11 (computed :schema), and parts of #3 (DataTable cleanup) and #12 (extract parsing composable). Items #6, #7, #8, #9, #13 remain as follow-up.
mr-karan
added a commit
that referenced
this pull request
Jul 14, 2026
…lickHouse (closes #92, #93, #94, #98, #99, #100) #92: transport-level dial (5s) + ResponseHeaderTimeout (30s) on the VL client — non-tail calls fail fast on a wedged endpoint while streaming tails (headers arrive immediately) are never severed; plus per-alert context timeout in evaluateCycle so one hung source can't freeze all alerting org-wide. #93: enforce MaxResponseBytes byte budget + DefaultLimit in QueryLogs with LIMIT_APPLIED/LIMIT_CAPPED warnings (was the CH OOM class, VL-side). #98: RedactedConnectionConfig now blanks custom header VALUES (secret leak to source viewers), with blank-means-keep on update. #99: fields_limit=10 on histogram group-by (was unbounded series) + notice. #94: applyAlertLookback skips prepend when the query already has a _time: filter; tenant headers trimmed. #100: auth-mode none clears creds, latest-ts sorted, buckets time-sorted, health cached, host-required + numeric-tenant validation. Closes #92, #93, #94, #98, #99, #100.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements the high-priority items from
.plans/spec_explore_perf.md.Headline
10k-row Explore query, browser-side:
mainFull methodology in
docs/benchmarks/explore-10k-rendering.md.Spec items shipped
persistDraftwrites@tanstack/vue-virtual/translateround-trip; backend now returnsfields_used+ parsed conditions with the execute response:schemamoved to a computed inLogExplorer.vueResizeObserverremoved,unused
tableRefremoved, lighter resize state churn)useExploreQueryParsingcomposableOut of scope for this PR (tracked as follow-ups)
LogExplorer.vue<KeepAlive>wrapping a<div>autoFitColumncanvas allocationLogExplorer.vuesplit into panesBackend change
internal/logchefqlandinternal/server/logchefql_handlers.go:the execute response now carries
fields_usedand parsed conditionsinline, so the frontend can drop its second
/translatecall (item #5).To verify locally before merging
count.
sizes (virtualization fixed cost).
Draft for now — Karan is iterating.