From fedb4e802ccec87ea170fe3d477ac9296faca398 Mon Sep 17 00:00:00 2001 From: superfastbuild Date: Thu, 9 Jul 2026 15:10:46 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=85=B3=E9=97=AD=E6=9C=80=E5=A4=A710?= =?UTF-8?q?=E4=B8=87=E8=A1=8C=E6=9F=A5=E8=AF=A2=E7=BB=93=E6=9E=9C=E7=9A=84?= =?UTF-8?q?=E9=99=90=E5=88=B6,=20=E6=A0=B9=E6=8D=AE=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E8=AE=BE=E7=BD=AE=E6=9C=80=E5=A4=A7?= =?UTF-8?q?=E8=A1=8C=E6=95=B0=E8=BF=9B=E8=A1=8C=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/desktop/src/components/grid/DataGrid.vue | 4 ++-- apps/desktop/src/lib/dataGrid/paginationPageSize.ts | 6 +++--- docs/performance/memory-usage-audit.md | 1 + 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/desktop/src/components/grid/DataGrid.vue b/apps/desktop/src/components/grid/DataGrid.vue index 21c9d22b9..438ffb333 100644 --- a/apps/desktop/src/components/grid/DataGrid.vue +++ b/apps/desktop/src/components/grid/DataGrid.vue @@ -126,7 +126,8 @@ import { EDITOR_FONT_FAMILY_CSS_VAR } from "@/lib/editor/editorThemes"; import { safeLocalStorageGet, safeLocalStorageSet } from "@/lib/backend/safeStorage"; import { appendColumnValueFilterCondition, buildColumnValueFilterCondition, buildColumnValuesFilterCondition, combineWhereInputs, filterModeNeedsValue, parseFilterValue } from "@/lib/dataGrid/dataGridColumnFilter"; import { clampSearchSplitWidth } from "@/lib/dataGrid/dataGridSearchSplit"; -import { MAX_RESULT_PAGE_SIZE, MIN_RESULT_PAGE_SIZE, normalizeResultPageSize, resultPageSizeMenuOptions } from "@/lib/dataGrid/paginationPageSize"; +// import { MAX_RESULT_PAGE_SIZE, MIN_RESULT_PAGE_SIZE, normalizeResultPageSize, resultPageSizeMenuOptions } from "@/lib/dataGrid/paginationPageSize"; +import { MIN_RESULT_PAGE_SIZE, normalizeResultPageSize, resultPageSizeMenuOptions } from "@/lib/dataGrid/paginationPageSize"; import { allNullColumnIndexes, filterColumnVisibilityOptions, hiddenColumnIndexesWithAllNullColumns, invertedHiddenColumnIndexes, nextHiddenColumnIndexes, removeAutoHiddenColumnIndexes, visibleColumnIndexesForFilter } from "@/lib/dataGrid/dataGridColumnVisibility"; import { buildDataGridColumnLookupItems, filterDataGridColumnLookupItems } from "@/lib/dataGrid/dataGridColumnLookup"; import { columnOrderKeysForIndexes, isDefaultColumnOrder, moveVisibleColumnIndex, orderedColumnIndexes, uniqueDataGridColumnOrderKeys } from "@/lib/dataGrid/dataGridColumnOrder"; @@ -10320,7 +10321,6 @@ const gridContextMenuItems = computed(() => { type="number" inputmode="numeric" :min="MIN_RESULT_PAGE_SIZE" - :max="MAX_RESULT_PAGE_SIZE" class="h-6 w-20 px-1.5 text-xs tabular-nums [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none" @keydown.enter.prevent.stop="applyCustomPageSize" /> diff --git a/apps/desktop/src/lib/dataGrid/paginationPageSize.ts b/apps/desktop/src/lib/dataGrid/paginationPageSize.ts index 4228c48e2..0739523c2 100644 --- a/apps/desktop/src/lib/dataGrid/paginationPageSize.ts +++ b/apps/desktop/src/lib/dataGrid/paginationPageSize.ts @@ -1,15 +1,15 @@ export const RESULT_PAGE_SIZE_OPTIONS = [50, 100, 500, 1000]; export const DEFAULT_RESULT_PAGE_SIZE = 100; export const MIN_RESULT_PAGE_SIZE = 1; -export const MAX_RESULT_PAGE_SIZE = 100000; +// export const MAX_RESULT_PAGE_SIZE = 100000; export function normalizeResultPageSize(value: unknown, fallback = DEFAULT_RESULT_PAGE_SIZE): number { - const fallbackValue = Number.isFinite(fallback) && fallback >= MIN_RESULT_PAGE_SIZE ? Math.min(Math.floor(fallback), MAX_RESULT_PAGE_SIZE) : DEFAULT_RESULT_PAGE_SIZE; + const fallbackValue = Number.isFinite(fallback) && fallback >= MIN_RESULT_PAGE_SIZE ? Math.floor(fallback) : DEFAULT_RESULT_PAGE_SIZE; const parsed = Number(value); if (!Number.isFinite(parsed)) return fallbackValue; const rounded = Math.floor(parsed); if (rounded < MIN_RESULT_PAGE_SIZE) return fallbackValue; - return Math.min(rounded, MAX_RESULT_PAGE_SIZE); + return rounded; } export function resultPageSizeMenuOptions(current: number): number[] { diff --git a/docs/performance/memory-usage-audit.md b/docs/performance/memory-usage-audit.md index fbd1a73aa..3d0291a06 100644 --- a/docs/performance/memory-usage-audit.md +++ b/docs/performance/memory-usage-audit.md @@ -88,6 +88,7 @@ Chunk 体积不等于运行时内存,但能提示哪些功能首次打开会 4. 导出改成 streaming writer,不返回包含全量 rows 的 `QueryResult`。CSV/Excel/JSON 都应边拉边写,避免 `rows.push(...)` 聚合。 5. 缓存落盘时避免 `structuredClone`、row-to-column、encode 同时叠加;可用分块序列化,或在清空原始引用后再进行后台转换。 6. 对 `MAX_RESULT_PAGE_SIZE` 做产品级收紧。当前最大可到 100,000 行,配合宽表和 DataGrid 派生数组会非常容易冲高内存。 +7. 某些场景需要用到全量查询,不能一概而论。关闭最大100,000 行 的数据限制 ## 2. 数据对比 Data Compare From d6e25f6f406923ba83e6e7c94d245e3e85570c01 Mon Sep 17 00:00:00 2001 From: superfastbuild Date: Fri, 10 Jul 2026 09:03:38 +0800 Subject: [PATCH 2/2] =?UTF-8?q?CI=E4=B8=8D=E9=80=9A=E8=BF=87=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=90=8E=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/desktop/src/components/grid/DataGrid.vue | 1 - apps/desktop/src/lib/dataGrid/paginationPageSize.ts | 1 - docs/performance/memory-usage-audit.md | 3 +-- packages/app-tests/settingsStore.test.ts | 2 +- 4 files changed, 2 insertions(+), 5 deletions(-) diff --git a/apps/desktop/src/components/grid/DataGrid.vue b/apps/desktop/src/components/grid/DataGrid.vue index d7387388b..c99b5811f 100644 --- a/apps/desktop/src/components/grid/DataGrid.vue +++ b/apps/desktop/src/components/grid/DataGrid.vue @@ -127,7 +127,6 @@ import { EDITOR_FONT_FAMILY_CSS_VAR } from "@/lib/editor/editorThemes"; import { safeLocalStorageGet, safeLocalStorageSet } from "@/lib/backend/safeStorage"; import { appendColumnValueFilterCondition, buildColumnValueFilterCondition, buildColumnValuesFilterCondition, combineWhereInputs, filterModeNeedsValue, parseFilterValue } from "@/lib/dataGrid/dataGridColumnFilter"; import { clampSearchSplitWidth } from "@/lib/dataGrid/dataGridSearchSplit"; -// import { MAX_RESULT_PAGE_SIZE, MIN_RESULT_PAGE_SIZE, normalizeResultPageSize, resultPageSizeMenuOptions } from "@/lib/dataGrid/paginationPageSize"; import { MIN_RESULT_PAGE_SIZE, normalizeResultPageSize, resultPageSizeMenuOptions } from "@/lib/dataGrid/paginationPageSize"; import { allNullColumnIndexes, filterColumnVisibilityOptions, hiddenColumnIndexesWithAllNullColumns, invertedHiddenColumnIndexes, nextHiddenColumnIndexes, removeAutoHiddenColumnIndexes, visibleColumnIndexesForFilter } from "@/lib/dataGrid/dataGridColumnVisibility"; import { buildDataGridColumnLookupItems, filterDataGridColumnLookupItems } from "@/lib/dataGrid/dataGridColumnLookup"; diff --git a/apps/desktop/src/lib/dataGrid/paginationPageSize.ts b/apps/desktop/src/lib/dataGrid/paginationPageSize.ts index 0739523c2..a0764c44b 100644 --- a/apps/desktop/src/lib/dataGrid/paginationPageSize.ts +++ b/apps/desktop/src/lib/dataGrid/paginationPageSize.ts @@ -1,7 +1,6 @@ export const RESULT_PAGE_SIZE_OPTIONS = [50, 100, 500, 1000]; export const DEFAULT_RESULT_PAGE_SIZE = 100; export const MIN_RESULT_PAGE_SIZE = 1; -// export const MAX_RESULT_PAGE_SIZE = 100000; export function normalizeResultPageSize(value: unknown, fallback = DEFAULT_RESULT_PAGE_SIZE): number { const fallbackValue = Number.isFinite(fallback) && fallback >= MIN_RESULT_PAGE_SIZE ? Math.floor(fallback) : DEFAULT_RESULT_PAGE_SIZE; diff --git a/docs/performance/memory-usage-audit.md b/docs/performance/memory-usage-audit.md index 3d0291a06..febb2c584 100644 --- a/docs/performance/memory-usage-audit.md +++ b/docs/performance/memory-usage-audit.md @@ -87,8 +87,7 @@ Chunk 体积不等于运行时内存,但能提示哪些功能首次打开会 3. 客户端搜索增加上限和渐进式扫描,例如只扫描当前页或前 N 行,超限提示用户改用 SQL 查询。 4. 导出改成 streaming writer,不返回包含全量 rows 的 `QueryResult`。CSV/Excel/JSON 都应边拉边写,避免 `rows.push(...)` 聚合。 5. 缓存落盘时避免 `structuredClone`、row-to-column、encode 同时叠加;可用分块序列化,或在清空原始引用后再进行后台转换。 -6. 对 `MAX_RESULT_PAGE_SIZE` 做产品级收紧。当前最大可到 100,000 行,配合宽表和 DataGrid 派生数组会非常容易冲高内存。 -7. 某些场景需要用到全量查询,不能一概而论。关闭最大100,000 行 的数据限制 +6. 取消分页条数 100000 硬性上限,支持全量查询场景;超大分页 + 宽表易引发内存暴涨,请按需合理使用。 ## 2. 数据对比 Data Compare diff --git a/packages/app-tests/settingsStore.test.ts b/packages/app-tests/settingsStore.test.ts index f089e62e4..14c280938 100644 --- a/packages/app-tests/settingsStore.test.ts +++ b/packages/app-tests/settingsStore.test.ts @@ -44,7 +44,7 @@ async function withMockLocalStorage(initial: Record, run: () => test("normalizes saved query result page size", () => { assert.equal(DEFAULT_EDITOR_SETTINGS.pageSize, 100); assert.equal(normalizeEditorSettings({ pageSize: 5000 }).pageSize, 5000); - assert.equal(normalizeEditorSettings({ pageSize: 200000 }).pageSize, 100000); + assert.equal(normalizeEditorSettings({ pageSize: 200000 }).pageSize, 200000); assert.equal(normalizeEditorSettings({ pageSize: 0 }).pageSize, 100); });