- perf/analysis: разбор trace (timeline_breakdown), CPU-профилей с source maps (cpuprofile_top), heap snapshots (heapdiff), циклов памяти, сравнения масштабов, ручной EXPLAIN вложенных запросов (explain_manual), API против X-DB-Time-Ms (api_split), сводка горячих точек; тесты ядра в perf/tests/test_analysis.py - perf/e2e/scenarios/hotspots.spec.ts: CPU-профиль, рендеры React, мутации DOM после фильтра, рост CSS-правил по циклам (вне run-all) - prod-сборка с source maps: PERF_SOURCEMAP=1, perf/stand.sh web-sourcemap (:8082) - perf/report-data/20261026-s1, 20261026-s2 (summary, sql, analysis, explain-manual), t5-types (иллюстрация CPU 6x) - design.md: решения T10b без обсуждения Refs #202 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
29 lines
1.2 KiB
TypeScript
29 lines
1.2 KiB
TypeScript
import path from 'node:path';
|
||
import { mergeRsbuildConfig } from '../../web/node_modules/@rsbuild/core';
|
||
import baseConfig from '../../web/rsbuild.config';
|
||
|
||
const profiling = process.env.PERF_PROFILING === '1';
|
||
// prod-сборка с source maps (тот же минифицированный код + .map): для привязки CPU-профиля к file:line web/src (Task 10b)
|
||
const sourcemap = !profiling && process.env.PERF_SOURCEMAP === '1';
|
||
const root = path.resolve(__dirname, '..', '.build', profiling ? 'profiling' : sourcemap ? 'prod-sourcemap' : 'prod');
|
||
|
||
export default mergeRsbuildConfig(baseConfig, {
|
||
output: {
|
||
distPath: { root },
|
||
// профилирующая сборка: имена компонентов нужны для отчёта «что перерисовывается» (lib/reactProfile.ts)
|
||
...(profiling ? { minify: false } : {}),
|
||
...(sourcemap ? { sourceMap: { js: 'source-map' } } : {}),
|
||
},
|
||
resolve: profiling ? { alias: { 'react-dom$': 'react-dom/profiling' } } : {},
|
||
server: {
|
||
port: Number(process.env.PERF_WEB_PORT ?? 8080),
|
||
proxy: {
|
||
'/api': {
|
||
target: 'http://localhost:8000',
|
||
ws: true,
|
||
changeOrigin: true,
|
||
},
|
||
},
|
||
},
|
||
});
|