fix(optimizer): ускорить точный выбор проб из большого пула
This commit is contained in:
1 parent
c6dfa5267b
commit
52d8a05480
8 files changed
+306
-32
No files matched your search
@@ -170,3 +170,14 @@ Final1000WAN:134chars/86.5px высоты summary; WAN10:130chars/86.5px. В т
|
||||
2026-10-04, UI/source расчёта не менялись. Child script принимает integer count20–1000, hard timeout10с, без API/DB/браузера/сети.7WAN×1000: equal1217.5ms (IDs p0..6), varied7967.5ms (p13..19), freshness не завершился за10с, процесс остановлен. Startup отдельно ~0.4s. Freshness создаёт1000 разных возрастов, будущие timestamps не используются. ESLint скрипта прошёл; корректность ID проверяется после успешного завершения.
|
||||
|
||||
Это оставшийся CPU риск, а не performance приёмка. В current DFS повторяются Date.parse/trim/score и оценка upper для ветвей, уже достигших максимум. Следующий12.3.66: score cache только для bounded WAN≤7 DFS с одним snapshot time и early stop при достижении node upper, preserving first tie/order/forced picks/greedy fallback. Проверить1200 legacy oracle fixtures, raw observations, profiles20/1000. Худшая комбинаторика и весь full-route product по-прежнему не ограничены.
|
||||
|
||||
|
||||
## 12.3.66 — точный выбор проб из большого pool
|
||||
|
||||
2026-10-07. Score matrix вычисляется только при exact DFS≤7WAN/pool≥WAN, с единым временем ранжирования на назначение JH. Сырые наблюдения/даты не меняются, greedy fallback сохранён. Допустимый score-first greedy путь даёт только lower total, не готовое назначение. Пока DFS не нашёл реальный witness, равные верхние границы НЕ отсекаются; первое равное назначение остаётся в исходном pool order. Node stop требует реального bestAssign. Для каждого кандидата child upper выводится из topK максимумов текущего узла с исключением занятой пробы; уже проигрышные siblings не пересканируют весь pool. Forced pick сохраняется, даже если ветвь отсечена.
|
||||
|
||||
1230 seeded сравнений с независимым прежним DFS совпали по точным probe IDs, включая30 смешанных наборов7WAN.10 pure tests прошли: ties/partial matching, single snapshot при переходе часа, прежний greedy для8WAN, unknown/zero/disabled/raw snapshots.51 main browser и8 context прошли; TypeScript без incremental, targeted lint и production build успешны. Historical9 optimizer PNG восстановлены по точному списку.
|
||||
|
||||
Pure child CPU1000: equal1217.5→15.6ms,varied7967.5→14.5ms,freshness10с timeout→16.7ms; CPU20:11.5–11.7ms. Child startup отдельно~0.25s. Exact IDs проверены во всех6 профилях. Evidence docs/ux-ui/acceptance/optimizer-probes-cpu-2026-10-07.json содержит source SHA256, baseline HEAD и результаты. Браузерная live ветка7WAN/1000probes:219902bytes/7rows/222tableDOM/1018ms dev-ready; timestamps соответствуют p993..999, после refresh сохраняются,320px без overflow, API mutations отсутствуют. Это не production SLA/нагрузка PostgreSQL/RouterOS и не гарантия произвольного mixed pool: худшая экспоненциальная сложность DFS и full-route product остаются.
|
||||
|
||||
Следующий12.3.67: KPI captions JH/Exit (повторы/пустая площадка/unknown), затем separate full-route CPU profile. Общая main/context регрессия12.4.6/7 относится к прежним HEAD; этот delta принят профильными51+8. Внешняя12.5 не выполнена.
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# План реализации UX/UI по пятичасовым окнам
|
||||
|
||||
Актуальное продолжение 2026-10-04: 12.3.65 baseline7WAN×1000pool сохранён: equal1218ms,varied7968ms,freshness timeout10с. Следующий12.3.66: кешировать score пары WAN/probe на одном времени снимка только в DFS≤7, безопасно завершать ветвь при достижении её upper bound; доказать exact IDs/ties и повторить20/1000 child profiles. Не запускать тяжёлый pool в UI. Внешняя12.5 остаётся.
|
||||
Актуальное продолжение 2026-10-07: 12.3.66 завершён: DFS score cache/one-time snapshot/lower-bound/child-bound, exact1230 fixtures,10pure+51main+8context/build passed. CPU1000 equal15.6ms,varied14.5ms,freshness16.7ms вместо10с timeout. Следующий12.3.67: краткие KPI captions JH/Exit с честными площадками/unknown. Затем отдельный CPU-профиль full-route product; внешняя12.5 остаётся.
|
||||
|
||||
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-04. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# UX/UI: журнал реализации
|
||||
|
||||
Актуальное продолжение 2026-10-04: 12.3.65 baseline7WAN×1000pool сохранён: equal1218ms,varied7968ms,freshness timeout10с. Следующий12.3.66: кешировать score пары WAN/probe на одном времени снимка только в DFS≤7, безопасно завершать ветвь при достижении её upper bound; доказать exact IDs/ties и повторить20/1000 child profiles. Не запускать тяжёлый pool в UI. Внешняя12.5 остаётся.
|
||||
Актуальное продолжение 2026-10-07: 12.3.66 завершён: DFS score cache/one-time snapshot/lower-bound/child-bound, exact1230 fixtures,10pure+51main+8context/build passed. CPU1000 equal15.6ms,varied14.5ms,freshness16.7ms вместо10с timeout. Следующий12.3.67: краткие KPI captions JH/Exit с честными площадками/unknown. Затем отдельный CPU-профиль full-route product; внешняя12.5 остаётся.
|
||||
|
||||
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения.
|
||||
|
||||
|
||||
@@ -747,3 +747,14 @@ Final1000WAN:134chars/86.5px высоты summary; WAN10:130chars/86.5px. В т
|
||||
2026-10-04, UI/source расчёта не менялись. Child script принимает integer count20–1000, hard timeout10с, без API/DB/браузера/сети.7WAN×1000: equal1217.5ms (IDs p0..6), varied7967.5ms (p13..19), freshness не завершился за10с, процесс остановлен. Startup отдельно ~0.4s. Freshness создаёт1000 разных возрастов, будущие timestamps не используются. ESLint скрипта прошёл; корректность ID проверяется после успешного завершения.
|
||||
|
||||
Это оставшийся CPU риск, а не performance приёмка. В current DFS повторяются Date.parse/trim/score и оценка upper для ветвей, уже достигших максимум. Следующий12.3.66: score cache только для bounded WAN≤7 DFS с одним snapshot time и early stop при достижении node upper, preserving first tie/order/forced picks/greedy fallback. Проверить1200 legacy oracle fixtures, raw observations, profiles20/1000. Худшая комбинаторика и весь full-route product по-прежнему не ограничены.
|
||||
|
||||
|
||||
## 12.3.66 — точный выбор проб из большого pool
|
||||
|
||||
2026-10-07. Score matrix вычисляется только при exact DFS≤7WAN/pool≥WAN, с единым временем ранжирования на назначение JH. Сырые наблюдения/даты не меняются, greedy fallback сохранён. Допустимый score-first greedy путь даёт только lower total, не готовое назначение. Пока DFS не нашёл реальный witness, равные верхние границы НЕ отсекаются; первое равное назначение остаётся в исходном pool order. Node stop требует реального bestAssign. Для каждого кандидата child upper выводится из topK максимумов текущего узла с исключением занятой пробы; уже проигрышные siblings не пересканируют весь pool. Forced pick сохраняется, даже если ветвь отсечена.
|
||||
|
||||
1230 seeded сравнений с независимым прежним DFS совпали по точным probe IDs, включая30 смешанных наборов7WAN.10 pure tests прошли: ties/partial matching, single snapshot при переходе часа, прежний greedy для8WAN, unknown/zero/disabled/raw snapshots.51 main browser и8 context прошли; TypeScript без incremental, targeted lint и production build успешны. Historical9 optimizer PNG восстановлены по точному списку.
|
||||
|
||||
Pure child CPU1000: equal1217.5→15.6ms,varied7967.5→14.5ms,freshness10с timeout→16.7ms; CPU20:11.5–11.7ms. Child startup отдельно~0.25s. Exact IDs проверены во всех6 профилях. Evidence docs/ux-ui/acceptance/optimizer-probes-cpu-2026-10-07.json содержит source SHA256, baseline HEAD и результаты. Браузерная live ветка7WAN/1000probes:219902bytes/7rows/222tableDOM/1018ms dev-ready; timestamps соответствуют p993..999, после refresh сохраняются,320px без overflow, API mutations отсутствуют. Это не production SLA/нагрузка PostgreSQL/RouterOS и не гарантия произвольного mixed pool: худшая экспоненциальная сложность DFS и full-route product остаются.
|
||||
|
||||
Следующий12.3.67: KPI captions JH/Exit (повторы/пустая площадка/unknown), затем separate full-route CPU profile. Общая main/context регрессия12.4.6/7 относится к прежним HEAD; этот delta принят профильными51+8. Внешняя12.5 не выполнена.
|
||||
@@ -0,0 +1,166 @@
|
||||
{
|
||||
"baseHead": "c6dfa5267b210b01fe72cbac7b310d3960a6a131",
|
||||
"sourceSha256": "53273273c46f78cde2c82cff52b282dd19dcfc5c363f0b64c0b50cac44e20510",
|
||||
"environment": "Pure calculation child process, no API/database/network",
|
||||
"runs": [
|
||||
{
|
||||
"variant": "equal",
|
||||
"wanCount": 7,
|
||||
"probeCount": 20,
|
||||
"timeoutMs": 10000,
|
||||
"elapsedMs": 273,
|
||||
"status": 0,
|
||||
"timedOut": false,
|
||||
"result": {
|
||||
"elapsedMs": 11.667099999999976,
|
||||
"legs": 7,
|
||||
"probeIds": [
|
||||
"p0",
|
||||
"p1",
|
||||
"p2",
|
||||
"p3",
|
||||
"p4",
|
||||
"p5",
|
||||
"p6"
|
||||
]
|
||||
},
|
||||
"error": ""
|
||||
},
|
||||
{
|
||||
"variant": "varied",
|
||||
"wanCount": 7,
|
||||
"probeCount": 20,
|
||||
"timeoutMs": 10000,
|
||||
"elapsedMs": 245,
|
||||
"status": 0,
|
||||
"timedOut": false,
|
||||
"result": {
|
||||
"elapsedMs": 11.477599999999995,
|
||||
"legs": 7,
|
||||
"probeIds": [
|
||||
"p13",
|
||||
"p14",
|
||||
"p15",
|
||||
"p16",
|
||||
"p17",
|
||||
"p18",
|
||||
"p19"
|
||||
]
|
||||
},
|
||||
"error": ""
|
||||
},
|
||||
{
|
||||
"variant": "freshness",
|
||||
"wanCount": 7,
|
||||
"probeCount": 20,
|
||||
"timeoutMs": 10000,
|
||||
"elapsedMs": 275,
|
||||
"status": 0,
|
||||
"timedOut": false,
|
||||
"result": {
|
||||
"elapsedMs": 11.482100000000003,
|
||||
"legs": 7,
|
||||
"probeIds": [
|
||||
"p13",
|
||||
"p14",
|
||||
"p15",
|
||||
"p16",
|
||||
"p17",
|
||||
"p18",
|
||||
"p19"
|
||||
]
|
||||
},
|
||||
"error": ""
|
||||
},
|
||||
{
|
||||
"variant": "equal",
|
||||
"wanCount": 7,
|
||||
"probeCount": 1000,
|
||||
"timeoutMs": 10000,
|
||||
"elapsedMs": 247,
|
||||
"status": 0,
|
||||
"timedOut": false,
|
||||
"result": {
|
||||
"elapsedMs": 15.580399999999997,
|
||||
"legs": 7,
|
||||
"probeIds": [
|
||||
"p0",
|
||||
"p1",
|
||||
"p2",
|
||||
"p3",
|
||||
"p4",
|
||||
"p5",
|
||||
"p6"
|
||||
]
|
||||
},
|
||||
"error": ""
|
||||
},
|
||||
{
|
||||
"variant": "varied",
|
||||
"wanCount": 7,
|
||||
"probeCount": 1000,
|
||||
"timeoutMs": 10000,
|
||||
"elapsedMs": 244,
|
||||
"status": 0,
|
||||
"timedOut": false,
|
||||
"result": {
|
||||
"elapsedMs": 14.4709,
|
||||
"legs": 7,
|
||||
"probeIds": [
|
||||
"p13",
|
||||
"p14",
|
||||
"p15",
|
||||
"p16",
|
||||
"p17",
|
||||
"p18",
|
||||
"p19"
|
||||
]
|
||||
},
|
||||
"error": ""
|
||||
},
|
||||
{
|
||||
"variant": "freshness",
|
||||
"wanCount": 7,
|
||||
"probeCount": 1000,
|
||||
"timeoutMs": 10000,
|
||||
"elapsedMs": 242,
|
||||
"status": 0,
|
||||
"timedOut": false,
|
||||
"result": {
|
||||
"elapsedMs": 16.685599999999994,
|
||||
"legs": 7,
|
||||
"probeIds": [
|
||||
"p993",
|
||||
"p994",
|
||||
"p995",
|
||||
"p996",
|
||||
"p997",
|
||||
"p998",
|
||||
"p999"
|
||||
]
|
||||
},
|
||||
"error": ""
|
||||
}
|
||||
],
|
||||
"browserProfiles": {
|
||||
"source": "Playwright stdout, live API fixture",
|
||||
"passed": 51,
|
||||
"contextPassed": 8,
|
||||
"profiles": [
|
||||
{
|
||||
"poolCount": 20,
|
||||
"probeBytes": 4382,
|
||||
"rendered": 7,
|
||||
"tableNodes": 222,
|
||||
"readyMs": 1293
|
||||
},
|
||||
{
|
||||
"poolCount": 1000,
|
||||
"probeBytes": 219902,
|
||||
"rendered": 7,
|
||||
"tableNodes": 222,
|
||||
"readyMs": 1018
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user