perf: svod2-memory — final без повторного выбора «Все ССП/РФ», ожидание стабилизации строк
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
3363291801
commit
4e5ba53811
@ -12,7 +12,7 @@ import { loginAs, WEB } from '../lib/auth';
|
||||
import { throttle, heapUsed, domCounters } from '../lib/cdp';
|
||||
import { append } from '../lib/results';
|
||||
import { scrollThrough } from '../lib/scroll';
|
||||
import { SVOD2_DATA_ROW_SELECTOR, memoryPoints } from '../lib/svod2';
|
||||
import { SVOD2_DATA_ROW_SELECTOR, SVOD2_PLACEHOLDER_SELECTOR, memoryPoints } from '../lib/svod2';
|
||||
|
||||
const CONTAINER = '.MuiTableContainer-root';
|
||||
const MIN_ROWS = 20;
|
||||
@ -30,6 +30,24 @@ async function waitRows(page: Page, what: string): Promise<number> {
|
||||
}
|
||||
}
|
||||
|
||||
/** Ждём окончания загрузки: число строк и число заглушек не меняются 3 опроса подряд (интервал 300 мс). */
|
||||
async function settle(page: Page): Promise<number> {
|
||||
let prev = '';
|
||||
let same = 0;
|
||||
const t0 = Date.now();
|
||||
for (;;) {
|
||||
const cur = await page.evaluate(
|
||||
([sel, rs, ph]) => `${document.querySelectorAll(`${sel} ${rs}`).length}/${document.querySelectorAll(`${sel} ${ph}`).length}`,
|
||||
[CONTAINER, SVOD2_DATA_ROW_SELECTOR, SVOD2_PLACEHOLDER_SELECTOR],
|
||||
);
|
||||
same = cur === prev ? same + 1 : 0;
|
||||
prev = cur;
|
||||
if (same >= 3) return Number(cur.split('/')[0]);
|
||||
if (Date.now() - t0 > LOAD_TIMEOUT) throw new Error(`settle: строки не стабилизировались за ${LOAD_TIMEOUT} мс (${cur})`);
|
||||
await page.waitForTimeout(300);
|
||||
}
|
||||
}
|
||||
|
||||
/** «Все ССП/РФ» + «Загрузить» (Svod2Page.jsx), как в scroll.spec.ts. */
|
||||
async function loadAll(page: Page): Promise<void> {
|
||||
await page.getByLabel('ССП/РФ').click();
|
||||
@ -78,11 +96,11 @@ for (let repeat = 0; repeat < REPEATS; repeat++) {
|
||||
if (!r.complete) throw new Error(`rf_scrolled: скролл не дошёл до конца (${r.reason ?? 'incomplete'})`);
|
||||
rows = await waitRows(page, point);
|
||||
} else {
|
||||
// выбор и данные хранятся по вкладкам (SvodContext, useSvod2Pages): повторный loadAll снял бы «Все ССП/РФ»
|
||||
await page.getByRole('tab').nth(0).click();
|
||||
await loadAll(page);
|
||||
rows = await waitRows(page, point);
|
||||
}
|
||||
await page.waitForTimeout(500);
|
||||
rows = await settle(page);
|
||||
await sample(point, rows);
|
||||
}
|
||||
} finally {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user