Профилирование фронта и бэка: стенд, замеры, отчёт (#202) #203
@ -43,10 +43,10 @@ def main(argv=None):
|
||||
pr = man["project_reports"][0]
|
||||
year = f2["year"]
|
||||
reqs = [
|
||||
("rf", f"лист FORM_2/AHR ({f2['rows']} строк)", f"/api/v1/form/{f2['form_id']}/sheet/AHR"),
|
||||
("rf", f"лист FORM_4/CAP ({f4c['rows']} строк)", f"/api/v1/form/{f4c['form_id']}/sheet/CAP"),
|
||||
("rf", f"лист FORM_4/AHR ({f4a['rows']} строк)", f"/api/v1/form/{f4a['form_id']}/sheet/AHR"),
|
||||
("rf", f"отчёт проекта {pr['report_type']} ({pr['rows']} строк)", f"/api/v1/projects/{pr['project_id']}/report/{pr['year']}/{pr['report_type']}"),
|
||||
("rf", "лист FORM_2/AHR", f"/api/v1/form/{f2['form_id']}/sheet/AHR"),
|
||||
("rf", "лист FORM_4/CAP", f"/api/v1/form/{f4c['form_id']}/sheet/CAP"),
|
||||
("rf", "лист FORM_4/AHR", f"/api/v1/form/{f4a['form_id']}/sheet/AHR"),
|
||||
("rf", f"отчёт проекта {pr['report_type']}", f"/api/v1/projects/{pr['project_id']}/report/{pr['year']}/{pr['report_type']}"),
|
||||
("dfip", "свод 1 MAIN", f"/api/v1/svod/1/MAIN/{year}"),
|
||||
("dfip", "свод 2 GO (все организации)", f"/api/v1/svod/2/GO/{year}"),
|
||||
("dfip", "свод 2 RF (все организации)", f"/api/v1/svod/2/RF/{year}"),
|
||||
@ -69,11 +69,12 @@ def main(argv=None):
|
||||
dt = (time.perf_counter() - t0) * 1000
|
||||
r.raise_for_status()
|
||||
if i == 0:
|
||||
rows = len(r.json().get("result") or []) # фактическое число строк ответа (манифест - до grow)
|
||||
continue # прогрев
|
||||
tot.append(dt)
|
||||
db.append(float(r.headers.get("x-db-time-ms", "nan")))
|
||||
size = len(body)
|
||||
row = {"role": role, "request": label, "path": path, "total_ms": round(statistics.median(tot), 1),
|
||||
row = {"role": role, "request": f"{label} ({rows} строк ответа)", "rows": rows, "path": path, "total_ms": round(statistics.median(tot), 1),
|
||||
"db_ms": round(statistics.median(db), 1), "bytes": size, "content_encoding": r.headers.get("content-encoding")}
|
||||
row["python_ms"] = round(row["total_ms"] - row["db_ms"], 1)
|
||||
row["python_share"] = round(row["python_ms"] / row["total_ms"], 2)
|
||||
|
||||
@ -25,6 +25,8 @@ def main(argv=None):
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument("run_dir")
|
||||
ap.add_argument("--out", required=True)
|
||||
ap.add_argument("--name", default="hotspots", help="базовое имя выходных файлов")
|
||||
ap.add_argument("--renders-only", action="store_true", help="только modal_renders (например для основного прогона)")
|
||||
a = ap.parse_args(argv)
|
||||
rd, out = Path(a.run_dir), Path(a.out)
|
||||
out.mkdir(parents=True, exist_ok=True)
|
||||
@ -51,15 +53,23 @@ def main(argv=None):
|
||||
elif m.get("steps"):
|
||||
res["cpu"].append({"target": r["target"], "role": r["role"], "steps": m["steps"], "main_thread_ms_per_step": round(m["main_thread_ms_per_step"], 1),
|
||||
"artifacts": r["artifacts"]})
|
||||
for r in load(rd / "modal.jsonl"):
|
||||
for r in ([] if a.renders_only else load(rd / "modal.jsonl")):
|
||||
res["modal"].append({"target": r["target"], "role": r["role"], "click_to_visible_ms": round(r["metrics"]["click_to_visible_ms"], 1),
|
||||
"main_thread_ms": round(r["metrics"]["main_thread_ms"], 1)})
|
||||
for r in load(rd / "modal_renders.jsonl"):
|
||||
m = r["metrics"]
|
||||
res["modal_renders"].append({"target": r["target"], "commits": m["commits"], "renders": m["total_renders"],
|
||||
"self_ms": round(m["total_self_ms"], 1), "top": [[x["component"], x["renders"], round(x["self_ms"], 1)] for x in m["renders_top"][:6]]})
|
||||
(out / "hotspots.json").write_text(json.dumps(res, ensure_ascii=False, indent=1))
|
||||
(out / f"{a.name}.json").write_text(json.dumps(res, ensure_ascii=False, indent=1))
|
||||
|
||||
if a.renders_only:
|
||||
md = [f"# Рендеры React при открытии модалок: {rd.name} (modal_renders.jsonl, hotspots_summary.py --renders-only)", "",
|
||||
"| модалка | коммитов | рендеров | self, мс | топ компонентов (рендеры/self мс) |", "|---|---|---|---|---|"]
|
||||
md += [f"| {r['target']} | {r['commits']} | {r['renders']} | {r['self_ms']} | " + "; ".join(f"{c} {n}/{s_}" for c, n, s_ in r["top"][:6]) + " |"
|
||||
for r in res["modal_renders"]]
|
||||
(out / f"{a.name}.md").write_text("\n".join(md) + "\n")
|
||||
print("\n".join(md))
|
||||
return
|
||||
md += ["## Рендеры React на шаг колеса 200 px (профилирующая сборка :8081)", "",
|
||||
"| target | роль | шагов | коммитов/шаг | рендеров компонентов/шаг | из них Styled(td)/шаг | self React, мс | main thread/шаг, мс |", "|---|---|---|---|---|---|---|---|"]
|
||||
md += [f"| {r['target']} | {r['role']} | {r['steps']} | {r['commits_per_step']} | {r['renders_per_step']} | {r['td_renders_per_step']} | {r['react_self_ms']} | {r['main_thread_ms_per_step']} |" for r in res["react"]]
|
||||
@ -76,7 +86,9 @@ def main(argv=None):
|
||||
md.append(f"| {r['mode']} | {r['target']} | {r['main_thread_ms']} | {mu['frames']} | {mu['frames_with_mutation']} | {mu['first_mutation_frame']} | "
|
||||
f"{mu['long_task_n']} ({', '.join(f'{d} мс' for _, d in mu['long_tasks'][:3])}) | {kinds} | {r.get('commits', '')} коммитов / {r.get('renders', '')} |")
|
||||
for g in res["cssgrowth"]:
|
||||
md += ["", f"## Рост CSS-правил и matchMedia по циклам: {g['target']}", "",
|
||||
variant = ("цикл AHR -> скролл -> /tasks -> второй лист -> скролл -> /tasks, со счётчиком matchMedia"
|
||||
if any("matchmedia_calls" in c for c in g["cycles"]) else "цикл AHR -> скролл 40 шагов -> /tasks")
|
||||
md += ["", f"## Рост CSS-правил и matchMedia по циклам: {g['target']} ({variant})", "",
|
||||
"| цикл | main thread/шаг, мс | CSS-правил | @media | style | вызовов matchMedia | нетто listeners matchMedia |", "|---|---|---|---|---|---|---|"]
|
||||
for c in g["cycles"]:
|
||||
md.append(f"| {c['cycle']} | {c.get('scroll_ms_per_step', '')} | {c['css_rules']} | {c['css_media_rules']} | {c['style_elements']} | {c.get('matchmedia_calls', '')} | {c.get('matchmedia_listeners_net', '')} |")
|
||||
@ -89,7 +101,7 @@ def main(argv=None):
|
||||
if res["modal_renders"]:
|
||||
md += ["", "| модалка | коммитов | рендеров | self, мс | топ |", "|---|---|---|---|---|"]
|
||||
md += [f"| {r['target']} | {r['commits']} | {r['renders']} | {r['self_ms']} | " + "; ".join(f"{c} {n}/{s}" for c, n, s in r["top"][:4]) + " |" for r in res["modal_renders"]]
|
||||
(out / "hotspots.md").write_text("\n".join(md) + "\n")
|
||||
(out / f"{a.name}.md").write_text("\n".join(md) + "\n")
|
||||
print("\n".join(md))
|
||||
|
||||
|
||||
|
||||
24
perf/report-data/20261026-control-s1/gen-stats-s1.json
Normal file
24
perf/report-data/20261026-control-s1/gen-stats-s1.json
Normal file
@ -0,0 +1,24 @@
|
||||
{
|
||||
"scale": 1,
|
||||
"plan": {
|
||||
"org_units_ssp": 3,
|
||||
"org_units_rf": 6,
|
||||
"vsp_per_rf": 30,
|
||||
"extra_lines_per_sheet": 500,
|
||||
"projects_per_rf": 4,
|
||||
"fill_ratio": 0.6
|
||||
},
|
||||
"elapsed_s": 657.4,
|
||||
"requests": 26832,
|
||||
"stats": {
|
||||
"form4_projects": 108,
|
||||
"bad_leaves": 0,
|
||||
"lines_added": 22800,
|
||||
"cells_written": 505016,
|
||||
"satellite_lines": 540,
|
||||
"phases_created": 258,
|
||||
"projects": 24,
|
||||
"project_phases_created": 144,
|
||||
"self_check": 1
|
||||
}
|
||||
}
|
||||
26
perf/report-data/20261026-control-s1/grow-s1.json
Normal file
26
perf/report-data/20261026-control-s1/grow-s1.json
Normal file
@ -0,0 +1,26 @@
|
||||
[
|
||||
{
|
||||
"sheet": "FORM_2/AHR_UTILITY",
|
||||
"form_id": 7,
|
||||
"before": 31,
|
||||
"after": 500,
|
||||
"added": 469,
|
||||
"seconds": 0.8
|
||||
},
|
||||
{
|
||||
"sheet": "FORM_2/AHR_SECURITY",
|
||||
"form_id": 7,
|
||||
"before": 31,
|
||||
"after": 500,
|
||||
"added": 469,
|
||||
"seconds": 0.8
|
||||
},
|
||||
{
|
||||
"sheet": "FORM_4/CAP",
|
||||
"form_id": 13,
|
||||
"before": 110,
|
||||
"after": 300,
|
||||
"added": 190,
|
||||
"seconds": 208.7
|
||||
}
|
||||
]
|
||||
495
perf/report-data/20261026-control-s1/manifest-s1.json
Normal file
495
perf/report-data/20261026-control-s1/manifest-s1.json
Normal file
@ -0,0 +1,495 @@
|
||||
{
|
||||
"scale": 1,
|
||||
"users": {
|
||||
"admin": {
|
||||
"username": "admin",
|
||||
"password": "admin",
|
||||
"role_id": 1
|
||||
},
|
||||
"rf": {
|
||||
"username": "perf_rf",
|
||||
"password": "perf",
|
||||
"role_id": 3
|
||||
},
|
||||
"rf_coauthor": {
|
||||
"username": "perf_rf_coauthor",
|
||||
"password": "perf",
|
||||
"role_id": 3
|
||||
},
|
||||
"dfip": {
|
||||
"username": "perf_dfip",
|
||||
"password": "perf",
|
||||
"role_id": 2
|
||||
}
|
||||
},
|
||||
"sheets": [
|
||||
{
|
||||
"form_id": 1,
|
||||
"form_type": "FORM_1",
|
||||
"sheet": "OPER",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/1/form-type/FORM_1/OPER/null/2026",
|
||||
"rows": 547,
|
||||
"owner": "ssp"
|
||||
},
|
||||
{
|
||||
"form_id": 1,
|
||||
"form_type": "FORM_1",
|
||||
"sheet": "SMETA",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/1/form-type/FORM_1/SMETA/null/2026",
|
||||
"rows": 130,
|
||||
"owner": "ssp"
|
||||
},
|
||||
{
|
||||
"form_id": 1,
|
||||
"form_type": "FORM_1",
|
||||
"sheet": "AHR",
|
||||
"direction": "Support",
|
||||
"year": 2026,
|
||||
"url": "/table/form/1/form-type/FORM_1/AHR/Support/2026",
|
||||
"rows": 1022,
|
||||
"owner": "ssp"
|
||||
},
|
||||
{
|
||||
"form_id": 1,
|
||||
"form_type": "FORM_1",
|
||||
"sheet": "AHR",
|
||||
"direction": "Development",
|
||||
"year": 2026,
|
||||
"url": "/table/form/1/form-type/FORM_1/AHR/Development/2026",
|
||||
"rows": 1022,
|
||||
"owner": "ssp"
|
||||
},
|
||||
{
|
||||
"form_id": 1,
|
||||
"form_type": "FORM_1",
|
||||
"sheet": "CAP",
|
||||
"direction": "Support",
|
||||
"year": 2026,
|
||||
"url": "/table/form/1/form-type/FORM_1/CAP/Support/2026",
|
||||
"rows": 708,
|
||||
"owner": "ssp"
|
||||
},
|
||||
{
|
||||
"form_id": 1,
|
||||
"form_type": "FORM_1",
|
||||
"sheet": "CAP",
|
||||
"direction": "Development",
|
||||
"year": 2026,
|
||||
"url": "/table/form/1/form-type/FORM_1/CAP/Development/2026",
|
||||
"rows": 708,
|
||||
"owner": "ssp"
|
||||
},
|
||||
{
|
||||
"form_id": 4,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "AHR",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/4/form-type/FORM_2/AHR/null/2026",
|
||||
"rows": 1066,
|
||||
"owner": "ssp"
|
||||
},
|
||||
{
|
||||
"form_id": 4,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "CAP",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/4/form-type/FORM_2/CAP/null/2026",
|
||||
"rows": 708,
|
||||
"owner": "ssp"
|
||||
},
|
||||
{
|
||||
"form_id": 4,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "OPER",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/4/form-type/FORM_2/OPER/null/2026",
|
||||
"rows": 547,
|
||||
"owner": "ssp"
|
||||
},
|
||||
{
|
||||
"form_id": 4,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "AHR_LIMIT",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/4/form-type/FORM_2/AHR_LIMIT/null/2026",
|
||||
"rows": 27,
|
||||
"owner": "ssp"
|
||||
},
|
||||
{
|
||||
"form_id": 4,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "AHR_RENT",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/4/form-type/FORM_2/AHR_RENT/null/2026",
|
||||
"rows": 1,
|
||||
"owner": "ssp"
|
||||
},
|
||||
{
|
||||
"form_id": 4,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "AHR_UTILITY",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/4/form-type/FORM_2/AHR_UTILITY/null/2026",
|
||||
"rows": 1,
|
||||
"owner": "ssp"
|
||||
},
|
||||
{
|
||||
"form_id": 4,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "AHR_SECURITY",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/4/form-type/FORM_2/AHR_SECURITY/null/2026",
|
||||
"rows": 1,
|
||||
"owner": "ssp"
|
||||
},
|
||||
{
|
||||
"form_id": 4,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "OTCH9F",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/4/form-type/FORM_2/OTCH9F/null/2026",
|
||||
"rows": 1,
|
||||
"owner": "ssp"
|
||||
},
|
||||
{
|
||||
"form_id": 4,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "SMETA",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/4/form-type/FORM_2/SMETA/null/2026",
|
||||
"rows": 134,
|
||||
"owner": "ssp"
|
||||
},
|
||||
{
|
||||
"form_id": 7,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "AHR",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/7/form-type/FORM_2/AHR/null/2026",
|
||||
"rows": 1154,
|
||||
"owner": "rf"
|
||||
},
|
||||
{
|
||||
"form_id": 7,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "CAP",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/7/form-type/FORM_2/CAP/null/2026",
|
||||
"rows": 708,
|
||||
"owner": "rf"
|
||||
},
|
||||
{
|
||||
"form_id": 7,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "OPER",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/7/form-type/FORM_2/OPER/null/2026",
|
||||
"rows": 547,
|
||||
"owner": "rf"
|
||||
},
|
||||
{
|
||||
"form_id": 7,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "AHR_LIMIT",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/7/form-type/FORM_2/AHR_LIMIT/null/2026",
|
||||
"rows": 27,
|
||||
"owner": "rf"
|
||||
},
|
||||
{
|
||||
"form_id": 7,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "AHR_RENT",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/7/form-type/FORM_2/AHR_RENT/null/2026",
|
||||
"rows": 31,
|
||||
"owner": "rf"
|
||||
},
|
||||
{
|
||||
"form_id": 7,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "AHR_UTILITY",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/7/form-type/FORM_2/AHR_UTILITY/null/2026",
|
||||
"rows": 500,
|
||||
"owner": "rf"
|
||||
},
|
||||
{
|
||||
"form_id": 7,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "AHR_SECURITY",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/7/form-type/FORM_2/AHR_SECURITY/null/2026",
|
||||
"rows": 500,
|
||||
"owner": "rf"
|
||||
},
|
||||
{
|
||||
"form_id": 7,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "OTCH9F",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/7/form-type/FORM_2/OTCH9F/null/2026",
|
||||
"rows": 1,
|
||||
"owner": "rf"
|
||||
},
|
||||
{
|
||||
"form_id": 7,
|
||||
"form_type": "FORM_2",
|
||||
"sheet": "SMETA",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/7/form-type/FORM_2/SMETA/null/2026",
|
||||
"rows": 134,
|
||||
"owner": "rf"
|
||||
},
|
||||
{
|
||||
"form_id": 13,
|
||||
"form_type": "FORM_4",
|
||||
"sheet": "AHR",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/13/form-type/FORM_4/AHR/null/2026",
|
||||
"rows": 110,
|
||||
"owner": "rf"
|
||||
},
|
||||
{
|
||||
"form_id": 13,
|
||||
"form_type": "FORM_4",
|
||||
"sheet": "CAP",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/13/form-type/FORM_4/CAP/null/2026",
|
||||
"rows": 300,
|
||||
"owner": "rf"
|
||||
},
|
||||
{
|
||||
"form_id": 13,
|
||||
"form_type": "FORM_4",
|
||||
"sheet": "OPER",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/13/form-type/FORM_4/OPER/null/2026",
|
||||
"rows": 110,
|
||||
"owner": "rf"
|
||||
},
|
||||
{
|
||||
"form_id": 13,
|
||||
"form_type": "FORM_4",
|
||||
"sheet": "STRUCTURE",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/13/form-type/FORM_4/STRUCTURE/null/2026",
|
||||
"rows": 775,
|
||||
"owner": "rf"
|
||||
},
|
||||
{
|
||||
"form_id": 13,
|
||||
"form_type": "FORM_4",
|
||||
"sheet": "SMETA",
|
||||
"direction": null,
|
||||
"year": 2026,
|
||||
"url": "/table/form/13/form-type/FORM_4/SMETA/null/2026",
|
||||
"rows": 109,
|
||||
"owner": "rf"
|
||||
}
|
||||
],
|
||||
"project_reports": [
|
||||
{
|
||||
"project_id": 1,
|
||||
"year": 2026,
|
||||
"report_type": "LIMIT",
|
||||
"url": "/table/form/1/form-type/PROJECT/LIMIT/null/2026",
|
||||
"rows": 1364
|
||||
},
|
||||
{
|
||||
"project_id": 1,
|
||||
"year": 2026,
|
||||
"report_type": "CURRENT_EXPENSES",
|
||||
"url": "/table/form/1/form-type/PROJECT/CURRENT_EXPENSES/null/2026",
|
||||
"rows": 1364
|
||||
},
|
||||
{
|
||||
"project_id": 4,
|
||||
"year": 2026,
|
||||
"report_type": "LIMIT",
|
||||
"url": "/table/form/4/form-type/PROJECT/LIMIT/null/2026",
|
||||
"rows": 1364
|
||||
},
|
||||
{
|
||||
"project_id": 3,
|
||||
"year": 2026,
|
||||
"report_type": "LIMIT",
|
||||
"url": "/table/form/3/form-type/PROJECT/LIMIT/null/2026",
|
||||
"rows": 1364
|
||||
},
|
||||
{
|
||||
"project_id": 2,
|
||||
"year": 2026,
|
||||
"report_type": "LIMIT",
|
||||
"url": "/table/form/2/form-type/PROJECT/LIMIT/null/2026",
|
||||
"rows": 1364
|
||||
},
|
||||
{
|
||||
"project_id": 3,
|
||||
"year": 2026,
|
||||
"report_type": "CURRENT_EXPENSES",
|
||||
"url": "/table/form/3/form-type/PROJECT/CURRENT_EXPENSES/null/2026",
|
||||
"rows": 1364
|
||||
},
|
||||
{
|
||||
"project_id": 2,
|
||||
"year": 2026,
|
||||
"report_type": "CURRENT_EXPENSES",
|
||||
"url": "/table/form/2/form-type/PROJECT/CURRENT_EXPENSES/null/2026",
|
||||
"rows": 1364
|
||||
},
|
||||
{
|
||||
"project_id": 4,
|
||||
"year": 2026,
|
||||
"report_type": "CURRENT_EXPENSES",
|
||||
"url": "/table/form/4/form-type/PROJECT/CURRENT_EXPENSES/null/2026",
|
||||
"rows": 1364
|
||||
},
|
||||
{
|
||||
"project_id": 2,
|
||||
"year": 2027,
|
||||
"report_type": "LIMIT",
|
||||
"url": "/table/form/2/form-type/PROJECT/LIMIT/null/2027",
|
||||
"rows": 1364
|
||||
},
|
||||
{
|
||||
"project_id": 4,
|
||||
"year": 2027,
|
||||
"report_type": "LIMIT",
|
||||
"url": "/table/form/4/form-type/PROJECT/LIMIT/null/2027",
|
||||
"rows": 1364
|
||||
},
|
||||
{
|
||||
"project_id": 2,
|
||||
"year": 2027,
|
||||
"report_type": "CURRENT_EXPENSES",
|
||||
"url": "/table/form/2/form-type/PROJECT/CURRENT_EXPENSES/null/2027",
|
||||
"rows": 1364
|
||||
},
|
||||
{
|
||||
"project_id": 4,
|
||||
"year": 2027,
|
||||
"report_type": "CURRENT_EXPENSES",
|
||||
"url": "/table/form/4/form-type/PROJECT/CURRENT_EXPENSES/null/2027",
|
||||
"rows": 1364
|
||||
}
|
||||
],
|
||||
"svods": [
|
||||
{
|
||||
"name": "svod1_MAIN",
|
||||
"url": "/svod#MAIN"
|
||||
},
|
||||
{
|
||||
"name": "svod1_FORM_1",
|
||||
"url": "/svod#FORM_1"
|
||||
},
|
||||
{
|
||||
"name": "svod1_FORM_2",
|
||||
"url": "/svod#FORM_2"
|
||||
},
|
||||
{
|
||||
"name": "svod1_FORM_3",
|
||||
"url": "/svod#FORM_3"
|
||||
},
|
||||
{
|
||||
"name": "svod1_FORM_4",
|
||||
"url": "/svod#FORM_4"
|
||||
},
|
||||
{
|
||||
"name": "svod2_GO",
|
||||
"url": "/svod/2#GO"
|
||||
},
|
||||
{
|
||||
"name": "svod2_RF",
|
||||
"url": "/svod/2#RF"
|
||||
},
|
||||
{
|
||||
"name": "svods_navigator",
|
||||
"url": "/svods-navigator"
|
||||
},
|
||||
{
|
||||
"name": "projects_summaries",
|
||||
"url": "/projects/summaries"
|
||||
}
|
||||
],
|
||||
"modal_pages": [
|
||||
{
|
||||
"name": "tasks",
|
||||
"url": "/tasks"
|
||||
},
|
||||
{
|
||||
"name": "projects",
|
||||
"url": "/projects"
|
||||
},
|
||||
{
|
||||
"name": "task_ssp_form_1",
|
||||
"url": "/task/1"
|
||||
},
|
||||
{
|
||||
"name": "task_ssp_form_2",
|
||||
"url": "/task/4"
|
||||
},
|
||||
{
|
||||
"name": "task_rf_form_2",
|
||||
"url": "/task/7"
|
||||
},
|
||||
{
|
||||
"name": "task_rf_form_4",
|
||||
"url": "/task/13"
|
||||
},
|
||||
{
|
||||
"name": "project_card",
|
||||
"url": "/project/1"
|
||||
},
|
||||
{
|
||||
"name": "admin_users",
|
||||
"url": "/admin_panel/users"
|
||||
},
|
||||
{
|
||||
"name": "admin_ssps",
|
||||
"url": "/admin_panel/ssps"
|
||||
},
|
||||
{
|
||||
"name": "admin_default_stage",
|
||||
"url": "/admin_panel/default-stage"
|
||||
},
|
||||
{
|
||||
"name": "admin_audit_log",
|
||||
"url": "/admin_panel/audit-log"
|
||||
},
|
||||
{
|
||||
"name": "dict_vsp",
|
||||
"url": "/dicts/dict-vsp"
|
||||
},
|
||||
{
|
||||
"name": "dicts_navigator",
|
||||
"url": "/dicts-navigator"
|
||||
}
|
||||
]
|
||||
}
|
||||
48
perf/report-data/20261026-control-s1/modals-inventory.md
Normal file
48
perf/report-data/20261026-control-s1/modals-inventory.md
Normal file
@ -0,0 +1,48 @@
|
||||
# Перечень модалок
|
||||
|
||||
Источник: `perf/e2e/modals.json` (поиск по `web/src`: `common/Modal`, emotion-модалки `ModalBackdrop`, MUI `Dialog`/`Modal`/`Popover`).
|
||||
priority 1 - листы форм, задача, проект, проекты, задачи; priority 2 - админка и справочник ВСП.
|
||||
|
||||
| id | страница | source | priority | роль | открытие | статус | n | медиана, мс | skip_reason |
|
||||
|---|---|---|---|---|---|---|---|---|---|
|
||||
| `sheet_select_vsp` | sheet | `web/src/components/RealtimeTable/Modals/SelectVspModal.jsx:51` | 1 | rf | `button[aria-label="Добавить строку"]` | not_run | 0 | | |
|
||||
| `sheet_select_vsp@big` | sheet | `web/src/components/RealtimeTable/Modals/SelectVspModal.jsx:51` | 1 | rf | `button[aria-label="Добавить строку"]` | measured | 1 | 229 | |
|
||||
| `sheet_select_expense` | sheet | `web/src/components/RealtimeTable/Modals/SelectExpenseItemModal.jsx:51` | 1 | rf | `button[aria-label="Добавить строку"]` (+1 шаг.) | not_run | 0 | | |
|
||||
| `sheet_select_expense@big` | sheet | `web/src/components/RealtimeTable/Modals/SelectExpenseItemModal.jsx:51` | 1 | rf | `button[aria-label="Добавить строку"]` (+1 шаг.) | not_run | 0 | | |
|
||||
| `sheet_create_program` | sheet | `web/src/components/RealtimeTable/Modals/CreateProgramProjectModal.jsx:38` | 1 | rf | `button[aria-label="Добавить программу"]` | not_run | 0 | | |
|
||||
| `sheet_create_program@big` | sheet | `web/src/components/RealtimeTable/Modals/CreateProgramProjectModal.jsx:38` | 1 | rf | `button[aria-label="Добавить программу"]` | not_run | 0 | | |
|
||||
| `sheet_create_project` | sheet | `web/src/components/RealtimeTable/Modals/CreateProgramProjectModal.jsx:38` | 1 | rf | `button[aria-label="Добавить проект"]` (+1 шаг.) | not_run | 0 | | |
|
||||
| `sheet_create_project@big` | sheet | `web/src/components/RealtimeTable/Modals/CreateProgramProjectModal.jsx:38` | 1 | rf | `button[aria-label="Добавить проект"]` (+1 шаг.) | not_run | 0 | | |
|
||||
| `sheet_columns_tree` | sheet | `web/src/components/common/CollapsibleTree.jsx:203` | 1 | rf | `[data-pin-panel] input[readonly]` | not_run | 0 | | |
|
||||
| `sheet_columns_tree@big` | sheet | `web/src/components/common/CollapsibleTree.jsx:203` | 1 | rf | `[data-pin-panel] input[readonly]` | not_run | 0 | | |
|
||||
| `task_stages` | task | `web/src/components/Stages/SettingModal.jsx:102` | 1 | rf | `role=button[name="Этапы"]` | not_run | 0 | | |
|
||||
| `task_stage_add` | task | `web/src/components/Stages/AddStagesModal.jsx:156` | 1 | admin | `role=button[name="Добавить этап"]` (+1 шаг.) | not_run | 0 | | |
|
||||
| `task_stage_edit` | task | `web/src/components/Stages/AddStagesModal.jsx:156` | 1 | admin | `role=menuitem[name="Редактировать"]` (+2 шаг.) | not_run | 0 | | |
|
||||
| `project_stages` | project | `web/src/components/Stages/SettingModal.jsx:102` | 1 | rf | `role=button[name="Этапы"] >> nth=0` | not_run | 0 | | |
|
||||
| `project_add_year` | project | `web/src/pages/TaskPage/TaskPage.jsx:217` | 1 | rf | `role=button[name="Добавить год"]` | not_run | 0 | | |
|
||||
| `project_stage_delete` | project | `web/src/components/Stages/DeleteStageModal.jsx:38` | 1 | admin | `role=menuitem[name="Удалить"]` (+2 шаг.) | not_run | 0 | | |
|
||||
| `projects_create` | projects | `web/src/pages/ProjectsPage/ModalCreateProject.jsx:247` | 1 | rf | `role=button[name="Создать проект"]` | not_run | 0 | | |
|
||||
| `projects_edit` | projects | `web/src/pages/ProjectPages/components/EditModal/EditModal.jsx:170` | 1 | rf | `role=button[name="Редактировать"] >> nth=0` | not_run | 0 | | |
|
||||
| `projects_delete` | projects | `web/src/pages/ProjectPages/NavigationProjectPage.jsx:510` | 1 | rf | `role=button[name="Удалить проект"] >> nth=0` | not_run | 0 | | |
|
||||
| `tasks_create` | tasks | `web/src/pages/TasksPage/TasksPage.jsx:374` | 1 | admin | `role=button[name="Создать задачу"]` | not_run | 0 | | |
|
||||
| `tasks_confirm_mark` | tasks | `web/src/pages/TasksPage/TasksTable.jsx:371` | 1 | admin | `text=Отправить на удаление` (+1 шаг.) | not_run | 0 | | |
|
||||
| `forms_create` | forms | `web/src/pages/FormsPage.jsx:133` | 1 | admin | | skip | 0 | | страница FormsPage не подключена в app/Routes.jsx - открыть из UI нельзя |
|
||||
| `taskcard_confirm` | forms | `web/src/components/common/TaskCardComponent.jsx:265` | 1 | admin | | skip | 0 | | TaskCardComponent используется только в FormsPage (не в маршрутах) |
|
||||
| `infoheader_rename` | forms | `web/src/pages/TableTempPage/InfoForHeader.jsx:44` | 1 | admin | | skip | 0 | | TableTempPage не в маршрутах, ModalRename не импортирован - мёртвый код |
|
||||
| `admin_users_add` | admin_users | `web/src/pages/AdminPanel/UsersPage/ModalAddUsers.jsx:71` | 2 | admin | `role=button[name="Добавить"]` | not_run | 0 | | |
|
||||
| `admin_users_edit` | admin_users | `web/src/pages/AdminPanel/UsersPage/UserTable/EditUserModal.jsx:311` | 2 | admin | `role=menuitem[name="Редактировать"]` (+1 шаг.) | not_run | 0 | | |
|
||||
| `admin_users_delete` | admin_users | `web/src/pages/AdminPanel/UsersPage/UserTable/DeleteUserModal.jsx:48` | 2 | admin | `role=menuitem[name="Удалить"]` (+1 шаг.) | not_run | 0 | | |
|
||||
| `admin_users_ssp` | admin_users | `web/src/pages/AdminPanel/UsersPage/ModalEditUserSsp.jsx:93` | 2 | admin | `tbody button:has-text("Выбрать") >> nth=0` | not_run | 0 | | |
|
||||
| `admin_ssps_add` | admin_ssps | `web/src/pages/AdminPanel/SppsPage/ModalAddSsp.jsx:51` | 2 | admin | `role=button[name="Добавить"]` | not_run | 0 | | |
|
||||
| `admin_ssps_edit` | admin_ssps | `web/src/pages/AdminPanel/SppsPage/ModalEditSsp.jsx:41` | 2 | admin | `tbody tr >> nth=0 >> button >> nth=-1` | not_run | 0 | | |
|
||||
| `admin_ssps_users` | admin_ssps | `web/src/pages/AdminPanel/SppsPage/ModalChangeUsersInSsp.jsx:121` | 2 | admin | `tbody tr >> nth=0 >> button >> nth=0` | not_run | 0 | | |
|
||||
| `admin_ssps_archive` | admin_ssps | `web/src/pages/AdminPanel/SppsPage/ModalConfirmArchiveSsp.jsx:27` | 2 | admin | `tbody tr >> nth=0 >> button:has-text("Активен")` | not_run | 0 | | |
|
||||
| `admin_phase_add` | admin_default_stage | `web/src/pages/AdminPanel/PhaseTemplatesPage/components/PhaseTemplateDialog.jsx:120` | 2 | admin | `role=button[name="Добавить этап"]` | not_run | 0 | | |
|
||||
| `admin_phase_edit` | admin_default_stage | `web/src/pages/AdminPanel/PhaseTemplatesPage/components/PhaseTemplateDialog.jsx:120` | 2 | admin | `role=button[name^="Редактировать этап"] >> nth=0` | not_run | 0 | | |
|
||||
| `admin_phase_delete` | admin_default_stage | `web/src/pages/AdminPanel/PhaseTemplatesPage/components/DeletePhaseTemplateDialog.jsx:8` | 2 | admin | `role=button[name^="Удалить этап"] >> nth=0` | not_run | 0 | | |
|
||||
| `admin_audit_json` | admin_audit_log | `web/src/pages/AdminPanel/AuditLogsPage/components/JsonViewModal.jsx:95` | 2 | admin | `text=Посмотреть >> nth=0` | not_run | 0 | | |
|
||||
| `dict_vsp_add` | dict_vsp | `web/src/pages/DictVspPage/components/Modals/ModalEditAddVsp.jsx:239` | 2 | admin | `role=button[name="+ Добавить объект"]` | not_run | 0 | | |
|
||||
| `dict_vsp_edit` | dict_vsp | `web/src/pages/DictVspPage/components/Modals/ModalEditAddVsp.jsx:239` | 2 | admin | `tbody tr >> nth=0 >> button >> nth=-1` | not_run | 0 | | |
|
||||
| `dict_vsp_export` | dict_vsp | `web/src/pages/DictVspPage/components/Modals/ModalExport.jsx:71` | 2 | admin | `role=button[name="Экспортировать"]` | not_run | 0 | | |
|
||||
|
||||
Всего: 39, без skip_reason: 36, skip_reason: 3.
|
||||
22
perf/report-data/20261026-control-s1/run-all.status.json
Normal file
22
perf/report-data/20261026-control-s1/run-all.status.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"run_id": "20261026-control-s1",
|
||||
"scale": 1,
|
||||
"steps": {
|
||||
"control4x": {
|
||||
"status": "OK",
|
||||
"rc": 0,
|
||||
"start": "2026-10-26T12:26:46+0400",
|
||||
"end": "2026-10-26T12:59:48+0400",
|
||||
"duration_s": 1982,
|
||||
"cmd": "rc=0; ( cd '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/e2e' && env -u PERF_TARGETS -u PERF_REPEATS -u PERF_CPU_RATES -u PERF_ROLES -u PERF_AXES -u PERF_MODALS -u PERF_PRIORITY -u PERF_PROFILING -u PERF_SQLSTATS_TAG -u PERF_SQLSTATS -u PERF_COAUTHOR_RATES -u PERF_TRACE -u PERF_RESULTS_DIR -u PERF_MEM_CYCLES -u PERF_MEM_SNAPSHOTS PERF_SCALE=1 PERF_RUN_ID=20261026-control-s1 PERF_WEB=http://localhost:8080 PERF_SQLSTATS_TAG=control4x_scroll PERF_CPU_RATES=4 PERF_REPEATS=1 PERF_TRACE=0 PERF_ROLES=rf,dfip PERF_TARGETS='FORM_2/AHR/null@y,svod/svod1_MAIN,svod/svod2_GO' npx playwright test scenarios/scroll.spec.ts ) || rc=$?; ( cd '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/e2e' && env -u PERF_TARGETS -u PERF_REPEATS -u PERF_CPU_RATES -u PERF_ROLES -u PERF_AXES -u PERF_MODALS -u PERF_PRIORITY -u PERF_PROFILING -u PERF_SQLSTATS_TAG -u PERF_SQLSTATS -u PERF_COAUTHOR_RATES -u PERF_TRACE -u PERF_RESULTS_DIR -u PERF_MEM_CYCLES -u PERF_MEM_SNAPSHOTS PERF_SCALE=1 PERF_RUN_ID=20261026-control-s1 PERF_WEB=http://localhost:8080 PERF_SQLSTATS_TAG=control4x_modals PERF_CPU_RATES=4 PERF_REPEATS=1 PERF_TRACE=0 PERF_PRIORITY=1,2 PERF_MODALS='sheet_select_vsp@big' npx playwright test scenarios/modals.spec.ts ) || rc=$?; exit $rc"
|
||||
},
|
||||
"aggregate": {
|
||||
"status": "OK",
|
||||
"rc": 0,
|
||||
"start": "2026-10-26T12:59:48+0400",
|
||||
"end": "2026-10-26T12:59:48+0400",
|
||||
"duration_s": 0,
|
||||
"cmd": "cd '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf' && rm -f '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/report-data/20261026-control-s1/summary.json' && '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/.venv/bin/python' -m perfkit.aggregate 'results/20261026-control-s1' && { [ ! -f 'results/20261026-control-s1/modal.jsonl' ] || '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/.venv/bin/python' -m perfkit.modals_inventory 'results/20261026-control-s1'; } && mkdir -p '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/report-data/20261026-control-s1' && for d in results/20261026-control-s1/sql/*/; do if [ -d \"$d\" ]; then t=$(basename \"$d\"); mkdir -p '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/report-data/20261026-control-s1/sql/'$t || exit 1; if [ -f \"$d\"sql_top.json ]; then cp \"$d\"sql_top.json '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/report-data/20261026-control-s1/sql/'$t/ || exit 1; fi; if [ -d \"$d\"explain ]; then cp -R \"$d\"explain '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/report-data/20261026-control-s1/sql/'$t/ || exit 1; fi; fi; done && for f in results/20261026-control-s1/memtrend.txt results/manifest-s1.json results/gen-stats-s1.json results/grow-s1.json results/20261026-control-s1/run-all.status.json; do if [ -f \"$f\" ]; then cp \"$f\" '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/report-data/20261026-control-s1/' || exit 1; fi; done && ls -R '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/report-data/20261026-control-s1' && test -f '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/report-data/20261026-control-s1/summary.json'"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,62 @@
|
||||
{
|
||||
"query": "SELECT row_type, depth, sort_order, data \n FROM v3.v_form_view($1, $2, $3)",
|
||||
"calls": 1,
|
||||
"total_exec_time": 17.892,
|
||||
"mean_exec_time": 17.892,
|
||||
"mode": "analyze",
|
||||
"analyze": true,
|
||||
"params": [
|
||||
7,
|
||||
"AHR",
|
||||
null
|
||||
],
|
||||
"param_source": {
|
||||
"method": "GET",
|
||||
"url": "http://localhost:8080/api/v1/form/7/sheet/AHR",
|
||||
"role": "rf"
|
||||
},
|
||||
"plan": [
|
||||
{
|
||||
"Plan": {
|
||||
"Node Type": "Function Scan",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Function Name": "v_form_view",
|
||||
"Alias": "v_form_view",
|
||||
"Startup Cost": 0.25,
|
||||
"Total Cost": 10.25,
|
||||
"Plan Rows": 1000,
|
||||
"Plan Width": 76,
|
||||
"Actual Startup Time": 598.134,
|
||||
"Actual Total Time": 599.026,
|
||||
"Actual Rows": 2092,
|
||||
"Actual Loops": 1,
|
||||
"Shared Hit Blocks": 55124,
|
||||
"Shared Read Blocks": 0,
|
||||
"Shared Dirtied Blocks": 0,
|
||||
"Shared Written Blocks": 0,
|
||||
"Local Hit Blocks": 0,
|
||||
"Local Read Blocks": 0,
|
||||
"Local Dirtied Blocks": 0,
|
||||
"Local Written Blocks": 0,
|
||||
"Temp Read Blocks": 3246,
|
||||
"Temp Written Blocks": 3270
|
||||
},
|
||||
"Planning": {
|
||||
"Shared Hit Blocks": 0,
|
||||
"Shared Read Blocks": 0,
|
||||
"Shared Dirtied Blocks": 0,
|
||||
"Shared Written Blocks": 0,
|
||||
"Local Hit Blocks": 0,
|
||||
"Local Read Blocks": 0,
|
||||
"Local Dirtied Blocks": 0,
|
||||
"Local Written Blocks": 0,
|
||||
"Temp Read Blocks": 0,
|
||||
"Temp Written Blocks": 0
|
||||
},
|
||||
"Planning Time": 0.017,
|
||||
"Triggers": [],
|
||||
"Execution Time": 600.4
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
{
|
||||
"query": "SELECT v3.app_user.id, v3.app_user.email, v3.app_user.username, v3.app_user.hashed_password, v3.app_user.full_name, v3.app_user.role_id, v3.app_user.is_active, v3.app_user.created_at, v3.app_user.updated_at \nFROM v3.app_user \nWHERE v3.app_user.username = $1::VARCHAR \n LIMIT $2::INTEGER",
|
||||
"calls": 7,
|
||||
"total_exec_time": 1.739,
|
||||
"mean_exec_time": 0.248,
|
||||
"mode": "generic_plan",
|
||||
"analyze": false,
|
||||
"params": null,
|
||||
"param_source": null,
|
||||
"plan": [
|
||||
{
|
||||
"Plan": {
|
||||
"Node Type": "Limit",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Startup Cost": 0.0,
|
||||
"Total Cost": 7.81,
|
||||
"Plan Rows": 1,
|
||||
"Plan Width": 153,
|
||||
"Plans": [
|
||||
{
|
||||
"Node Type": "Seq Scan",
|
||||
"Parent Relationship": "Outer",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Relation Name": "app_user",
|
||||
"Alias": "app_user",
|
||||
"Startup Cost": 0.0,
|
||||
"Total Cost": 15.62,
|
||||
"Plan Rows": 2,
|
||||
"Plan Width": 153,
|
||||
"Filter": "((username)::text = ($1)::text)"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,108 @@
|
||||
{
|
||||
"query": "SELECT app_user_1.id AS app_user_1_id, v3.org_unit.id AS v3_org_unit_id, v3.org_unit.title AS v3_org_unit_title, v3.org_unit.is_active AS v3_org_unit_is_active, v3.org_unit.is_ssp AS v3_org_unit_is_ssp, v3.org_unit.utc_offset AS v3_org_unit_utc_offset \nFROM v3.app_user AS app_user_1 JOIN v3.user_org AS user_org_1 ON app_user_1.id = user_org_1.user_id JOIN v3.org_unit ON v3.org_unit.id = user_org_1.org_unit_id \nWHERE app_user_1.id IN ($1::INTEGER)",
|
||||
"calls": 3,
|
||||
"total_exec_time": 0.985,
|
||||
"mean_exec_time": 0.328,
|
||||
"mode": "generic_plan",
|
||||
"analyze": false,
|
||||
"params": null,
|
||||
"param_source": null,
|
||||
"plan": [
|
||||
{
|
||||
"Plan": {
|
||||
"Node Type": "Nested Loop",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Join Type": "Inner",
|
||||
"Startup Cost": 15.06,
|
||||
"Total Cost": 45.69,
|
||||
"Plan Rows": 10,
|
||||
"Plan Width": 58,
|
||||
"Inner Unique": false,
|
||||
"Plans": [
|
||||
{
|
||||
"Node Type": "Index Only Scan",
|
||||
"Parent Relationship": "Outer",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Scan Direction": "Forward",
|
||||
"Index Name": "app_user_pkey",
|
||||
"Relation Name": "app_user",
|
||||
"Alias": "app_user_1",
|
||||
"Startup Cost": 0.15,
|
||||
"Total Cost": 8.17,
|
||||
"Plan Rows": 1,
|
||||
"Plan Width": 4,
|
||||
"Index Cond": "(id = $1)"
|
||||
},
|
||||
{
|
||||
"Node Type": "Hash Join",
|
||||
"Parent Relationship": "Inner",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Join Type": "Inner",
|
||||
"Startup Cost": 14.91,
|
||||
"Total Cost": 37.42,
|
||||
"Plan Rows": 10,
|
||||
"Plan Width": 58,
|
||||
"Inner Unique": true,
|
||||
"Hash Cond": "(org_unit.id = user_org_1.org_unit_id)",
|
||||
"Plans": [
|
||||
{
|
||||
"Node Type": "Seq Scan",
|
||||
"Parent Relationship": "Outer",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Relation Name": "org_unit",
|
||||
"Alias": "org_unit",
|
||||
"Startup Cost": 0.0,
|
||||
"Total Cost": 19.9,
|
||||
"Plan Rows": 990,
|
||||
"Plan Width": 54
|
||||
},
|
||||
{
|
||||
"Node Type": "Hash",
|
||||
"Parent Relationship": "Inner",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Startup Cost": 14.79,
|
||||
"Total Cost": 14.79,
|
||||
"Plan Rows": 10,
|
||||
"Plan Width": 8,
|
||||
"Plans": [
|
||||
{
|
||||
"Node Type": "Bitmap Heap Scan",
|
||||
"Parent Relationship": "Outer",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Relation Name": "user_org",
|
||||
"Alias": "user_org_1",
|
||||
"Startup Cost": 4.23,
|
||||
"Total Cost": 14.79,
|
||||
"Plan Rows": 10,
|
||||
"Plan Width": 8,
|
||||
"Recheck Cond": "(user_id = $1)",
|
||||
"Plans": [
|
||||
{
|
||||
"Node Type": "Bitmap Index Scan",
|
||||
"Parent Relationship": "Outer",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Index Name": "user_org_user_id_org_unit_id_key",
|
||||
"Startup Cost": 0.0,
|
||||
"Total Cost": 4.23,
|
||||
"Plan Rows": 10,
|
||||
"Plan Width": 0,
|
||||
"Index Cond": "(user_id = $1)"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,40 @@
|
||||
{
|
||||
"query": "SELECT v3.app_user.id, v3.app_user.email, v3.app_user.username, v3.app_user.hashed_password, v3.app_user.full_name, v3.app_user.role_id, v3.app_user.is_active, v3.app_user.created_at, v3.app_user.updated_at \nFROM v3.app_user \nWHERE v3.app_user.id = $1::INTEGER \n LIMIT $2::INTEGER",
|
||||
"calls": 3,
|
||||
"total_exec_time": 0.377,
|
||||
"mean_exec_time": 0.126,
|
||||
"mode": "generic_plan",
|
||||
"analyze": false,
|
||||
"params": null,
|
||||
"param_source": null,
|
||||
"plan": [
|
||||
{
|
||||
"Plan": {
|
||||
"Node Type": "Limit",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Startup Cost": 0.15,
|
||||
"Total Cost": 8.17,
|
||||
"Plan Rows": 1,
|
||||
"Plan Width": 153,
|
||||
"Plans": [
|
||||
{
|
||||
"Node Type": "Index Scan",
|
||||
"Parent Relationship": "Outer",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Scan Direction": "Forward",
|
||||
"Index Name": "app_user_pkey",
|
||||
"Relation Name": "app_user",
|
||||
"Alias": "app_user",
|
||||
"Startup Cost": 0.15,
|
||||
"Total Cost": 8.17,
|
||||
"Plan Rows": 1,
|
||||
"Plan Width": 153,
|
||||
"Index Cond": "(id = $1)"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,53 @@
|
||||
{
|
||||
"query": "SELECT count(*) OVER () AS total_count, v3.vsp.id, v3.vsp.branch_id, v3.vsp.reg_number, v3.vsp.address, v3.vsp.format, v3.vsp.opened_at, v3.vsp.placement_type, v3.vsp.staff_count, v3.vsp.total_area, v3.vsp.closed_at, v3.vsp.is_active, v3.vsp.is_deleted, v3.vsp.system_code, v3.vsp.created_at, v3.vsp.updated_at, v3.vsp.created_by, v3.vsp.updated_by, v3.vsp.vsp_type, v3.vsp.notes, v3.vsp.rent_contract_num, v3.vsp.rent_end_date \nFROM v3.vsp \nWHERE v3.vsp.is_deleted IS false AND v3.vsp.is_active = true AND v3.vsp.branch_id IN ($1::INTEGER) ORDER BY v3.vsp.id",
|
||||
"calls": 1,
|
||||
"total_exec_time": 0.328,
|
||||
"mean_exec_time": 0.328,
|
||||
"mode": "generic_plan",
|
||||
"analyze": false,
|
||||
"params": null,
|
||||
"param_source": null,
|
||||
"plan": [
|
||||
{
|
||||
"Plan": {
|
||||
"Node Type": "Sort",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Startup Cost": 12.36,
|
||||
"Total Cost": 12.44,
|
||||
"Plan Rows": 30,
|
||||
"Plan Width": 439,
|
||||
"Sort Key": [
|
||||
"id"
|
||||
],
|
||||
"Plans": [
|
||||
{
|
||||
"Node Type": "WindowAgg",
|
||||
"Parent Relationship": "Outer",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Startup Cost": 0.0,
|
||||
"Total Cost": 11.62,
|
||||
"Plan Rows": 30,
|
||||
"Plan Width": 439,
|
||||
"Plans": [
|
||||
{
|
||||
"Node Type": "Seq Scan",
|
||||
"Parent Relationship": "Outer",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Relation Name": "vsp",
|
||||
"Alias": "vsp",
|
||||
"Startup Cost": 0.0,
|
||||
"Total Cost": 11.25,
|
||||
"Plan Rows": 30,
|
||||
"Plan Width": 431,
|
||||
"Filter": "((is_deleted IS FALSE) AND is_active AND (branch_id = $1))"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,306 @@
|
||||
{
|
||||
"by_total": [
|
||||
{
|
||||
"query": "SELECT row_type, depth, sort_order, data \n FROM v3.v_form_view($1, $2, $3)",
|
||||
"calls": 1,
|
||||
"total_exec_time": 17.892,
|
||||
"mean_exec_time": 17.892,
|
||||
"rows": 500,
|
||||
"shared_blks_hit": 1420,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT * FROM v3.v_form2_view(p_form_id, p_sheet, p_sections)",
|
||||
"calls": 1,
|
||||
"total_exec_time": 13.006,
|
||||
"mean_exec_time": 13.006,
|
||||
"rows": 499,
|
||||
"shared_blks_hit": 1400,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": false
|
||||
},
|
||||
{
|
||||
"query": "SELECT\n $2::VARCHAR,\n $3,\n ROW_NUMBER() OVER (ORDER BY ud.id) AS sort_order,\n jsonb_build_object(\n $4, ud.id,\n $5, ud.line_id,\n $6, ud.vsp_id,\n $7, v.address,\n $8, v.format,\n $9, v.total_area,\n $10, ud.contract_number,\n $11,ud.contract_end_date,\n $12, jsonb_build_object($13, ud.plan_q1, $14, ud.plan_q2, $15, ud.plan_q3, $16, ud.plan_q4,\n $17, COALESCE(ud.plan_q1,$18)+COALESCE(ud.plan_q2,$19)+COALESCE(ud.plan_q3,$20)+COALESCE(ud.plan_q4,$21)),\n $22, jsonb_build_object($23, ud.actual_jan, $24, ud.actual_feb, $25, ud.actual_mar,\n $26, COALESCE(ud.actual_jan,$27)+COALESCE(ud.actual_feb,$28)+COALESCE(ud.actual_mar,$29)),\n $30, jsonb_build_object($31, ud.actual_apr, $32, ud.actual_may, $33, ud.actual_jun,\n $34, COALESCE(ud.actual_apr,$35)+COALESCE(ud.actual_may,$36)+COALESCE(ud.actual_jun,$37)),\n $38, jsonb_build_object($39, ud.actual_jul, $40, ud.actual_aug, $41, ud.actual_sep,\n $42, COALESCE(ud.actual_jul,$43)+COALESCE(ud.actual_aug,$44)+COALESCE(ud.actual_sep,$45)),\n $46, jsonb_build_object($47, ud.actual_oct, $48, ud.actual_nov, $49, ud.actual_dec,\n $50, COALESCE(ud.actual_oct,$51)+COALESCE(ud.actual_nov,$52)+COALESCE(ud.actual_dec,$53)),\n $54, ud.comment\n )\n FROM v3.utility_detail ud\n JOIN v3.budget_line bl ON bl.id = ud.line_id\n JOIN v3.vsp v ON v.id = ud.vsp_id\n WHERE bl.budget_form_id = p_form_id\n ORDER BY ud.id",
|
||||
"calls": 1,
|
||||
"total_exec_time": 11.13,
|
||||
"mean_exec_time": 11.13,
|
||||
"rows": 499,
|
||||
"shared_blks_hit": 1322,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": false
|
||||
},
|
||||
{
|
||||
"query": "SELECT v3.app_user.id, v3.app_user.email, v3.app_user.username, v3.app_user.hashed_password, v3.app_user.full_name, v3.app_user.role_id, v3.app_user.is_active, v3.app_user.created_at, v3.app_user.updated_at \nFROM v3.app_user \nWHERE v3.app_user.username = $1::VARCHAR \n LIMIT $2::INTEGER",
|
||||
"calls": 7,
|
||||
"total_exec_time": 1.739,
|
||||
"mean_exec_time": 0.248,
|
||||
"rows": 7,
|
||||
"shared_blks_hit": 7,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT\n 'META'::VARCHAR,\n -1,\n 0::BIGINT,\n jsonb_build_object(\n 'user_id', v_user_id,\n 'role', v3.user_role_code(v_user_id),\n 'sheet', p_sheet,\n 'editable', COALESCE(\n (SELECT jsonb_agg(\n jsonb_build_object('column', ec.column_key,\n 'closes_at', ec.closes_at)\n ORDER BY ec.column_key)\n FROM v3.editable_columns_for(p_form_id, v_user_id, p_sheet, p_direction) ec),\n '[]'::JSONB)\n )",
|
||||
"calls": 1,
|
||||
"total_exec_time": 1.247,
|
||||
"mean_exec_time": 1.247,
|
||||
"rows": 1,
|
||||
"shared_blks_hit": 18,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": false
|
||||
},
|
||||
{
|
||||
"query": "SELECT app_user_1.id AS app_user_1_id, v3.org_unit.id AS v3_org_unit_id, v3.org_unit.title AS v3_org_unit_title, v3.org_unit.is_active AS v3_org_unit_is_active, v3.org_unit.is_ssp AS v3_org_unit_is_ssp, v3.org_unit.utc_offset AS v3_org_unit_utc_offset \nFROM v3.app_user AS app_user_1 JOIN v3.user_org AS user_org_1 ON app_user_1.id = user_org_1.user_id JOIN v3.org_unit ON v3.org_unit.id = user_org_1.org_unit_id \nWHERE app_user_1.id IN ($1::INTEGER)",
|
||||
"calls": 3,
|
||||
"total_exec_time": 0.985,
|
||||
"mean_exec_time": 0.328,
|
||||
"rows": 3,
|
||||
"shared_blks_hit": 15,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT v3.app_user.id, v3.app_user.email, v3.app_user.username, v3.app_user.hashed_password, v3.app_user.full_name, v3.app_user.role_id, v3.app_user.is_active, v3.app_user.created_at, v3.app_user.updated_at \nFROM v3.app_user \nWHERE v3.app_user.id = $1::INTEGER \n LIMIT $2::INTEGER",
|
||||
"calls": 3,
|
||||
"total_exec_time": 0.377,
|
||||
"mean_exec_time": 0.126,
|
||||
"rows": 3,
|
||||
"shared_blks_hit": 6,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT count(*) OVER () AS total_count, v3.vsp.id, v3.vsp.branch_id, v3.vsp.reg_number, v3.vsp.address, v3.vsp.format, v3.vsp.opened_at, v3.vsp.placement_type, v3.vsp.staff_count, v3.vsp.total_area, v3.vsp.closed_at, v3.vsp.is_active, v3.vsp.is_deleted, v3.vsp.system_code, v3.vsp.created_at, v3.vsp.updated_at, v3.vsp.created_by, v3.vsp.updated_by, v3.vsp.vsp_type, v3.vsp.notes, v3.vsp.rent_contract_num, v3.vsp.rent_end_date \nFROM v3.vsp \nWHERE v3.vsp.is_deleted IS false AND v3.vsp.is_active = true AND v3.vsp.branch_id IN ($1::INTEGER) ORDER BY v3.vsp.id",
|
||||
"calls": 1,
|
||||
"total_exec_time": 0.328,
|
||||
"mean_exec_time": 0.328,
|
||||
"rows": 30,
|
||||
"shared_blks_hit": 9,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT v3.export_job.id, v3.export_job.user_id, v3.export_job.request, v3.export_job.status, v3.export_job.created_at, v3.export_job.started_at, v3.export_job.finished_at, v3.export_job.filename, v3.export_job.media_type, v3.export_job.file_path, v3.export_job.error \nFROM v3.export_job \nWHERE v3.export_job.user_id = $1::INTEGER AND (v3.export_job.finished_at IS NULL OR v3.export_job.finished_at > $2::TIMESTAMP WITH TIME ZONE) ORDER BY v3.export_job.created_at DESC",
|
||||
"calls": 2,
|
||||
"total_exec_time": 0.239,
|
||||
"mean_exec_time": 0.12,
|
||||
"rows": 0,
|
||||
"shared_blks_hit": 4,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT v3.budget_form.id, v3.budget_form.form_type_code, v3.budget_form.year, v3.budget_form.created_by, v3.budget_form.created_at, v3.budget_form.updated_by, v3.budget_form.updated_at, v3.budget_form.org_unit_id, v3.budget_form.to_delete, v3.budget_form.deleted_by, v3.budget_form.deleted_at, form_type_1.code, form_type_1.name, form_type_1.scope, form_type_1.storage_entity \nFROM v3.budget_form LEFT OUTER JOIN v3.form_type AS form_type_1 ON form_type_1.code = v3.budget_form.form_type_code \nWHERE v3.budget_form.id = $1::INTEGER AND v3.budget_form.org_unit_id IN ($2::INTEGER) AND v3.budget_form.to_delete IS false",
|
||||
"calls": 1,
|
||||
"total_exec_time": 0.144,
|
||||
"mean_exec_time": 0.144,
|
||||
"rows": 1,
|
||||
"shared_blks_hit": 4,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT r.code\n FROM v3.app_user u\n JOIN v3.role r ON r.id = u.role_id\n WHERE u.id = p_user_id\n AND u.is_active",
|
||||
"calls": 2,
|
||||
"total_exec_time": 0.085,
|
||||
"mean_exec_time": 0.043,
|
||||
"rows": 2,
|
||||
"shared_blks_hit": 8,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": false
|
||||
},
|
||||
{
|
||||
"query": "SELECT v3.user_org.org_unit_id \nFROM v3.user_org \nWHERE v3.user_org.user_id = $1::INTEGER",
|
||||
"calls": 1,
|
||||
"total_exec_time": 0.063,
|
||||
"mean_exec_time": 0.063,
|
||||
"rows": 1,
|
||||
"shared_blks_hit": 2,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "COMMIT",
|
||||
"calls": 8,
|
||||
"total_exec_time": 0.047,
|
||||
"mean_exec_time": 0.006,
|
||||
"rows": 0,
|
||||
"shared_blks_hit": 0,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT ck AS column_key,\n MAX(fp.closes_at) AS closes_at\n FROM v3.form_phase fp,\n LATERAL unnest(fp.column_keys) AS ck\n WHERE fp.budget_form_id = p_form_id\n AND fp.sheet = p_sheet\n AND (fp.direction = p_direction OR (fp.direction IS NULL AND p_direction IS NULL))\n AND fp.role = v_role\n AND now() BETWEEN fp.opens_at AND fp.closes_at\n GROUP BY ck",
|
||||
"calls": 1,
|
||||
"total_exec_time": 0.035,
|
||||
"mean_exec_time": 0.035,
|
||||
"rows": 4,
|
||||
"shared_blks_hit": 4,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": false
|
||||
},
|
||||
{
|
||||
"query": "SELECT v3.budget_form.id, v3.budget_form.form_type_code, v3.budget_form.year, v3.budget_form.created_by, v3.budget_form.created_at, v3.budget_form.updated_by, v3.budget_form.updated_at, v3.budget_form.org_unit_id, v3.budget_form.to_delete, v3.budget_form.deleted_by, v3.budget_form.deleted_at, org_unit_1.id AS id_1, org_unit_1.title, org_unit_1.is_active, org_unit_1.is_ssp, org_unit_1.utc_offset \nFROM v3.budget_form LEFT OUTER JOIN v3.org_unit AS org_unit_1 ON org_unit_1.id = v3.budget_form.org_unit_id \nWHERE v3.budget_form.id = $1::INTEGER AND v3.budget_form.org_unit_id IN ($2::INTEGER) AND v3.budget_form.to_delete IS false",
|
||||
"calls": 1,
|
||||
"total_exec_time": 0.035,
|
||||
"mean_exec_time": 0.035,
|
||||
"rows": 1,
|
||||
"shared_blks_hit": 4,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
}
|
||||
],
|
||||
"by_mean": [
|
||||
{
|
||||
"query": "SELECT row_type, depth, sort_order, data \n FROM v3.v_form_view($1, $2, $3)",
|
||||
"calls": 1,
|
||||
"total_exec_time": 17.892,
|
||||
"mean_exec_time": 17.892,
|
||||
"rows": 500,
|
||||
"shared_blks_hit": 1420,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT * FROM v3.v_form2_view(p_form_id, p_sheet, p_sections)",
|
||||
"calls": 1,
|
||||
"total_exec_time": 13.006,
|
||||
"mean_exec_time": 13.006,
|
||||
"rows": 499,
|
||||
"shared_blks_hit": 1400,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": false
|
||||
},
|
||||
{
|
||||
"query": "SELECT\n $2::VARCHAR,\n $3,\n ROW_NUMBER() OVER (ORDER BY ud.id) AS sort_order,\n jsonb_build_object(\n $4, ud.id,\n $5, ud.line_id,\n $6, ud.vsp_id,\n $7, v.address,\n $8, v.format,\n $9, v.total_area,\n $10, ud.contract_number,\n $11,ud.contract_end_date,\n $12, jsonb_build_object($13, ud.plan_q1, $14, ud.plan_q2, $15, ud.plan_q3, $16, ud.plan_q4,\n $17, COALESCE(ud.plan_q1,$18)+COALESCE(ud.plan_q2,$19)+COALESCE(ud.plan_q3,$20)+COALESCE(ud.plan_q4,$21)),\n $22, jsonb_build_object($23, ud.actual_jan, $24, ud.actual_feb, $25, ud.actual_mar,\n $26, COALESCE(ud.actual_jan,$27)+COALESCE(ud.actual_feb,$28)+COALESCE(ud.actual_mar,$29)),\n $30, jsonb_build_object($31, ud.actual_apr, $32, ud.actual_may, $33, ud.actual_jun,\n $34, COALESCE(ud.actual_apr,$35)+COALESCE(ud.actual_may,$36)+COALESCE(ud.actual_jun,$37)),\n $38, jsonb_build_object($39, ud.actual_jul, $40, ud.actual_aug, $41, ud.actual_sep,\n $42, COALESCE(ud.actual_jul,$43)+COALESCE(ud.actual_aug,$44)+COALESCE(ud.actual_sep,$45)),\n $46, jsonb_build_object($47, ud.actual_oct, $48, ud.actual_nov, $49, ud.actual_dec,\n $50, COALESCE(ud.actual_oct,$51)+COALESCE(ud.actual_nov,$52)+COALESCE(ud.actual_dec,$53)),\n $54, ud.comment\n )\n FROM v3.utility_detail ud\n JOIN v3.budget_line bl ON bl.id = ud.line_id\n JOIN v3.vsp v ON v.id = ud.vsp_id\n WHERE bl.budget_form_id = p_form_id\n ORDER BY ud.id",
|
||||
"calls": 1,
|
||||
"total_exec_time": 11.13,
|
||||
"mean_exec_time": 11.13,
|
||||
"rows": 499,
|
||||
"shared_blks_hit": 1322,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": false
|
||||
},
|
||||
{
|
||||
"query": "SELECT\n 'META'::VARCHAR,\n -1,\n 0::BIGINT,\n jsonb_build_object(\n 'user_id', v_user_id,\n 'role', v3.user_role_code(v_user_id),\n 'sheet', p_sheet,\n 'editable', COALESCE(\n (SELECT jsonb_agg(\n jsonb_build_object('column', ec.column_key,\n 'closes_at', ec.closes_at)\n ORDER BY ec.column_key)\n FROM v3.editable_columns_for(p_form_id, v_user_id, p_sheet, p_direction) ec),\n '[]'::JSONB)\n )",
|
||||
"calls": 1,
|
||||
"total_exec_time": 1.247,
|
||||
"mean_exec_time": 1.247,
|
||||
"rows": 1,
|
||||
"shared_blks_hit": 18,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": false
|
||||
},
|
||||
{
|
||||
"query": "SELECT app_user_1.id AS app_user_1_id, v3.org_unit.id AS v3_org_unit_id, v3.org_unit.title AS v3_org_unit_title, v3.org_unit.is_active AS v3_org_unit_is_active, v3.org_unit.is_ssp AS v3_org_unit_is_ssp, v3.org_unit.utc_offset AS v3_org_unit_utc_offset \nFROM v3.app_user AS app_user_1 JOIN v3.user_org AS user_org_1 ON app_user_1.id = user_org_1.user_id JOIN v3.org_unit ON v3.org_unit.id = user_org_1.org_unit_id \nWHERE app_user_1.id IN ($1::INTEGER)",
|
||||
"calls": 3,
|
||||
"total_exec_time": 0.985,
|
||||
"mean_exec_time": 0.328,
|
||||
"rows": 3,
|
||||
"shared_blks_hit": 15,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT count(*) OVER () AS total_count, v3.vsp.id, v3.vsp.branch_id, v3.vsp.reg_number, v3.vsp.address, v3.vsp.format, v3.vsp.opened_at, v3.vsp.placement_type, v3.vsp.staff_count, v3.vsp.total_area, v3.vsp.closed_at, v3.vsp.is_active, v3.vsp.is_deleted, v3.vsp.system_code, v3.vsp.created_at, v3.vsp.updated_at, v3.vsp.created_by, v3.vsp.updated_by, v3.vsp.vsp_type, v3.vsp.notes, v3.vsp.rent_contract_num, v3.vsp.rent_end_date \nFROM v3.vsp \nWHERE v3.vsp.is_deleted IS false AND v3.vsp.is_active = true AND v3.vsp.branch_id IN ($1::INTEGER) ORDER BY v3.vsp.id",
|
||||
"calls": 1,
|
||||
"total_exec_time": 0.328,
|
||||
"mean_exec_time": 0.328,
|
||||
"rows": 30,
|
||||
"shared_blks_hit": 9,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT v3.app_user.id, v3.app_user.email, v3.app_user.username, v3.app_user.hashed_password, v3.app_user.full_name, v3.app_user.role_id, v3.app_user.is_active, v3.app_user.created_at, v3.app_user.updated_at \nFROM v3.app_user \nWHERE v3.app_user.username = $1::VARCHAR \n LIMIT $2::INTEGER",
|
||||
"calls": 7,
|
||||
"total_exec_time": 1.739,
|
||||
"mean_exec_time": 0.248,
|
||||
"rows": 7,
|
||||
"shared_blks_hit": 7,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT v3.budget_form.id, v3.budget_form.form_type_code, v3.budget_form.year, v3.budget_form.created_by, v3.budget_form.created_at, v3.budget_form.updated_by, v3.budget_form.updated_at, v3.budget_form.org_unit_id, v3.budget_form.to_delete, v3.budget_form.deleted_by, v3.budget_form.deleted_at, form_type_1.code, form_type_1.name, form_type_1.scope, form_type_1.storage_entity \nFROM v3.budget_form LEFT OUTER JOIN v3.form_type AS form_type_1 ON form_type_1.code = v3.budget_form.form_type_code \nWHERE v3.budget_form.id = $1::INTEGER AND v3.budget_form.org_unit_id IN ($2::INTEGER) AND v3.budget_form.to_delete IS false",
|
||||
"calls": 1,
|
||||
"total_exec_time": 0.144,
|
||||
"mean_exec_time": 0.144,
|
||||
"rows": 1,
|
||||
"shared_blks_hit": 4,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT v3.app_user.id, v3.app_user.email, v3.app_user.username, v3.app_user.hashed_password, v3.app_user.full_name, v3.app_user.role_id, v3.app_user.is_active, v3.app_user.created_at, v3.app_user.updated_at \nFROM v3.app_user \nWHERE v3.app_user.id = $1::INTEGER \n LIMIT $2::INTEGER",
|
||||
"calls": 3,
|
||||
"total_exec_time": 0.377,
|
||||
"mean_exec_time": 0.126,
|
||||
"rows": 3,
|
||||
"shared_blks_hit": 6,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT v3.export_job.id, v3.export_job.user_id, v3.export_job.request, v3.export_job.status, v3.export_job.created_at, v3.export_job.started_at, v3.export_job.finished_at, v3.export_job.filename, v3.export_job.media_type, v3.export_job.file_path, v3.export_job.error \nFROM v3.export_job \nWHERE v3.export_job.user_id = $1::INTEGER AND (v3.export_job.finished_at IS NULL OR v3.export_job.finished_at > $2::TIMESTAMP WITH TIME ZONE) ORDER BY v3.export_job.created_at DESC",
|
||||
"calls": 2,
|
||||
"total_exec_time": 0.239,
|
||||
"mean_exec_time": 0.12,
|
||||
"rows": 0,
|
||||
"shared_blks_hit": 4,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT v3.user_org.org_unit_id \nFROM v3.user_org \nWHERE v3.user_org.user_id = $1::INTEGER",
|
||||
"calls": 1,
|
||||
"total_exec_time": 0.063,
|
||||
"mean_exec_time": 0.063,
|
||||
"rows": 1,
|
||||
"shared_blks_hit": 2,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT r.code\n FROM v3.app_user u\n JOIN v3.role r ON r.id = u.role_id\n WHERE u.id = p_user_id\n AND u.is_active",
|
||||
"calls": 2,
|
||||
"total_exec_time": 0.085,
|
||||
"mean_exec_time": 0.043,
|
||||
"rows": 2,
|
||||
"shared_blks_hit": 8,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": false
|
||||
},
|
||||
{
|
||||
"query": "SELECT ck AS column_key,\n MAX(fp.closes_at) AS closes_at\n FROM v3.form_phase fp,\n LATERAL unnest(fp.column_keys) AS ck\n WHERE fp.budget_form_id = p_form_id\n AND fp.sheet = p_sheet\n AND (fp.direction = p_direction OR (fp.direction IS NULL AND p_direction IS NULL))\n AND fp.role = v_role\n AND now() BETWEEN fp.opens_at AND fp.closes_at\n GROUP BY ck",
|
||||
"calls": 1,
|
||||
"total_exec_time": 0.035,
|
||||
"mean_exec_time": 0.035,
|
||||
"rows": 4,
|
||||
"shared_blks_hit": 4,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": false
|
||||
},
|
||||
{
|
||||
"query": "SELECT v3.budget_form.id, v3.budget_form.form_type_code, v3.budget_form.year, v3.budget_form.created_by, v3.budget_form.created_at, v3.budget_form.updated_by, v3.budget_form.updated_at, v3.budget_form.org_unit_id, v3.budget_form.to_delete, v3.budget_form.deleted_by, v3.budget_form.deleted_at, org_unit_1.id AS id_1, org_unit_1.title, org_unit_1.is_active, org_unit_1.is_ssp, org_unit_1.utc_offset \nFROM v3.budget_form LEFT OUTER JOIN v3.org_unit AS org_unit_1 ON org_unit_1.id = v3.budget_form.org_unit_id \nWHERE v3.budget_form.id = $1::INTEGER AND v3.budget_form.org_unit_id IN ($2::INTEGER) AND v3.budget_form.to_delete IS false",
|
||||
"calls": 1,
|
||||
"total_exec_time": 0.035,
|
||||
"mean_exec_time": 0.035,
|
||||
"rows": 1,
|
||||
"shared_blks_hit": 4,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
},
|
||||
{
|
||||
"query": "SELECT v3.budget_form.id, v3.budget_form.form_type_code, v3.budget_form.year, v3.budget_form.created_by, v3.budget_form.created_at, v3.budget_form.updated_by, v3.budget_form.updated_at, v3.budget_form.org_unit_id, v3.budget_form.to_delete, v3.budget_form.deleted_by, v3.budget_form.deleted_at \nFROM v3.budget_form \nWHERE v3.budget_form.id = $1::INTEGER AND v3.budget_form.to_delete IS false",
|
||||
"calls": 1,
|
||||
"total_exec_time": 0.026,
|
||||
"mean_exec_time": 0.026,
|
||||
"rows": 1,
|
||||
"shared_blks_hit": 2,
|
||||
"shared_blks_read": 0,
|
||||
"toplevel": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
{
|
||||
"query": "SELECT\n 'INPUT'::VARCHAR AS row_type,\n 3 AS depth,\n sort_order,\n data\n FROM v3.v_svod2_go(\n CAST($1 AS INT),\n CAST($2 AS INT[]),\n CAST($3 AS INT),\n CAST($4 AS INT),\n CAST($5 AS VARCHAR),\n CAST($6 AS VARCHAR)\n )",
|
||||
"calls": 2,
|
||||
"total_exec_time": 1473.004,
|
||||
"mean_exec_time": 736.502,
|
||||
"mode": "generic_plan",
|
||||
"analyze": false,
|
||||
"params": null,
|
||||
"param_source": null,
|
||||
"plan": [
|
||||
{
|
||||
"Plan": {
|
||||
"Node Type": "Function Scan",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Function Name": "v_svod2_go",
|
||||
"Alias": "v_svod2_go",
|
||||
"Startup Cost": 0.25,
|
||||
"Total Cost": 10.25,
|
||||
"Plan Rows": 1000,
|
||||
"Plan Width": 76
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,62 @@
|
||||
{
|
||||
"query": "SELECT row_type, depth, sort_order, data \n FROM v3.v_form_view($1, $2, $3)",
|
||||
"calls": 2,
|
||||
"total_exec_time": 1457.271,
|
||||
"mean_exec_time": 728.636,
|
||||
"mode": "analyze",
|
||||
"analyze": true,
|
||||
"params": [
|
||||
7,
|
||||
"AHR",
|
||||
null
|
||||
],
|
||||
"param_source": {
|
||||
"method": "GET",
|
||||
"url": "http://localhost:8080/api/v1/form/7/sheet/AHR",
|
||||
"role": "rf"
|
||||
},
|
||||
"plan": [
|
||||
{
|
||||
"Plan": {
|
||||
"Node Type": "Function Scan",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Function Name": "v_form_view",
|
||||
"Alias": "v_form_view",
|
||||
"Startup Cost": 0.25,
|
||||
"Total Cost": 10.25,
|
||||
"Plan Rows": 1000,
|
||||
"Plan Width": 76,
|
||||
"Actual Startup Time": 594.19,
|
||||
"Actual Total Time": 595.17,
|
||||
"Actual Rows": 2092,
|
||||
"Actual Loops": 1,
|
||||
"Shared Hit Blocks": 55112,
|
||||
"Shared Read Blocks": 0,
|
||||
"Shared Dirtied Blocks": 0,
|
||||
"Shared Written Blocks": 0,
|
||||
"Local Hit Blocks": 0,
|
||||
"Local Read Blocks": 0,
|
||||
"Local Dirtied Blocks": 0,
|
||||
"Local Written Blocks": 0,
|
||||
"Temp Read Blocks": 3246,
|
||||
"Temp Written Blocks": 3270
|
||||
},
|
||||
"Planning": {
|
||||
"Shared Hit Blocks": 0,
|
||||
"Shared Read Blocks": 0,
|
||||
"Shared Dirtied Blocks": 0,
|
||||
"Shared Written Blocks": 0,
|
||||
"Local Hit Blocks": 0,
|
||||
"Local Read Blocks": 0,
|
||||
"Local Dirtied Blocks": 0,
|
||||
"Local Written Blocks": 0,
|
||||
"Temp Read Blocks": 0,
|
||||
"Temp Written Blocks": 0
|
||||
},
|
||||
"Planning Time": 0.014,
|
||||
"Triggers": [],
|
||||
"Execution Time": 596.929
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,62 @@
|
||||
{
|
||||
"query": "SELECT row_type, depth, sort_order, data\n FROM v3.v_summary_view(\n CAST($1 AS INT),\n CAST($2 AS TEXT),\n CAST($3 AS INT[])\n )",
|
||||
"calls": 2,
|
||||
"total_exec_time": 675.087,
|
||||
"mean_exec_time": 337.544,
|
||||
"mode": "analyze",
|
||||
"analyze": true,
|
||||
"params": [
|
||||
2026,
|
||||
"MAIN",
|
||||
null
|
||||
],
|
||||
"param_source": {
|
||||
"method": "GET",
|
||||
"url": "http://localhost:8080/api/v1/svod/1/MAIN/2026",
|
||||
"role": "dfip"
|
||||
},
|
||||
"plan": [
|
||||
{
|
||||
"Plan": {
|
||||
"Node Type": "Function Scan",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Function Name": "v_summary_view",
|
||||
"Alias": "v_summary_view",
|
||||
"Startup Cost": 0.25,
|
||||
"Total Cost": 10.25,
|
||||
"Plan Rows": 1000,
|
||||
"Plan Width": 76,
|
||||
"Actual Startup Time": 274.47,
|
||||
"Actual Total Time": 274.475,
|
||||
"Actual Rows": 133,
|
||||
"Actual Loops": 1,
|
||||
"Shared Hit Blocks": 470717,
|
||||
"Shared Read Blocks": 0,
|
||||
"Shared Dirtied Blocks": 0,
|
||||
"Shared Written Blocks": 0,
|
||||
"Local Hit Blocks": 0,
|
||||
"Local Read Blocks": 0,
|
||||
"Local Dirtied Blocks": 0,
|
||||
"Local Written Blocks": 0,
|
||||
"Temp Read Blocks": 0,
|
||||
"Temp Written Blocks": 0
|
||||
},
|
||||
"Planning": {
|
||||
"Shared Hit Blocks": 0,
|
||||
"Shared Read Blocks": 0,
|
||||
"Shared Dirtied Blocks": 0,
|
||||
"Shared Written Blocks": 0,
|
||||
"Local Hit Blocks": 0,
|
||||
"Local Read Blocks": 0,
|
||||
"Local Dirtied Blocks": 0,
|
||||
"Local Written Blocks": 0,
|
||||
"Temp Read Blocks": 0,
|
||||
"Temp Written Blocks": 0
|
||||
},
|
||||
"Planning Time": 0.007,
|
||||
"Triggers": [],
|
||||
"Execution Time": 274.517
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,29 @@
|
||||
{
|
||||
"query": "SELECT v3.export_job.id, v3.export_job.user_id, v3.export_job.request, v3.export_job.status, v3.export_job.created_at, v3.export_job.started_at, v3.export_job.finished_at, v3.export_job.filename, v3.export_job.media_type, v3.export_job.file_path, v3.export_job.error \nFROM v3.export_job \nWHERE v3.export_job.user_id = $1::INTEGER AND (v3.export_job.finished_at IS NULL OR v3.export_job.finished_at > $2::TIMESTAMP WITH TIME ZONE) ORDER BY v3.export_job.created_at DESC",
|
||||
"calls": 205,
|
||||
"total_exec_time": 52.671,
|
||||
"mean_exec_time": 0.257,
|
||||
"mode": "generic_plan",
|
||||
"analyze": false,
|
||||
"params": null,
|
||||
"param_source": null,
|
||||
"plan": [
|
||||
{
|
||||
"Plan": {
|
||||
"Node Type": "Index Scan",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Scan Direction": "Backward",
|
||||
"Index Name": "export_job_user",
|
||||
"Relation Name": "export_job",
|
||||
"Alias": "export_job",
|
||||
"Startup Cost": 0.15,
|
||||
"Total Cost": 8.17,
|
||||
"Plan Rows": 1,
|
||||
"Plan Width": 262,
|
||||
"Index Cond": "(user_id = $1)",
|
||||
"Filter": "((finished_at IS NULL) OR (finished_at > $2))"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
{
|
||||
"query": "SELECT v3.app_user.id, v3.app_user.email, v3.app_user.username, v3.app_user.hashed_password, v3.app_user.full_name, v3.app_user.role_id, v3.app_user.is_active, v3.app_user.created_at, v3.app_user.updated_at \nFROM v3.app_user \nWHERE v3.app_user.username = $1::VARCHAR \n LIMIT $2::INTEGER",
|
||||
"calls": 25,
|
||||
"total_exec_time": 4.187,
|
||||
"mean_exec_time": 0.167,
|
||||
"mode": "generic_plan",
|
||||
"analyze": false,
|
||||
"params": null,
|
||||
"param_source": null,
|
||||
"plan": [
|
||||
{
|
||||
"Plan": {
|
||||
"Node Type": "Limit",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Startup Cost": 0.0,
|
||||
"Total Cost": 7.81,
|
||||
"Plan Rows": 1,
|
||||
"Plan Width": 153,
|
||||
"Plans": [
|
||||
{
|
||||
"Node Type": "Seq Scan",
|
||||
"Parent Relationship": "Outer",
|
||||
"Parallel Aware": false,
|
||||
"Async Capable": false,
|
||||
"Relation Name": "app_user",
|
||||
"Alias": "app_user",
|
||||
"Startup Cost": 0.0,
|
||||
"Total Cost": 15.62,
|
||||
"Plan Rows": 2,
|
||||
"Plan Width": 153,
|
||||
"Filter": "((username)::text = ($1)::text)"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
517
perf/report-data/20261026-control-s1/summary.json
Normal file
517
perf/report-data/20261026-control-s1/summary.json
Normal file
@ -0,0 +1,517 @@
|
||||
{
|
||||
"run_id": "20261026-control-s1",
|
||||
"groups": [
|
||||
{
|
||||
"scenario": "modal",
|
||||
"target": "sheet_select_vsp@big",
|
||||
"role": "rf",
|
||||
"scale": 1,
|
||||
"cpu_rate": 4,
|
||||
"n": 1,
|
||||
"incomplete_n": 0,
|
||||
"traced_n": 0,
|
||||
"metrics": {
|
||||
"main_thread_ms": {
|
||||
"median": 242.58599999999998,
|
||||
"p95": 242.58599999999998,
|
||||
"min": 242.58599999999998,
|
||||
"max": 242.58599999999998,
|
||||
"n": 1
|
||||
},
|
||||
"click_to_visible_ms": {
|
||||
"median": 228.60000002384186,
|
||||
"p95": 228.60000002384186,
|
||||
"min": 228.60000002384186,
|
||||
"max": 228.60000002384186,
|
||||
"n": 1
|
||||
},
|
||||
"long_task_ms": {
|
||||
"median": 0,
|
||||
"p95": 0,
|
||||
"min": 0,
|
||||
"max": 0,
|
||||
"n": 1
|
||||
},
|
||||
"long_task_n": {
|
||||
"median": 0,
|
||||
"p95": 0,
|
||||
"min": 0,
|
||||
"max": 0,
|
||||
"n": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"scenario": "scroll",
|
||||
"target": "FORM_2/AHR/null@y",
|
||||
"role": "rf",
|
||||
"scale": 1,
|
||||
"cpu_rate": 4,
|
||||
"n": 1,
|
||||
"incomplete_n": 0,
|
||||
"traced_n": 0,
|
||||
"metrics": {
|
||||
"main_thread_ms_per_step": {
|
||||
"median": 349.7567992788461,
|
||||
"p95": 349.7567992788461,
|
||||
"min": 349.7567992788461,
|
||||
"max": 349.7567992788461,
|
||||
"n": 1
|
||||
},
|
||||
"main_thread_ms": {
|
||||
"median": 290997.65699999995,
|
||||
"p95": 290997.65699999995,
|
||||
"min": 290997.65699999995,
|
||||
"max": 290997.65699999995,
|
||||
"n": 1
|
||||
},
|
||||
"axis": {
|
||||
"median": 0,
|
||||
"p95": 0,
|
||||
"min": 0,
|
||||
"max": 0,
|
||||
"n": 1
|
||||
},
|
||||
"duration_ms": {
|
||||
"median": 295401,
|
||||
"p95": 295401,
|
||||
"min": 295401,
|
||||
"max": 295401,
|
||||
"n": 1
|
||||
},
|
||||
"frame_excess_ms": {
|
||||
"median": 250498.53333334342,
|
||||
"p95": 250498.53333334342,
|
||||
"min": 250498.53333334342,
|
||||
"max": 250498.53333334342,
|
||||
"n": 1
|
||||
},
|
||||
"frame_n": {
|
||||
"median": 2695,
|
||||
"p95": 2695,
|
||||
"min": 2695,
|
||||
"max": 2695,
|
||||
"n": 1
|
||||
},
|
||||
"frame_p50_ms": {
|
||||
"median": 100,
|
||||
"p95": 100,
|
||||
"min": 100,
|
||||
"max": 100,
|
||||
"n": 1
|
||||
},
|
||||
"frame_p95_ms": {
|
||||
"median": 266.6999999999971,
|
||||
"p95": 266.6999999999971,
|
||||
"min": 266.6999999999971,
|
||||
"max": 266.6999999999971,
|
||||
"n": 1
|
||||
},
|
||||
"heavy_frame_n": {
|
||||
"median": 1665,
|
||||
"p95": 1665,
|
||||
"min": 1665,
|
||||
"max": 1665,
|
||||
"n": 1
|
||||
},
|
||||
"json_bytes_sheet": {
|
||||
"median": 7597621,
|
||||
"p95": 7597621,
|
||||
"min": 7597621,
|
||||
"max": 7597621,
|
||||
"n": 1
|
||||
},
|
||||
"long_task_ms": {
|
||||
"median": 275153,
|
||||
"p95": 275153,
|
||||
"min": 275153,
|
||||
"max": 275153,
|
||||
"n": 1
|
||||
},
|
||||
"long_task_n": {
|
||||
"median": 1665,
|
||||
"p95": 1665,
|
||||
"min": 1665,
|
||||
"max": 1665,
|
||||
"n": 1
|
||||
},
|
||||
"rows_visible_after": {
|
||||
"median": 24,
|
||||
"p95": 24,
|
||||
"min": 24,
|
||||
"max": 24,
|
||||
"n": 1
|
||||
},
|
||||
"rows_visible_before": {
|
||||
"median": 24,
|
||||
"p95": 24,
|
||||
"min": 24,
|
||||
"max": 24,
|
||||
"n": 1
|
||||
},
|
||||
"steps": {
|
||||
"median": 832,
|
||||
"p95": 832,
|
||||
"min": 832,
|
||||
"max": 832,
|
||||
"n": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"scenario": "scroll",
|
||||
"target": "svod/svod1_MAIN/filter@y",
|
||||
"role": "dfip",
|
||||
"scale": 1,
|
||||
"cpu_rate": 4,
|
||||
"n": 1,
|
||||
"incomplete_n": 0,
|
||||
"traced_n": 0,
|
||||
"metrics": {
|
||||
"main_thread_ms": {
|
||||
"median": 367.58500000000004,
|
||||
"p95": 367.58500000000004,
|
||||
"min": 367.58500000000004,
|
||||
"max": 367.58500000000004,
|
||||
"n": 1
|
||||
},
|
||||
"axis": {
|
||||
"median": 0,
|
||||
"p95": 0,
|
||||
"min": 0,
|
||||
"max": 0,
|
||||
"n": 1
|
||||
},
|
||||
"duration_ms": {
|
||||
"median": 779.7000000476837,
|
||||
"p95": 779.7000000476837,
|
||||
"min": 779.7000000476837,
|
||||
"max": 779.7000000476837,
|
||||
"n": 1
|
||||
},
|
||||
"frame_excess_ms": {
|
||||
"median": 217.33333333333383,
|
||||
"p95": 217.33333333333383,
|
||||
"min": 217.33333333333383,
|
||||
"max": 217.33333333333383,
|
||||
"n": 1
|
||||
},
|
||||
"frame_n": {
|
||||
"median": 33,
|
||||
"p95": 33,
|
||||
"min": 33,
|
||||
"max": 33,
|
||||
"n": 1
|
||||
},
|
||||
"frame_p50_ms": {
|
||||
"median": 16.700000000000045,
|
||||
"p95": 16.700000000000045,
|
||||
"min": 16.700000000000045,
|
||||
"max": 16.700000000000045,
|
||||
"n": 1
|
||||
},
|
||||
"frame_p95_ms": {
|
||||
"median": 16.700000000000045,
|
||||
"p95": 16.700000000000045,
|
||||
"min": 16.700000000000045,
|
||||
"max": 16.700000000000045,
|
||||
"n": 1
|
||||
},
|
||||
"heavy_frame_n": {
|
||||
"median": 1,
|
||||
"p95": 1,
|
||||
"min": 1,
|
||||
"max": 1,
|
||||
"n": 1
|
||||
},
|
||||
"json_bytes_sheet": {
|
||||
"median": 133662,
|
||||
"p95": 133662,
|
||||
"min": 133662,
|
||||
"max": 133662,
|
||||
"n": 1
|
||||
},
|
||||
"long_task_ms": {
|
||||
"median": 252,
|
||||
"p95": 252,
|
||||
"min": 252,
|
||||
"max": 252,
|
||||
"n": 1
|
||||
},
|
||||
"long_task_n": {
|
||||
"median": 1,
|
||||
"p95": 1,
|
||||
"min": 1,
|
||||
"max": 1,
|
||||
"n": 1
|
||||
},
|
||||
"rows_visible_after": {
|
||||
"median": 32,
|
||||
"p95": 32,
|
||||
"min": 32,
|
||||
"max": 32,
|
||||
"n": 1
|
||||
},
|
||||
"rows_visible_before": {
|
||||
"median": 32,
|
||||
"p95": 32,
|
||||
"min": 32,
|
||||
"max": 32,
|
||||
"n": 1
|
||||
},
|
||||
"steps": {
|
||||
"median": 0,
|
||||
"p95": 0,
|
||||
"min": 0,
|
||||
"max": 0,
|
||||
"n": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"scenario": "scroll",
|
||||
"target": "svod/svod1_MAIN@y",
|
||||
"role": "dfip",
|
||||
"scale": 1,
|
||||
"cpu_rate": 4,
|
||||
"n": 1,
|
||||
"incomplete_n": 0,
|
||||
"traced_n": 0,
|
||||
"metrics": {
|
||||
"main_thread_ms_per_step": {
|
||||
"median": 555.1213529411765,
|
||||
"p95": 555.1213529411765,
|
||||
"min": 555.1213529411765,
|
||||
"max": 555.1213529411765,
|
||||
"n": 1
|
||||
},
|
||||
"main_thread_ms": {
|
||||
"median": 18874.126,
|
||||
"p95": 18874.126,
|
||||
"min": 18874.126,
|
||||
"max": 18874.126,
|
||||
"n": 1
|
||||
},
|
||||
"axis": {
|
||||
"median": 0,
|
||||
"p95": 0,
|
||||
"min": 0,
|
||||
"max": 0,
|
||||
"n": 1
|
||||
},
|
||||
"duration_ms": {
|
||||
"median": 19606.300000071526,
|
||||
"p95": 19606.300000071526,
|
||||
"min": 19606.300000071526,
|
||||
"max": 19606.300000071526,
|
||||
"n": 1
|
||||
},
|
||||
"frame_excess_ms": {
|
||||
"median": 17035.03333333335,
|
||||
"p95": 17035.03333333335,
|
||||
"min": 17035.03333333335,
|
||||
"max": 17035.03333333335,
|
||||
"n": 1
|
||||
},
|
||||
"frame_n": {
|
||||
"median": 154,
|
||||
"p95": 154,
|
||||
"min": 154,
|
||||
"max": 154,
|
||||
"n": 1
|
||||
},
|
||||
"frame_p50_ms": {
|
||||
"median": 16.700000000000728,
|
||||
"p95": 16.700000000000728,
|
||||
"min": 16.700000000000728,
|
||||
"max": 16.700000000000728,
|
||||
"n": 1
|
||||
},
|
||||
"frame_p95_ms": {
|
||||
"median": 483.39999999999964,
|
||||
"p95": 483.39999999999964,
|
||||
"min": 483.39999999999964,
|
||||
"max": 483.39999999999964,
|
||||
"n": 1
|
||||
},
|
||||
"heavy_frame_n": {
|
||||
"median": 68,
|
||||
"p95": 68,
|
||||
"min": 68,
|
||||
"max": 68,
|
||||
"n": 1
|
||||
},
|
||||
"json_bytes_sheet": {
|
||||
"median": 133662,
|
||||
"p95": 133662,
|
||||
"min": 133662,
|
||||
"max": 133662,
|
||||
"n": 1
|
||||
},
|
||||
"long_task_ms": {
|
||||
"median": 18269,
|
||||
"p95": 18269,
|
||||
"min": 18269,
|
||||
"max": 18269,
|
||||
"n": 1
|
||||
},
|
||||
"long_task_n": {
|
||||
"median": 68,
|
||||
"p95": 68,
|
||||
"min": 68,
|
||||
"max": 68,
|
||||
"n": 1
|
||||
},
|
||||
"rows_visible_after": {
|
||||
"median": 32,
|
||||
"p95": 32,
|
||||
"min": 32,
|
||||
"max": 32,
|
||||
"n": 1
|
||||
},
|
||||
"rows_visible_before": {
|
||||
"median": 32,
|
||||
"p95": 32,
|
||||
"min": 32,
|
||||
"max": 32,
|
||||
"n": 1
|
||||
},
|
||||
"steps": {
|
||||
"median": 34,
|
||||
"p95": 34,
|
||||
"min": 34,
|
||||
"max": 34,
|
||||
"n": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"scenario": "scroll",
|
||||
"target": "svod/svod2_GO/filter@y",
|
||||
"role": "dfip",
|
||||
"scale": 1,
|
||||
"cpu_rate": 4,
|
||||
"n": 0,
|
||||
"incomplete_n": 1,
|
||||
"traced_n": 0,
|
||||
"metrics": {}
|
||||
},
|
||||
{
|
||||
"scenario": "scroll",
|
||||
"target": "svod/svod2_GO@y",
|
||||
"role": "dfip",
|
||||
"scale": 1,
|
||||
"cpu_rate": 4,
|
||||
"n": 1,
|
||||
"incomplete_n": 0,
|
||||
"traced_n": 0,
|
||||
"metrics": {
|
||||
"main_thread_ms_per_step": {
|
||||
"median": 728.5520126582279,
|
||||
"p95": 728.5520126582279,
|
||||
"min": 728.5520126582279,
|
||||
"max": 728.5520126582279,
|
||||
"n": 1
|
||||
},
|
||||
"main_thread_ms": {
|
||||
"median": 1496445.834,
|
||||
"p95": 1496445.834,
|
||||
"min": 1496445.834,
|
||||
"max": 1496445.834,
|
||||
"n": 1
|
||||
},
|
||||
"axis": {
|
||||
"median": 0,
|
||||
"p95": 0,
|
||||
"min": 0,
|
||||
"max": 0,
|
||||
"n": 1
|
||||
},
|
||||
"duration_ms": {
|
||||
"median": 1528210.7000000477,
|
||||
"p95": 1528210.7000000477,
|
||||
"min": 1528210.7000000477,
|
||||
"max": 1528210.7000000477,
|
||||
"n": 1
|
||||
},
|
||||
"frame_excess_ms": {
|
||||
"median": 1387566.0999999552,
|
||||
"p95": 1387566.0999999552,
|
||||
"min": 1387566.0999999552,
|
||||
"max": 1387566.0999999552,
|
||||
"n": 1
|
||||
},
|
||||
"frame_n": {
|
||||
"median": 8444,
|
||||
"p95": 8444,
|
||||
"min": 8444,
|
||||
"max": 8444,
|
||||
"n": 1
|
||||
},
|
||||
"frame_p50_ms": {
|
||||
"median": 16.800000000046566,
|
||||
"p95": 16.800000000046566,
|
||||
"min": 16.800000000046566,
|
||||
"max": 16.800000000046566,
|
||||
"n": 1
|
||||
},
|
||||
"frame_p95_ms": {
|
||||
"median": 466.69999999995343,
|
||||
"p95": 466.69999999995343,
|
||||
"min": 466.69999999995343,
|
||||
"max": 466.69999999995343,
|
||||
"n": 1
|
||||
},
|
||||
"heavy_frame_n": {
|
||||
"median": 4131,
|
||||
"p95": 4131,
|
||||
"min": 4131,
|
||||
"max": 4131,
|
||||
"n": 1
|
||||
},
|
||||
"json_bytes_sheet": {
|
||||
"median": 30613848,
|
||||
"p95": 30613848,
|
||||
"min": 30613848,
|
||||
"max": 30613848,
|
||||
"n": 1
|
||||
},
|
||||
"long_task_ms": {
|
||||
"median": 1453916,
|
||||
"p95": 1453916,
|
||||
"min": 1453916,
|
||||
"max": 1453916,
|
||||
"n": 1
|
||||
},
|
||||
"long_task_n": {
|
||||
"median": 4109,
|
||||
"p95": 4109,
|
||||
"min": 4109,
|
||||
"max": 4109,
|
||||
"n": 1
|
||||
},
|
||||
"rows_visible_after": {
|
||||
"median": 27,
|
||||
"p95": 27,
|
||||
"min": 27,
|
||||
"max": 27,
|
||||
"n": 1
|
||||
},
|
||||
"rows_visible_before": {
|
||||
"median": 27,
|
||||
"p95": 27,
|
||||
"min": 27,
|
||||
"max": 27,
|
||||
"n": 1
|
||||
},
|
||||
"steps": {
|
||||
"median": 2054,
|
||||
"p95": 2054,
|
||||
"min": 2054,
|
||||
"max": 2054,
|
||||
"n": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
106
perf/report-data/20261026-control-s1/summary.md
Normal file
106
perf/report-data/20261026-control-s1/summary.md
Normal file
@ -0,0 +1,106 @@
|
||||
# Summary: 20261026-control-s1
|
||||
|
||||
## modal | target=sheet_select_vsp@big | role=rf | scale=1 | cpu_rate=4
|
||||
|
||||
Замеров: 1, незавершённых: 0
|
||||
|
||||
| metric | median | p95 | min | max | n |
|
||||
|---|---|---|---|---|---|
|
||||
| main_thread_ms | 242.6 | 242.6 | 242.6 | 242.6 | 1 |
|
||||
| click_to_visible_ms | 228.6 | 228.6 | 228.6 | 228.6 | 1 |
|
||||
| long_task_ms | 0 | 0 | 0 | 0 | 1 |
|
||||
| long_task_n | 0 | 0 | 0 | 0 | 1 |
|
||||
|
||||
## scroll | target=FORM_2/AHR/null@y | role=rf | scale=1 | cpu_rate=4
|
||||
|
||||
Замеров: 1, незавершённых: 0
|
||||
|
||||
| metric | median | p95 | min | max | n |
|
||||
|---|---|---|---|---|---|
|
||||
| main_thread_ms_per_step | 349.8 | 349.8 | 349.8 | 349.8 | 1 |
|
||||
| main_thread_ms | 290997.7 | 290997.7 | 290997.7 | 290997.7 | 1 |
|
||||
| axis | 0 | 0 | 0 | 0 | 1 |
|
||||
| duration_ms | 295401 | 295401 | 295401 | 295401 | 1 |
|
||||
| frame_excess_ms | 250498.5 | 250498.5 | 250498.5 | 250498.5 | 1 |
|
||||
| frame_n | 2695 | 2695 | 2695 | 2695 | 1 |
|
||||
| frame_p50_ms | 100 | 100 | 100 | 100 | 1 |
|
||||
| frame_p95_ms | 266.7 | 266.7 | 266.7 | 266.7 | 1 |
|
||||
| heavy_frame_n | 1665 | 1665 | 1665 | 1665 | 1 |
|
||||
| json_bytes_sheet | 7597621 | 7597621 | 7597621 | 7597621 | 1 |
|
||||
| long_task_ms | 275153 | 275153 | 275153 | 275153 | 1 |
|
||||
| long_task_n | 1665 | 1665 | 1665 | 1665 | 1 |
|
||||
| rows_visible_after | 24 | 24 | 24 | 24 | 1 |
|
||||
| rows_visible_before | 24 | 24 | 24 | 24 | 1 |
|
||||
| steps | 832 | 832 | 832 | 832 | 1 |
|
||||
|
||||
## scroll | target=svod/svod1_MAIN/filter@y | role=dfip | scale=1 | cpu_rate=4
|
||||
|
||||
Замеров: 1, незавершённых: 0
|
||||
|
||||
| metric | median | p95 | min | max | n |
|
||||
|---|---|---|---|---|---|
|
||||
| main_thread_ms | 367.6 | 367.6 | 367.6 | 367.6 | 1 |
|
||||
| axis | 0 | 0 | 0 | 0 | 1 |
|
||||
| duration_ms | 779.7 | 779.7 | 779.7 | 779.7 | 1 |
|
||||
| frame_excess_ms | 217.3 | 217.3 | 217.3 | 217.3 | 1 |
|
||||
| frame_n | 33 | 33 | 33 | 33 | 1 |
|
||||
| frame_p50_ms | 16.7 | 16.7 | 16.7 | 16.7 | 1 |
|
||||
| frame_p95_ms | 16.7 | 16.7 | 16.7 | 16.7 | 1 |
|
||||
| heavy_frame_n | 1 | 1 | 1 | 1 | 1 |
|
||||
| json_bytes_sheet | 133662 | 133662 | 133662 | 133662 | 1 |
|
||||
| long_task_ms | 252 | 252 | 252 | 252 | 1 |
|
||||
| long_task_n | 1 | 1 | 1 | 1 | 1 |
|
||||
| rows_visible_after | 32 | 32 | 32 | 32 | 1 |
|
||||
| rows_visible_before | 32 | 32 | 32 | 32 | 1 |
|
||||
| steps | 0 | 0 | 0 | 0 | 1 |
|
||||
|
||||
## scroll | target=svod/svod1_MAIN@y | role=dfip | scale=1 | cpu_rate=4
|
||||
|
||||
Замеров: 1, незавершённых: 0
|
||||
|
||||
| metric | median | p95 | min | max | n |
|
||||
|---|---|---|---|---|---|
|
||||
| main_thread_ms_per_step | 555.1 | 555.1 | 555.1 | 555.1 | 1 |
|
||||
| main_thread_ms | 18874.1 | 18874.1 | 18874.1 | 18874.1 | 1 |
|
||||
| axis | 0 | 0 | 0 | 0 | 1 |
|
||||
| duration_ms | 19606.3 | 19606.3 | 19606.3 | 19606.3 | 1 |
|
||||
| frame_excess_ms | 17035.0 | 17035.0 | 17035.0 | 17035.0 | 1 |
|
||||
| frame_n | 154 | 154 | 154 | 154 | 1 |
|
||||
| frame_p50_ms | 16.7 | 16.7 | 16.7 | 16.7 | 1 |
|
||||
| frame_p95_ms | 483.4 | 483.4 | 483.4 | 483.4 | 1 |
|
||||
| heavy_frame_n | 68 | 68 | 68 | 68 | 1 |
|
||||
| json_bytes_sheet | 133662 | 133662 | 133662 | 133662 | 1 |
|
||||
| long_task_ms | 18269 | 18269 | 18269 | 18269 | 1 |
|
||||
| long_task_n | 68 | 68 | 68 | 68 | 1 |
|
||||
| rows_visible_after | 32 | 32 | 32 | 32 | 1 |
|
||||
| rows_visible_before | 32 | 32 | 32 | 32 | 1 |
|
||||
| steps | 34 | 34 | 34 | 34 | 1 |
|
||||
|
||||
## scroll | target=svod/svod2_GO/filter@y | role=dfip | scale=1 | cpu_rate=4
|
||||
|
||||
Замеров: 0, незавершённых: 1
|
||||
|
||||
| metric | median | p95 | min | max | n |
|
||||
|---|---|---|---|---|---|
|
||||
|
||||
## scroll | target=svod/svod2_GO@y | role=dfip | scale=1 | cpu_rate=4
|
||||
|
||||
Замеров: 1, незавершённых: 0
|
||||
|
||||
| metric | median | p95 | min | max | n |
|
||||
|---|---|---|---|---|---|
|
||||
| main_thread_ms_per_step | 728.6 | 728.6 | 728.6 | 728.6 | 1 |
|
||||
| main_thread_ms | 1496445.8 | 1496445.8 | 1496445.8 | 1496445.8 | 1 |
|
||||
| axis | 0 | 0 | 0 | 0 | 1 |
|
||||
| duration_ms | 1528210.7 | 1528210.7 | 1528210.7 | 1528210.7 | 1 |
|
||||
| frame_excess_ms | 1387566.1 | 1387566.1 | 1387566.1 | 1387566.1 | 1 |
|
||||
| frame_n | 8444 | 8444 | 8444 | 8444 | 1 |
|
||||
| frame_p50_ms | 16.8 | 16.8 | 16.8 | 16.8 | 1 |
|
||||
| frame_p95_ms | 466.7 | 466.7 | 466.7 | 466.7 | 1 |
|
||||
| heavy_frame_n | 4131 | 4131 | 4131 | 4131 | 1 |
|
||||
| json_bytes_sheet | 30613848 | 30613848 | 30613848 | 30613848 | 1 |
|
||||
| long_task_ms | 1453916 | 1453916 | 1453916 | 1453916 | 1 |
|
||||
| long_task_n | 4109 | 4109 | 4109 | 4109 | 1 |
|
||||
| rows_visible_after | 27 | 27 | 27 | 27 | 1 |
|
||||
| rows_visible_before | 27 | 27 | 27 | 27 | 1 |
|
||||
| steps | 2054 | 2054 | 2054 | 2054 | 1 |
|
||||
106
perf/report-data/20261026-s1/analysis/api-split.json
Normal file
106
perf/report-data/20261026-s1/analysis/api-split.json
Normal file
@ -0,0 +1,106 @@
|
||||
[
|
||||
{
|
||||
"role": "rf",
|
||||
"request": "лист FORM_2/AHR (2092 строк ответа)",
|
||||
"rows": 2092,
|
||||
"path": "/api/v1/form/7/sheet/AHR",
|
||||
"total_ms": 813.0,
|
||||
"db_ms": 725.6,
|
||||
"bytes": 7597621,
|
||||
"content_encoding": "gzip",
|
||||
"python_ms": 87.4,
|
||||
"python_share": 0.11,
|
||||
"ratio_total_db": 1.12
|
||||
},
|
||||
{
|
||||
"role": "rf",
|
||||
"request": "лист FORM_4/CAP (300 строк ответа)",
|
||||
"rows": 300,
|
||||
"path": "/api/v1/form/13/sheet/CAP",
|
||||
"total_ms": 1757.4,
|
||||
"db_ms": 1732.4,
|
||||
"bytes": 1149057,
|
||||
"content_encoding": "gzip",
|
||||
"python_ms": 25.0,
|
||||
"python_share": 0.01,
|
||||
"ratio_total_db": 1.01
|
||||
},
|
||||
{
|
||||
"role": "rf",
|
||||
"request": "лист FORM_4/AHR (110 строк ответа)",
|
||||
"rows": 110,
|
||||
"path": "/api/v1/form/13/sheet/AHR",
|
||||
"total_ms": 642.8,
|
||||
"db_ms": 622.8,
|
||||
"bytes": 441964,
|
||||
"content_encoding": "gzip",
|
||||
"python_ms": 20.0,
|
||||
"python_share": 0.03,
|
||||
"ratio_total_db": 1.03
|
||||
},
|
||||
{
|
||||
"role": "rf",
|
||||
"request": "отчёт проекта LIMIT (1364 строк ответа)",
|
||||
"rows": 1364,
|
||||
"path": "/api/v1/projects/1/report/2026/LIMIT",
|
||||
"total_ms": 343.3,
|
||||
"db_ms": 307.1,
|
||||
"bytes": 1484827,
|
||||
"content_encoding": "gzip",
|
||||
"python_ms": 36.2,
|
||||
"python_share": 0.11,
|
||||
"ratio_total_db": 1.12
|
||||
},
|
||||
{
|
||||
"role": "dfip",
|
||||
"request": "свод 1 MAIN (133 строк ответа)",
|
||||
"rows": 133,
|
||||
"path": "/api/v1/svod/1/MAIN/2026",
|
||||
"total_ms": 301.3,
|
||||
"db_ms": 287.9,
|
||||
"bytes": 133662,
|
||||
"content_encoding": "gzip",
|
||||
"python_ms": 13.4,
|
||||
"python_share": 0.04,
|
||||
"ratio_total_db": 1.05
|
||||
},
|
||||
{
|
||||
"role": "dfip",
|
||||
"request": "свод 2 GO (все организации) (5563 строк ответа)",
|
||||
"rows": 5563,
|
||||
"path": "/api/v1/svod/2/GO/2026",
|
||||
"total_ms": 1056.5,
|
||||
"db_ms": 717.5,
|
||||
"bytes": 30613848,
|
||||
"content_encoding": "gzip",
|
||||
"python_ms": 339.0,
|
||||
"python_share": 0.32,
|
||||
"ratio_total_db": 1.47
|
||||
},
|
||||
{
|
||||
"role": "dfip",
|
||||
"request": "свод 2 RF (все организации) (9497 строк ответа)",
|
||||
"rows": 9497,
|
||||
"path": "/api/v1/svod/2/RF/2026",
|
||||
"total_ms": 1807.6,
|
||||
"db_ms": 1229.2,
|
||||
"bytes": 52017143,
|
||||
"content_encoding": "gzip",
|
||||
"python_ms": 578.4,
|
||||
"python_share": 0.32,
|
||||
"ratio_total_db": 1.47
|
||||
},
|
||||
{
|
||||
"role": "dfip",
|
||||
"request": "сводные проектов (747 строк ответа)",
|
||||
"rows": 747,
|
||||
"path": "/api/v1/projects/plan-summary?year=2026",
|
||||
"total_ms": 331.6,
|
||||
"db_ms": 301.2,
|
||||
"bytes": 493530,
|
||||
"content_encoding": "gzip",
|
||||
"python_ms": 30.4,
|
||||
"python_share": 0.09,
|
||||
"ratio_total_db": 1.1
|
||||
}
|
||||
]
|
||||
12
perf/report-data/20261026-s1/analysis/api-split.md
Normal file
12
perf/report-data/20261026-s1/analysis/api-split.md
Normal file
@ -0,0 +1,12 @@
|
||||
# API: БД против Python (api_split.py, масштаб 1, медиана 10 повторов после прогрева, напрямую :8000)
|
||||
|
||||
| запрос | роль | полное, мс | X-DB-Time-Ms | остаток (Python + передача), мс | доля остатка | полное / БД | размер, МБ | Content-Encoding |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| лист FORM_2/AHR (2092 строк ответа) | rf | 813.0 | 725.6 | 87.4 | 0.11 | 1.12 | 7.60 | gzip |
|
||||
| лист FORM_4/CAP (300 строк ответа) | rf | 1757.4 | 1732.4 | 25.0 | 0.01 | 1.01 | 1.15 | gzip |
|
||||
| лист FORM_4/AHR (110 строк ответа) | rf | 642.8 | 622.8 | 20.0 | 0.03 | 1.03 | 0.44 | gzip |
|
||||
| отчёт проекта LIMIT (1364 строк ответа) | rf | 343.3 | 307.1 | 36.2 | 0.11 | 1.12 | 1.48 | gzip |
|
||||
| свод 1 MAIN (133 строк ответа) | dfip | 301.3 | 287.9 | 13.4 | 0.04 | 1.05 | 0.13 | gzip |
|
||||
| свод 2 GO (все организации) (5563 строк ответа) | dfip | 1056.5 | 717.5 | 339.0 | 0.32 | 1.47 | 30.61 | gzip |
|
||||
| свод 2 RF (все организации) (9497 строк ответа) | dfip | 1807.6 | 1229.2 | 578.4 | 0.32 | 1.47 | 52.02 | gzip |
|
||||
| сводные проектов (747 строк ответа) | dfip | 331.6 | 301.2 | 30.4 | 0.09 | 1.1 | 0.49 | gzip |
|
||||
@ -1275,6 +1275,544 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "FORM_2/AHR/null:cssgrowth",
|
||||
"cycles": [
|
||||
{
|
||||
"cycle": 0,
|
||||
"css_rules": 2874,
|
||||
"css_media_rules": 73,
|
||||
"style_elements": 5,
|
||||
"media_shapes_last400": [
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover { background-color: transparent; }\n}",
|
||||
20
|
||||
],
|
||||
[
|
||||
"@media print {\n .css-* { print-color-adjust: exact; }\n}",
|
||||
14
|
||||
],
|
||||
[
|
||||
"@media (min-width: Npx) {\n .\\!container { max-width: Npx !important; }\n .container { max-width: Npx; }\n}",
|
||||
5
|
||||
],
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); }\n}",
|
||||
3
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container { width: 100vw; left: env(safe-area-inset-left); margin: Npx; }\n .Toastify__toast-container--top-left, .Toastify__toast-container--top-center, .To",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container[data-stacked=\"true\"] { width: 100vw; }\n}",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media (pointer: coarse) {\n .css-* { top: Npx; }\n}",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media (forced-colors: active) {\n .css-* { border: Npx solid buttonborder; }\n}",
|
||||
2
|
||||
]
|
||||
],
|
||||
"matchmedia_calls": 0,
|
||||
"matchmedia_listeners_net": 0,
|
||||
"matchmedia_top": []
|
||||
},
|
||||
{
|
||||
"cycle": 1,
|
||||
"scroll_ms_per_step": 75.4,
|
||||
"css_rules": 3454,
|
||||
"css_media_rules": 102,
|
||||
"style_elements": 5,
|
||||
"media_shapes_last400": [
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover { background-color: transparent; }\n}",
|
||||
28
|
||||
],
|
||||
[
|
||||
"@media print {\n .css-* { print-color-adjust: exact; }\n}",
|
||||
21
|
||||
],
|
||||
[
|
||||
"@media (hover: hover) {\n .css-*:hover { --variant-containedBg: rgb(25, 90, 45); --variant-textBg: rgba(37, 129, 65, 0.04); --variant-outlinedBorder: #258141; --variant-outlinedBg: rgba(37, 129, 65, 0.04); }\n}",
|
||||
8
|
||||
],
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); }\n}",
|
||||
6
|
||||
],
|
||||
[
|
||||
"@media (min-width: Npx) {\n .\\!container { max-width: Npx !important; }\n .container { max-width: Npx; }\n}",
|
||||
5
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container { width: 100vw; left: env(safe-area-inset-left); margin: Npx; }\n .Toastify__toast-container--top-left, .Toastify__toast-container--top-center, .To",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container[data-stacked=\"true\"] { width: 100vw; }\n}",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media (pointer: coarse) {\n .css-* { top: Npx; }\n}",
|
||||
2
|
||||
]
|
||||
],
|
||||
"matchmedia_calls": 2,
|
||||
"matchmedia_listeners_net": 0,
|
||||
"matchmedia_top": [
|
||||
[
|
||||
"(max-width:720px) @ at static/js/408_script.6797a7e7.js:162:21515 < at Object.useMemo (static/js/lib-react_script.73464df3.js:2:64779) < at n.useMemo (static/js/lib-react_script.73464df3.js:2:135509)",
|
||||
2
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"cycle": 2,
|
||||
"scroll_ms_per_step": 75.9,
|
||||
"css_rules": 3471,
|
||||
"css_media_rules": 102,
|
||||
"style_elements": 5,
|
||||
"media_shapes_last400": [
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover { background-color: transparent; }\n}",
|
||||
28
|
||||
],
|
||||
[
|
||||
"@media print {\n .css-* { print-color-adjust: exact; }\n}",
|
||||
21
|
||||
],
|
||||
[
|
||||
"@media (hover: hover) {\n .css-*:hover { --variant-containedBg: rgb(25, 90, 45); --variant-textBg: rgba(37, 129, 65, 0.04); --variant-outlinedBorder: #258141; --variant-outlinedBg: rgba(37, 129, 65, 0.04); }\n}",
|
||||
8
|
||||
],
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); }\n}",
|
||||
6
|
||||
],
|
||||
[
|
||||
"@media (min-width: Npx) {\n .\\!container { max-width: Npx !important; }\n .container { max-width: Npx; }\n}",
|
||||
5
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container { width: 100vw; left: env(safe-area-inset-left); margin: Npx; }\n .Toastify__toast-container--top-left, .Toastify__toast-container--top-center, .To",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container[data-stacked=\"true\"] { width: 100vw; }\n}",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media (pointer: coarse) {\n .css-* { top: Npx; }\n}",
|
||||
2
|
||||
]
|
||||
],
|
||||
"matchmedia_calls": 4,
|
||||
"matchmedia_listeners_net": 0,
|
||||
"matchmedia_top": [
|
||||
[
|
||||
"(max-width:720px) @ at static/js/408_script.6797a7e7.js:162:21515 < at Object.useMemo (static/js/lib-react_script.73464df3.js:2:64779) < at n.useMemo (static/js/lib-react_script.73464df3.js:2:135509)",
|
||||
4
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"cycle": 3,
|
||||
"scroll_ms_per_step": 78.3,
|
||||
"css_rules": 3476,
|
||||
"css_media_rules": 102,
|
||||
"style_elements": 5,
|
||||
"media_shapes_last400": [
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover { background-color: transparent; }\n}",
|
||||
28
|
||||
],
|
||||
[
|
||||
"@media print {\n .css-* { print-color-adjust: exact; }\n}",
|
||||
21
|
||||
],
|
||||
[
|
||||
"@media (hover: hover) {\n .css-*:hover { --variant-containedBg: rgb(25, 90, 45); --variant-textBg: rgba(37, 129, 65, 0.04); --variant-outlinedBorder: #258141; --variant-outlinedBg: rgba(37, 129, 65, 0.04); }\n}",
|
||||
8
|
||||
],
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); }\n}",
|
||||
6
|
||||
],
|
||||
[
|
||||
"@media (min-width: Npx) {\n .\\!container { max-width: Npx !important; }\n .container { max-width: Npx; }\n}",
|
||||
5
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container { width: 100vw; left: env(safe-area-inset-left); margin: Npx; }\n .Toastify__toast-container--top-left, .Toastify__toast-container--top-center, .To",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container[data-stacked=\"true\"] { width: 100vw; }\n}",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media (pointer: coarse) {\n .css-* { top: Npx; }\n}",
|
||||
2
|
||||
]
|
||||
],
|
||||
"matchmedia_calls": 6,
|
||||
"matchmedia_listeners_net": 0,
|
||||
"matchmedia_top": [
|
||||
[
|
||||
"(max-width:720px) @ at static/js/408_script.6797a7e7.js:162:21515 < at Object.useMemo (static/js/lib-react_script.73464df3.js:2:64779) < at n.useMemo (static/js/lib-react_script.73464df3.js:2:135509)",
|
||||
6
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"cycle": 4,
|
||||
"scroll_ms_per_step": 79,
|
||||
"css_rules": 3482,
|
||||
"css_media_rules": 102,
|
||||
"style_elements": 5,
|
||||
"media_shapes_last400": [
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover { background-color: transparent; }\n}",
|
||||
28
|
||||
],
|
||||
[
|
||||
"@media print {\n .css-* { print-color-adjust: exact; }\n}",
|
||||
21
|
||||
],
|
||||
[
|
||||
"@media (hover: hover) {\n .css-*:hover { --variant-containedBg: rgb(25, 90, 45); --variant-textBg: rgba(37, 129, 65, 0.04); --variant-outlinedBorder: #258141; --variant-outlinedBg: rgba(37, 129, 65, 0.04); }\n}",
|
||||
8
|
||||
],
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); }\n}",
|
||||
6
|
||||
],
|
||||
[
|
||||
"@media (min-width: Npx) {\n .\\!container { max-width: Npx !important; }\n .container { max-width: Npx; }\n}",
|
||||
5
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container { width: 100vw; left: env(safe-area-inset-left); margin: Npx; }\n .Toastify__toast-container--top-left, .Toastify__toast-container--top-center, .To",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container[data-stacked=\"true\"] { width: 100vw; }\n}",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media (pointer: coarse) {\n .css-* { top: Npx; }\n}",
|
||||
2
|
||||
]
|
||||
],
|
||||
"matchmedia_calls": 8,
|
||||
"matchmedia_listeners_net": 0,
|
||||
"matchmedia_top": [
|
||||
[
|
||||
"(max-width:720px) @ at static/js/408_script.6797a7e7.js:162:21515 < at Object.useMemo (static/js/lib-react_script.73464df3.js:2:64779) < at n.useMemo (static/js/lib-react_script.73464df3.js:2:135509)",
|
||||
8
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"cycle": 5,
|
||||
"scroll_ms_per_step": 77,
|
||||
"css_rules": 3490,
|
||||
"css_media_rules": 102,
|
||||
"style_elements": 5,
|
||||
"media_shapes_last400": [
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover { background-color: transparent; }\n}",
|
||||
28
|
||||
],
|
||||
[
|
||||
"@media print {\n .css-* { print-color-adjust: exact; }\n}",
|
||||
21
|
||||
],
|
||||
[
|
||||
"@media (hover: hover) {\n .css-*:hover { --variant-containedBg: rgb(25, 90, 45); --variant-textBg: rgba(37, 129, 65, 0.04); --variant-outlinedBorder: #258141; --variant-outlinedBg: rgba(37, 129, 65, 0.04); }\n}",
|
||||
8
|
||||
],
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); }\n}",
|
||||
6
|
||||
],
|
||||
[
|
||||
"@media (min-width: Npx) {\n .\\!container { max-width: Npx !important; }\n .container { max-width: Npx; }\n}",
|
||||
5
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container { width: 100vw; left: env(safe-area-inset-left); margin: Npx; }\n .Toastify__toast-container--top-left, .Toastify__toast-container--top-center, .To",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container[data-stacked=\"true\"] { width: 100vw; }\n}",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media (pointer: coarse) {\n .css-* { top: Npx; }\n}",
|
||||
2
|
||||
]
|
||||
],
|
||||
"matchmedia_calls": 10,
|
||||
"matchmedia_listeners_net": 0,
|
||||
"matchmedia_top": [
|
||||
[
|
||||
"(max-width:720px) @ at static/js/408_script.6797a7e7.js:162:21515 < at Object.useMemo (static/js/lib-react_script.73464df3.js:2:64779) < at n.useMemo (static/js/lib-react_script.73464df3.js:2:135509)",
|
||||
10
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"cycle": 6,
|
||||
"scroll_ms_per_step": 77.5,
|
||||
"css_rules": 3497,
|
||||
"css_media_rules": 102,
|
||||
"style_elements": 5,
|
||||
"media_shapes_last400": [
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover { background-color: transparent; }\n}",
|
||||
28
|
||||
],
|
||||
[
|
||||
"@media print {\n .css-* { print-color-adjust: exact; }\n}",
|
||||
21
|
||||
],
|
||||
[
|
||||
"@media (hover: hover) {\n .css-*:hover { --variant-containedBg: rgb(25, 90, 45); --variant-textBg: rgba(37, 129, 65, 0.04); --variant-outlinedBorder: #258141; --variant-outlinedBg: rgba(37, 129, 65, 0.04); }\n}",
|
||||
8
|
||||
],
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); }\n}",
|
||||
6
|
||||
],
|
||||
[
|
||||
"@media (min-width: Npx) {\n .\\!container { max-width: Npx !important; }\n .container { max-width: Npx; }\n}",
|
||||
5
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container { width: 100vw; left: env(safe-area-inset-left); margin: Npx; }\n .Toastify__toast-container--top-left, .Toastify__toast-container--top-center, .To",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container[data-stacked=\"true\"] { width: 100vw; }\n}",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media (pointer: coarse) {\n .css-* { top: Npx; }\n}",
|
||||
2
|
||||
]
|
||||
],
|
||||
"matchmedia_calls": 12,
|
||||
"matchmedia_listeners_net": 0,
|
||||
"matchmedia_top": [
|
||||
[
|
||||
"(max-width:720px) @ at static/js/408_script.6797a7e7.js:162:21515 < at Object.useMemo (static/js/lib-react_script.73464df3.js:2:64779) < at n.useMemo (static/js/lib-react_script.73464df3.js:2:135509)",
|
||||
12
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"cycle": 7,
|
||||
"scroll_ms_per_step": 77.5,
|
||||
"css_rules": 3500,
|
||||
"css_media_rules": 102,
|
||||
"style_elements": 5,
|
||||
"media_shapes_last400": [
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover { background-color: transparent; }\n}",
|
||||
28
|
||||
],
|
||||
[
|
||||
"@media print {\n .css-* { print-color-adjust: exact; }\n}",
|
||||
21
|
||||
],
|
||||
[
|
||||
"@media (hover: hover) {\n .css-*:hover { --variant-containedBg: rgb(25, 90, 45); --variant-textBg: rgba(37, 129, 65, 0.04); --variant-outlinedBorder: #258141; --variant-outlinedBg: rgba(37, 129, 65, 0.04); }\n}",
|
||||
8
|
||||
],
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); }\n}",
|
||||
6
|
||||
],
|
||||
[
|
||||
"@media (min-width: Npx) {\n .\\!container { max-width: Npx !important; }\n .container { max-width: Npx; }\n}",
|
||||
5
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container { width: 100vw; left: env(safe-area-inset-left); margin: Npx; }\n .Toastify__toast-container--top-left, .Toastify__toast-container--top-center, .To",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container[data-stacked=\"true\"] { width: 100vw; }\n}",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media (pointer: coarse) {\n .css-* { top: Npx; }\n}",
|
||||
2
|
||||
]
|
||||
],
|
||||
"matchmedia_calls": 14,
|
||||
"matchmedia_listeners_net": 0,
|
||||
"matchmedia_top": [
|
||||
[
|
||||
"(max-width:720px) @ at static/js/408_script.6797a7e7.js:162:21515 < at Object.useMemo (static/js/lib-react_script.73464df3.js:2:64779) < at n.useMemo (static/js/lib-react_script.73464df3.js:2:135509)",
|
||||
14
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"cycle": 8,
|
||||
"scroll_ms_per_step": 78.2,
|
||||
"css_rules": 3501,
|
||||
"css_media_rules": 102,
|
||||
"style_elements": 5,
|
||||
"media_shapes_last400": [
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover { background-color: transparent; }\n}",
|
||||
28
|
||||
],
|
||||
[
|
||||
"@media print {\n .css-* { print-color-adjust: exact; }\n}",
|
||||
21
|
||||
],
|
||||
[
|
||||
"@media (hover: hover) {\n .css-*:hover { --variant-containedBg: rgb(25, 90, 45); --variant-textBg: rgba(37, 129, 65, 0.04); --variant-outlinedBorder: #258141; --variant-outlinedBg: rgba(37, 129, 65, 0.04); }\n}",
|
||||
8
|
||||
],
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); }\n}",
|
||||
6
|
||||
],
|
||||
[
|
||||
"@media (min-width: Npx) {\n .\\!container { max-width: Npx !important; }\n .container { max-width: Npx; }\n}",
|
||||
5
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container { width: 100vw; left: env(safe-area-inset-left); margin: Npx; }\n .Toastify__toast-container--top-left, .Toastify__toast-container--top-center, .To",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container[data-stacked=\"true\"] { width: 100vw; }\n}",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media (pointer: coarse) {\n .css-* { top: Npx; }\n}",
|
||||
2
|
||||
]
|
||||
],
|
||||
"matchmedia_calls": 16,
|
||||
"matchmedia_listeners_net": 0,
|
||||
"matchmedia_top": [
|
||||
[
|
||||
"(max-width:720px) @ at static/js/408_script.6797a7e7.js:162:21515 < at Object.useMemo (static/js/lib-react_script.73464df3.js:2:64779) < at n.useMemo (static/js/lib-react_script.73464df3.js:2:135509)",
|
||||
16
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"cycle": 9,
|
||||
"scroll_ms_per_step": 79.3,
|
||||
"css_rules": 3504,
|
||||
"css_media_rules": 102,
|
||||
"style_elements": 5,
|
||||
"media_shapes_last400": [
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover { background-color: transparent; }\n}",
|
||||
28
|
||||
],
|
||||
[
|
||||
"@media print {\n .css-* { print-color-adjust: exact; }\n}",
|
||||
21
|
||||
],
|
||||
[
|
||||
"@media (hover: hover) {\n .css-*:hover { --variant-containedBg: rgb(25, 90, 45); --variant-textBg: rgba(37, 129, 65, 0.04); --variant-outlinedBorder: #258141; --variant-outlinedBg: rgba(37, 129, 65, 0.04); }\n}",
|
||||
8
|
||||
],
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); }\n}",
|
||||
6
|
||||
],
|
||||
[
|
||||
"@media (min-width: Npx) {\n .\\!container { max-width: Npx !important; }\n .container { max-width: Npx; }\n}",
|
||||
5
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container { width: 100vw; left: env(safe-area-inset-left); margin: Npx; }\n .Toastify__toast-container--top-left, .Toastify__toast-container--top-center, .To",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container[data-stacked=\"true\"] { width: 100vw; }\n}",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media (pointer: coarse) {\n .css-* { top: Npx; }\n}",
|
||||
2
|
||||
]
|
||||
],
|
||||
"matchmedia_calls": 18,
|
||||
"matchmedia_listeners_net": 0,
|
||||
"matchmedia_top": [
|
||||
[
|
||||
"(max-width:720px) @ at static/js/408_script.6797a7e7.js:162:21515 < at Object.useMemo (static/js/lib-react_script.73464df3.js:2:64779) < at n.useMemo (static/js/lib-react_script.73464df3.js:2:135509)",
|
||||
18
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"cycle": 10,
|
||||
"scroll_ms_per_step": 77.1,
|
||||
"css_rules": 3505,
|
||||
"css_media_rules": 102,
|
||||
"style_elements": 5,
|
||||
"media_shapes_last400": [
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover { background-color: transparent; }\n}",
|
||||
28
|
||||
],
|
||||
[
|
||||
"@media print {\n .css-* { print-color-adjust: exact; }\n}",
|
||||
21
|
||||
],
|
||||
[
|
||||
"@media (hover: hover) {\n .css-*:hover { --variant-containedBg: rgb(25, 90, 45); --variant-textBg: rgba(37, 129, 65, 0.04); --variant-outlinedBorder: #258141; --variant-outlinedBg: rgba(37, 129, 65, 0.04); }\n}",
|
||||
8
|
||||
],
|
||||
[
|
||||
"@media (hover: none) {\n .css-*:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); }\n}",
|
||||
6
|
||||
],
|
||||
[
|
||||
"@media (min-width: Npx) {\n .\\!container { max-width: Npx !important; }\n .container { max-width: Npx; }\n}",
|
||||
5
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container { width: 100vw; left: env(safe-area-inset-left); margin: Npx; }\n .Toastify__toast-container--top-left, .Toastify__toast-container--top-center, .To",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media only screen and (max-width: Npx) {\n .Toastify__toast-container[data-stacked=\"true\"] { width: 100vw; }\n}",
|
||||
2
|
||||
],
|
||||
[
|
||||
"@media (pointer: coarse) {\n .css-* { top: Npx; }\n}",
|
||||
2
|
||||
]
|
||||
],
|
||||
"matchmedia_calls": 20,
|
||||
"matchmedia_listeners_net": 0,
|
||||
"matchmedia_top": [
|
||||
[
|
||||
"(max-width:720px) @ at static/js/408_script.6797a7e7.js:162:21515 < at Object.useMemo (static/js/lib-react_script.73464df3.js:2:64779) < at n.useMemo (static/js/lib-react_script.73464df3.js:2:135509)",
|
||||
20
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"modal": [
|
||||
|
||||
@ -41,7 +41,7 @@
|
||||
| cpu | svod/svod2_RF:filter | 743 | 1796 | 1 | 20 | 1 (139 мс) | attributes:tbody.MuiTableBody-root@class ×1 | коммитов / |
|
||||
| cpu | svod/svod1_MAIN:filter | 601 | 1800 | 1 | 20 | 1 (71 мс) | attributes:tbody.MuiTableBody-root@class ×1 | коммитов / |
|
||||
|
||||
## Рост CSS-правил и matchMedia по циклам: FORM_2/AHR/null:cssgrowth
|
||||
## Рост CSS-правил и matchMedia по циклам: FORM_2/AHR/null:cssgrowth (цикл AHR -> скролл 40 шагов -> /tasks)
|
||||
|
||||
| цикл | main thread/шаг, мс | CSS-правил | @media | style | вызовов matchMedia | нетто listeners matchMedia |
|
||||
|---|---|---|---|---|---|---|
|
||||
@ -62,6 +62,26 @@
|
||||
| 14 | 76.7 | 3249 | 96 | 5 | | |
|
||||
| 15 | 78.1 | 3249 | 96 | 5 | | |
|
||||
|
||||
## Рост CSS-правил и matchMedia по циклам: FORM_2/AHR/null:cssgrowth (цикл AHR -> скролл -> /tasks -> второй лист -> скролл -> /tasks, со счётчиком matchMedia)
|
||||
|
||||
| цикл | main thread/шаг, мс | CSS-правил | @media | style | вызовов matchMedia | нетто listeners matchMedia |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 0 | | 2874 | 73 | 5 | 0 | 0 |
|
||||
| 1 | 75.4 | 3454 | 102 | 5 | 2 | 0 |
|
||||
| 2 | 75.9 | 3471 | 102 | 5 | 4 | 0 |
|
||||
| 3 | 78.3 | 3476 | 102 | 5 | 6 | 0 |
|
||||
| 4 | 79 | 3482 | 102 | 5 | 8 | 0 |
|
||||
| 5 | 77 | 3490 | 102 | 5 | 10 | 0 |
|
||||
| 6 | 77.5 | 3497 | 102 | 5 | 12 | 0 |
|
||||
| 7 | 77.5 | 3500 | 102 | 5 | 14 | 0 |
|
||||
| 8 | 78.2 | 3501 | 102 | 5 | 16 | 0 |
|
||||
| 9 | 79.3 | 3504 | 102 | 5 | 18 | 0 |
|
||||
| 10 | 77.1 | 3505 | 102 | 5 | 20 | 0 |
|
||||
|
||||
Топ мест вызова matchMedia (последний цикл, нарастающим итогом):
|
||||
|
||||
- 20 × `(max-width:720px) @ at static/js/408_script.6797a7e7.js:162:21515 < at Object.useMemo (static/js/lib-react_script.73464df3.js:2:64779) < at n.useMemo (static/js/lib-react_script.73464df3.js:2:135509)`
|
||||
|
||||
## Модалки (повтор на восстановленных данных)
|
||||
|
||||
| модалка | роль | клик → кадр, мс | main thread, мс |
|
||||
|
||||
807
perf/report-data/20261026-s1/analysis/modal-renders.json
Normal file
807
perf/report-data/20261026-s1/analysis/modal-renders.json
Normal file
@ -0,0 +1,807 @@
|
||||
{
|
||||
"react": [],
|
||||
"cpu": [],
|
||||
"filter": [],
|
||||
"cssgrowth": [],
|
||||
"modal": [],
|
||||
"modal_renders": [
|
||||
{
|
||||
"target": "sheet_select_vsp",
|
||||
"commits": 14,
|
||||
"renders": 6684,
|
||||
"self_ms": 30.9,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(td))",
|
||||
473,
|
||||
7.6
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
392,
|
||||
2.4
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
361,
|
||||
2.1
|
||||
],
|
||||
[
|
||||
"ForwardRef(Tooltip)",
|
||||
123,
|
||||
1.4
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(button))",
|
||||
131,
|
||||
1.3
|
||||
],
|
||||
[
|
||||
"MRT_TableBodyCellValue",
|
||||
384,
|
||||
1.0
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "sheet_select_vsp@big",
|
||||
"commits": 14,
|
||||
"renders": 6632,
|
||||
"self_ms": 31.0,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(td))",
|
||||
472,
|
||||
8.2
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
356,
|
||||
2.6
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
389,
|
||||
2
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(button))",
|
||||
130,
|
||||
1.5
|
||||
],
|
||||
[
|
||||
"ForwardRef(Tooltip)",
|
||||
122,
|
||||
1.5
|
||||
],
|
||||
[
|
||||
"ForwardRef(ButtonBase)",
|
||||
130,
|
||||
1.4
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "sheet_select_expense",
|
||||
"commits": 13,
|
||||
"renders": 6841,
|
||||
"self_ms": 34.0,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(td))",
|
||||
539,
|
||||
10.7
|
||||
],
|
||||
[
|
||||
"MRT_Table",
|
||||
1,
|
||||
2.3
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
403,
|
||||
1.9
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
336,
|
||||
1.7
|
||||
],
|
||||
[
|
||||
"ForwardRef(ButtonBase)",
|
||||
137,
|
||||
1.5
|
||||
],
|
||||
[
|
||||
"ForwardRef(Tooltip)",
|
||||
123,
|
||||
1.3
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "sheet_select_expense@big",
|
||||
"commits": 13,
|
||||
"renders": 6841,
|
||||
"self_ms": 32.6,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(td))",
|
||||
539,
|
||||
8.5
|
||||
],
|
||||
[
|
||||
"MRT_Table",
|
||||
1,
|
||||
2.7
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
336,
|
||||
2.1
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
403,
|
||||
1.7
|
||||
],
|
||||
[
|
||||
"MRT_TableBodyRow",
|
||||
24,
|
||||
1.6
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(button))",
|
||||
137,
|
||||
1.1
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "sheet_create_program",
|
||||
"commits": 11,
|
||||
"renders": 6670,
|
||||
"self_ms": 36.4,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(td))",
|
||||
539,
|
||||
11.2
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
314,
|
||||
2.9
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
381,
|
||||
2.6
|
||||
],
|
||||
[
|
||||
"MRT_Table",
|
||||
1,
|
||||
2.5
|
||||
],
|
||||
[
|
||||
"MRT_TableBodyRow",
|
||||
24,
|
||||
1.6
|
||||
],
|
||||
[
|
||||
"ForwardRef(Tooltip)",
|
||||
123,
|
||||
1.4
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "sheet_create_program@big",
|
||||
"commits": 11,
|
||||
"renders": 6670,
|
||||
"self_ms": 28.7,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(td))",
|
||||
539,
|
||||
6.8
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
381,
|
||||
2.4
|
||||
],
|
||||
[
|
||||
"MRT_Table",
|
||||
1,
|
||||
2.1
|
||||
],
|
||||
[
|
||||
"MRT_TableBodyRow",
|
||||
24,
|
||||
1.9
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
314,
|
||||
1.7
|
||||
],
|
||||
[
|
||||
"ForwardRef(Tooltip)",
|
||||
123,
|
||||
1.6
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "sheet_create_project",
|
||||
"commits": 11,
|
||||
"renders": 6670,
|
||||
"self_ms": 39.3,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(td))",
|
||||
539,
|
||||
12.6
|
||||
],
|
||||
[
|
||||
"MRT_Table",
|
||||
1,
|
||||
2.6
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
381,
|
||||
2.5
|
||||
],
|
||||
[
|
||||
"MRT_TableBodyRow",
|
||||
24,
|
||||
1.8
|
||||
],
|
||||
[
|
||||
"ForwardRef(Tooltip)",
|
||||
123,
|
||||
1.8
|
||||
],
|
||||
[
|
||||
"ForwardRef(TableCell)",
|
||||
539,
|
||||
1.5
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "sheet_create_project@big",
|
||||
"commits": 11,
|
||||
"renders": 6670,
|
||||
"self_ms": 28.2,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(td))",
|
||||
539,
|
||||
8.0
|
||||
],
|
||||
[
|
||||
"ForwardRef(Tooltip)",
|
||||
123,
|
||||
4.3
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
381,
|
||||
1.8
|
||||
],
|
||||
[
|
||||
"MRT_TableBodyRow",
|
||||
24,
|
||||
1.7
|
||||
],
|
||||
[
|
||||
"MRT_Table",
|
||||
1,
|
||||
1.6
|
||||
],
|
||||
[
|
||||
"MRT_TableBodyCell",
|
||||
480,
|
||||
0.9
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "sheet_columns_tree",
|
||||
"commits": 8,
|
||||
"renders": 940,
|
||||
"self_ms": 16.0,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(TreeItem)",
|
||||
24,
|
||||
4
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
106,
|
||||
2.1
|
||||
],
|
||||
[
|
||||
"ForwardRef(SimpleTreeView)",
|
||||
2,
|
||||
2.0
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
82,
|
||||
1
|
||||
],
|
||||
[
|
||||
"Transition",
|
||||
30,
|
||||
0.7
|
||||
],
|
||||
[
|
||||
"ForwardRef(SwitchBase)",
|
||||
13,
|
||||
0.6
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "sheet_columns_tree@big",
|
||||
"commits": 8,
|
||||
"renders": 745,
|
||||
"self_ms": 14.5,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(TreeItem)",
|
||||
18,
|
||||
4.0
|
||||
],
|
||||
[
|
||||
"ForwardRef(SimpleTreeView)",
|
||||
2,
|
||||
2.2
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
85,
|
||||
1.6
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
64,
|
||||
0.5
|
||||
],
|
||||
[
|
||||
"ForwardRef(Checkbox)",
|
||||
10,
|
||||
0.5
|
||||
],
|
||||
[
|
||||
"Insertion",
|
||||
230,
|
||||
0.5
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "task_stages",
|
||||
"commits": 8,
|
||||
"renders": 1375,
|
||||
"self_ms": 13.0,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
134,
|
||||
3.0
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(td))",
|
||||
131,
|
||||
1.1
|
||||
],
|
||||
[
|
||||
"ForwardRef(Chip)",
|
||||
24,
|
||||
1
|
||||
],
|
||||
[
|
||||
"ForwardRef(TouchRipple)",
|
||||
5,
|
||||
1
|
||||
],
|
||||
[
|
||||
"StagesTable",
|
||||
2,
|
||||
0.7
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(span))",
|
||||
131,
|
||||
0.7
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "task_stage_add",
|
||||
"commits": 10,
|
||||
"renders": 1780,
|
||||
"self_ms": 18.0,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
120,
|
||||
2.8
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(td))",
|
||||
125,
|
||||
1.2
|
||||
],
|
||||
[
|
||||
"ForwardRef(SelectInput)",
|
||||
6,
|
||||
1.2
|
||||
],
|
||||
[
|
||||
"CalendarInput",
|
||||
4,
|
||||
1.1
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
92,
|
||||
1
|
||||
],
|
||||
[
|
||||
"StageFormTheme",
|
||||
2,
|
||||
0.8
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "task_stage_edit",
|
||||
"commits": 12,
|
||||
"renders": 2277,
|
||||
"self_ms": 20.9,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
183,
|
||||
4.0
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
123,
|
||||
1.8
|
||||
],
|
||||
[
|
||||
"ForwardRef(SelectInput)",
|
||||
10,
|
||||
1.4
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(span))",
|
||||
129,
|
||||
1
|
||||
],
|
||||
[
|
||||
"CollapsibleTree",
|
||||
1,
|
||||
1
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(input))",
|
||||
31,
|
||||
0.8
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "project_stages",
|
||||
"commits": 8,
|
||||
"renders": 416,
|
||||
"self_ms": 9.1,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
45,
|
||||
1.4
|
||||
],
|
||||
[
|
||||
"ForwardRef(TouchRipple)",
|
||||
5,
|
||||
1.1
|
||||
],
|
||||
[
|
||||
"ForwardRef(Chip)",
|
||||
3,
|
||||
0.6
|
||||
],
|
||||
[
|
||||
"ForwardRef(ButtonBase)",
|
||||
5,
|
||||
0.6
|
||||
],
|
||||
[
|
||||
"StagesTable",
|
||||
2,
|
||||
0.5
|
||||
],
|
||||
[
|
||||
"ForwardRef(TableCell)",
|
||||
26,
|
||||
0.5
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "project_add_year",
|
||||
"commits": 6,
|
||||
"renders": 194,
|
||||
"self_ms": 3.7,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(TouchRipple)",
|
||||
5,
|
||||
0.8
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
30,
|
||||
0.6
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
14,
|
||||
0.5
|
||||
],
|
||||
[
|
||||
"ForwardRef(ButtonBase)",
|
||||
7,
|
||||
0.4
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Ripple))",
|
||||
3,
|
||||
0.2
|
||||
],
|
||||
[
|
||||
"Ripple",
|
||||
3,
|
||||
0.2
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "project_stage_delete",
|
||||
"commits": 11,
|
||||
"renders": 366,
|
||||
"self_ms": 6.1,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
23,
|
||||
0.8
|
||||
],
|
||||
[
|
||||
"Transition",
|
||||
6,
|
||||
0.8
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(button))",
|
||||
12,
|
||||
0.6
|
||||
],
|
||||
[
|
||||
"ForwardRef(ButtonBase)",
|
||||
12,
|
||||
0.6
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
26,
|
||||
0.5
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(span))",
|
||||
28,
|
||||
0.4
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "projects_create",
|
||||
"commits": 9,
|
||||
"renders": 2624,
|
||||
"self_ms": 22.8,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(td))",
|
||||
110,
|
||||
4.0
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
194,
|
||||
2.2
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
183,
|
||||
1.7
|
||||
],
|
||||
[
|
||||
"ForwardRef(TouchRipple)",
|
||||
5,
|
||||
1.2
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(span))",
|
||||
85,
|
||||
1
|
||||
],
|
||||
[
|
||||
"ForwardRef(Tooltip)",
|
||||
37,
|
||||
0.9
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "projects_edit",
|
||||
"commits": 15,
|
||||
"renders": 3400,
|
||||
"self_ms": 25.8,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(td))",
|
||||
110,
|
||||
3.0
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
227,
|
||||
2.8
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
257,
|
||||
1.8
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(span))",
|
||||
102,
|
||||
1
|
||||
],
|
||||
[
|
||||
"Insertion",
|
||||
1035,
|
||||
1.0
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(input))",
|
||||
67,
|
||||
0.9
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "projects_delete",
|
||||
"commits": 10,
|
||||
"renders": 1912,
|
||||
"self_ms": 18.4,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(td))",
|
||||
110,
|
||||
3.2
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
137,
|
||||
1.3
|
||||
],
|
||||
[
|
||||
"ForwardRef(TouchRipple)",
|
||||
6,
|
||||
1.2
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(button))",
|
||||
45,
|
||||
1.1
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
126,
|
||||
0.9
|
||||
],
|
||||
[
|
||||
"ForwardRef(Autocomplete)",
|
||||
1,
|
||||
0.8
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "tasks_create",
|
||||
"commits": 8,
|
||||
"renders": 2282,
|
||||
"self_ms": 14.4,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
182,
|
||||
2.3
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(td))",
|
||||
114,
|
||||
1.6
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
164,
|
||||
1.4
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(tr))",
|
||||
19,
|
||||
0.8
|
||||
],
|
||||
[
|
||||
"ForwardRef(ButtonBase)",
|
||||
50,
|
||||
0.7
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(button))",
|
||||
50,
|
||||
0.6
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "tasks_confirm_mark",
|
||||
"commits": 9,
|
||||
"renders": 1903,
|
||||
"self_ms": 20.9,
|
||||
"top": [
|
||||
[
|
||||
"ForwardRef(Styled(td))",
|
||||
114,
|
||||
5.3
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(div))",
|
||||
142,
|
||||
2.2
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(Component))",
|
||||
147,
|
||||
2.0
|
||||
],
|
||||
[
|
||||
"MRT_TableBodyCell",
|
||||
108,
|
||||
1.1
|
||||
],
|
||||
[
|
||||
"ForwardRef(Styled(button))",
|
||||
46,
|
||||
1.1
|
||||
],
|
||||
[
|
||||
"ForwardRef(Tooltip)",
|
||||
36,
|
||||
1.0
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
25
perf/report-data/20261026-s1/analysis/modal-renders.md
Normal file
25
perf/report-data/20261026-s1/analysis/modal-renders.md
Normal file
@ -0,0 +1,25 @@
|
||||
# Рендеры React при открытии модалок: 20261026-s1 (modal_renders.jsonl, hotspots_summary.py --renders-only)
|
||||
|
||||
| модалка | коммитов | рендеров | self, мс | топ компонентов (рендеры/self мс) |
|
||||
|---|---|---|---|---|
|
||||
| sheet_select_vsp | 14 | 6684 | 30.9 | ForwardRef(Styled(td)) 473/7.6; ForwardRef(Styled(Component)) 392/2.4; ForwardRef(Styled(div)) 361/2.1; ForwardRef(Tooltip) 123/1.4; ForwardRef(Styled(button)) 131/1.3; MRT_TableBodyCellValue 384/1.0 |
|
||||
| sheet_select_vsp@big | 14 | 6632 | 31.0 | ForwardRef(Styled(td)) 472/8.2; ForwardRef(Styled(div)) 356/2.6; ForwardRef(Styled(Component)) 389/2; ForwardRef(Styled(button)) 130/1.5; ForwardRef(Tooltip) 122/1.5; ForwardRef(ButtonBase) 130/1.4 |
|
||||
| sheet_select_expense | 13 | 6841 | 34.0 | ForwardRef(Styled(td)) 539/10.7; MRT_Table 1/2.3; ForwardRef(Styled(Component)) 403/1.9; ForwardRef(Styled(div)) 336/1.7; ForwardRef(ButtonBase) 137/1.5; ForwardRef(Tooltip) 123/1.3 |
|
||||
| sheet_select_expense@big | 13 | 6841 | 32.6 | ForwardRef(Styled(td)) 539/8.5; MRT_Table 1/2.7; ForwardRef(Styled(div)) 336/2.1; ForwardRef(Styled(Component)) 403/1.7; MRT_TableBodyRow 24/1.6; ForwardRef(Styled(button)) 137/1.1 |
|
||||
| sheet_create_program | 11 | 6670 | 36.4 | ForwardRef(Styled(td)) 539/11.2; ForwardRef(Styled(div)) 314/2.9; ForwardRef(Styled(Component)) 381/2.6; MRT_Table 1/2.5; MRT_TableBodyRow 24/1.6; ForwardRef(Tooltip) 123/1.4 |
|
||||
| sheet_create_program@big | 11 | 6670 | 28.7 | ForwardRef(Styled(td)) 539/6.8; ForwardRef(Styled(Component)) 381/2.4; MRT_Table 1/2.1; MRT_TableBodyRow 24/1.9; ForwardRef(Styled(div)) 314/1.7; ForwardRef(Tooltip) 123/1.6 |
|
||||
| sheet_create_project | 11 | 6670 | 39.3 | ForwardRef(Styled(td)) 539/12.6; MRT_Table 1/2.6; ForwardRef(Styled(Component)) 381/2.5; MRT_TableBodyRow 24/1.8; ForwardRef(Tooltip) 123/1.8; ForwardRef(TableCell) 539/1.5 |
|
||||
| sheet_create_project@big | 11 | 6670 | 28.2 | ForwardRef(Styled(td)) 539/8.0; ForwardRef(Tooltip) 123/4.3; ForwardRef(Styled(Component)) 381/1.8; MRT_TableBodyRow 24/1.7; MRT_Table 1/1.6; MRT_TableBodyCell 480/0.9 |
|
||||
| sheet_columns_tree | 8 | 940 | 16.0 | ForwardRef(TreeItem) 24/4; ForwardRef(Styled(div)) 106/2.1; ForwardRef(SimpleTreeView) 2/2.0; ForwardRef(Styled(Component)) 82/1; Transition 30/0.7; ForwardRef(SwitchBase) 13/0.6 |
|
||||
| sheet_columns_tree@big | 8 | 745 | 14.5 | ForwardRef(TreeItem) 18/4.0; ForwardRef(SimpleTreeView) 2/2.2; ForwardRef(Styled(div)) 85/1.6; ForwardRef(Styled(Component)) 64/0.5; ForwardRef(Checkbox) 10/0.5; Insertion 230/0.5 |
|
||||
| task_stages | 8 | 1375 | 13.0 | ForwardRef(Styled(div)) 134/3.0; ForwardRef(Styled(td)) 131/1.1; ForwardRef(Chip) 24/1; ForwardRef(TouchRipple) 5/1; StagesTable 2/0.7; ForwardRef(Styled(span)) 131/0.7 |
|
||||
| task_stage_add | 10 | 1780 | 18.0 | ForwardRef(Styled(div)) 120/2.8; ForwardRef(Styled(td)) 125/1.2; ForwardRef(SelectInput) 6/1.2; CalendarInput 4/1.1; ForwardRef(Styled(Component)) 92/1; StageFormTheme 2/0.8 |
|
||||
| task_stage_edit | 12 | 2277 | 20.9 | ForwardRef(Styled(div)) 183/4.0; ForwardRef(Styled(Component)) 123/1.8; ForwardRef(SelectInput) 10/1.4; ForwardRef(Styled(span)) 129/1; CollapsibleTree 1/1; ForwardRef(Styled(input)) 31/0.8 |
|
||||
| project_stages | 8 | 416 | 9.1 | ForwardRef(Styled(div)) 45/1.4; ForwardRef(TouchRipple) 5/1.1; ForwardRef(Chip) 3/0.6; ForwardRef(ButtonBase) 5/0.6; StagesTable 2/0.5; ForwardRef(TableCell) 26/0.5 |
|
||||
| project_add_year | 6 | 194 | 3.7 | ForwardRef(TouchRipple) 5/0.8; ForwardRef(Styled(div)) 30/0.6; ForwardRef(Styled(Component)) 14/0.5; ForwardRef(ButtonBase) 7/0.4; ForwardRef(Styled(Ripple)) 3/0.2; Ripple 3/0.2 |
|
||||
| project_stage_delete | 11 | 366 | 6.1 | ForwardRef(Styled(div)) 23/0.8; Transition 6/0.8; ForwardRef(Styled(button)) 12/0.6; ForwardRef(ButtonBase) 12/0.6; ForwardRef(Styled(Component)) 26/0.5; ForwardRef(Styled(span)) 28/0.4 |
|
||||
| projects_create | 9 | 2624 | 22.8 | ForwardRef(Styled(td)) 110/4.0; ForwardRef(Styled(Component)) 194/2.2; ForwardRef(Styled(div)) 183/1.7; ForwardRef(TouchRipple) 5/1.2; ForwardRef(Styled(span)) 85/1; ForwardRef(Tooltip) 37/0.9 |
|
||||
| projects_edit | 15 | 3400 | 25.8 | ForwardRef(Styled(td)) 110/3.0; ForwardRef(Styled(Component)) 227/2.8; ForwardRef(Styled(div)) 257/1.8; ForwardRef(Styled(span)) 102/1; Insertion 1035/1.0; ForwardRef(Styled(input)) 67/0.9 |
|
||||
| projects_delete | 10 | 1912 | 18.4 | ForwardRef(Styled(td)) 110/3.2; ForwardRef(Styled(Component)) 137/1.3; ForwardRef(TouchRipple) 6/1.2; ForwardRef(Styled(button)) 45/1.1; ForwardRef(Styled(div)) 126/0.9; ForwardRef(Autocomplete) 1/0.8 |
|
||||
| tasks_create | 8 | 2282 | 14.4 | ForwardRef(Styled(Component)) 182/2.3; ForwardRef(Styled(td)) 114/1.6; ForwardRef(Styled(div)) 164/1.4; ForwardRef(Styled(tr)) 19/0.8; ForwardRef(ButtonBase) 50/0.7; ForwardRef(Styled(button)) 50/0.6 |
|
||||
| tasks_confirm_mark | 9 | 1903 | 20.9 | ForwardRef(Styled(td)) 114/5.3; ForwardRef(Styled(div)) 142/2.2; ForwardRef(Styled(Component)) 147/2.0; MRT_TableBodyCell 108/1.1; ForwardRef(Styled(button)) 46/1.1; ForwardRef(Tooltip) 36/1.0 |
|
||||
Loading…
x
Reference in New Issue
Block a user