- 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>
17 KiB
17 KiB
Heap snapshots: разница и retainers (heapdiff.py)
A = results/20261026-s1/artifacts/memory-cycle10.heapsnapshot, B = results/20261026-s1/artifacts/memory-cycle20.heapsnapshot, база = results/20261026-s1/artifacts/memory-cycle00.heapsnapshot
Self size всех узлов: a_self_bytes 23066796, b_self_bytes 27208391, a_nodes 364458, b_nodes 463302, base_self_bytes 12931501, base_nodes 210912
Новых выживших объектов в B (id нет в A): 173067, 6271836 байт self size.
Классы с наибольшим ростом self size (B - A)
| класс | Δ число | Δ байт | число A | число B | байт A | байт B |
|---|---|---|---|---|---|---|
| (native) blink::MediaQueryFeatureExpNode | 23161 | 1852880 | 23215 | 46376 | 1857200 | 3710080 |
| (native) blink::MediaQuery | 23161 | 741152 | 23237 | 46398 | 743584 | 1484736 |
| (native) blink::MediaQuerySet | 23161 | 555864 | 23238 | 46399 | 557712 | 1113576 |
| (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const | 23161 | 555864 | 23295 | 46456 | 559000 | 1114864 |
| (code) | 806 | 238664 | 69314 | 70120 | 6750428 | 6989092 |
| (native) DOMRectReadOnly | 456 | 25536 | 800 | 1256 | 44800 | 70336 |
| Object | 1121 | 24616 | 19311 | 20432 | 502232 | 526848 |
| (native) blink::NetworkResourcesData::ResourceData | 70 | 20160 | 89 | 159 | 25632 | 45792 |
| (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const | 0 | 16448 | 20 | 20 | 19664 | 36112 |
| (native) system | 405 | 14107 | 21520 | 21925 | 4430548 | 4444655 |
| (number) | 1048 | 12588 | 18925 | 19973 | 15816 | 28404 |
| (native) blink::XHRReplayData | 70 | 12320 | 73 | 143 | 12848 | 25168 |
| (native) PerformanceResourceTiming | 70 | 9520 | 88 | 158 | 11968 | 21488 |
| (native) LayoutShiftAttribution | 228 | 9120 | 400 | 628 | 16000 | 25120 |
| (string) | 1372 | 9112 | 47563 | 48935 | 1521288 | 1530400 |
| (native) blink::HashTrieNodeblink::CSSVariableData | 31 | 8432 | 155 | 186 | 42160 | 50592 |
| (native) LayoutShift | 54 | 8208 | 96 | 150 | 14592 | 22800 |
| (native) LargestContentfulPaint | 40 | 5440 | 44 | 84 | 5984 | 11424 |
| (array) (object elements) | 180 | 4440 | 3494 | 3674 | 154064 | 158504 |
| (native) InteractionContentfulPaint | 40 | 4160 | 40 | 80 | 4160 | 8320 |
Новые выжившие объекты B по классам
| класс | число | байт |
|---|---|---|
| (native) blink::MediaQueryFeatureExpNode | 23153 | 1852240 |
| (native) blink::MediaQuery | 23159 | 741088 |
| (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const | 23192 | 556512 |
| (native) blink::MediaQuerySet | 23155 | 555720 |
| (code) | 3077 | 530660 |
| Object | 10841 | 295704 |
| (string) | 24332 | 195224 |
| oW | 1272 | 127200 |
| (closure) (anonymous) | 3892 | 110868 |
| (object shape) system | 1335 | 76068 |
| (native) blink::HeapHashTableBacking<blink::HashTable<blink::ShapeCacheKey, | 3 | 74904 |
| (native) system | 1822 | 74008 |
| system | 2282 | 72660 |
| (array) (object properties) | 44 | 40672 |
| (native) blink::ComputedStyleBase::StyleSurroundData | 124 | 38688 |
| (array) (object elements) | 1586 | 34484 |
| (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const | 6 | 33312 |
| Array | 1927 | 30832 |
| (native) blink::ComputedStyleBase::StyleMiscInherited1Data | 128 | 26624 |
| (native) DOMRectReadOnly | 456 | 25536 |
Пути удержания новых объектов (кратчайший путь от корня, 6 ближайших шагов; объектов / байт)
- (native) blink::MediaQueryFeatureExpNode
- 1 / 80 B:
(native) blink::ConditionalExpNodeNested.[1] <- (native) blink::MediaQuery.[1] <- (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) MediaQueryList.[4] <- (native) blink::HeapVectorBacking<std::pair<cppgc::internal::BasicMember<const.[3] - 1 / 80 B:
(native) blink::MediaQuery.[1] <- (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[23756] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] - 1 / 80 B:
(native) blink::MediaQuery.[1] <- (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[28422] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] - 1 / 80 B:
(native) blink::MediaQuery.[1] <- (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[17109] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] - 1 / 80 B:
(native) blink::MediaQuery.[1] <- (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[43171] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24]
- 1 / 80 B:
- (native) blink::MediaQuery
- 1 / 32 B:
(native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[23756] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document - 1 / 32 B:
(native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[28422] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document - 1 / 32 B:
(native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[17109] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document - 1 / 32 B:
(native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[43171] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document - 1 / 32 B:
(native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[14406] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document
- 1 / 32 B:
- (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const
- 3 / 72 B:
(native) blink::CSSAnimationData.[3] <- (native) blink::ComputedStyleBase::StyleMisc7Data.[1] <- (native) blink::ComputedStyleBase::StyleMiscData.[10] <- (native) blink::ComputedStyle.[2] <- (native) <div.[6] <- (native) <input.[19] - 3 / 72 B:
(native) blink::CSSAnimationData.[5] <- (native) blink::ComputedStyleBase::StyleMisc7Data.[1] <- (native) blink::ComputedStyleBase::StyleMiscData.[10] <- (native) blink::ComputedStyle.[2] <- (native) <div.[6] <- (native) <input.[19] - 2 / 48 B:
(native) blink::MeasureCache.[1] <- (native) blink::LayoutTableCell.[3] <- (native) blink::LayoutFlexibleBox.[7] <- (native) blink::LayoutFlexibleBox.[8] <- (native) blink::PaintLayer.[1] <- (native) blink::PaintLayerScrollableArea.[5] - 2 / 48 B:
(native) blink::CSSAnimationData.[3] <- (native) blink::ComputedStyleBase::StyleMisc7Data.[1] <- (native) blink::ComputedStyleBase::StyleMiscData.[10] <- (native) blink::ComputedStyle.[2] <- (native) blink::LayoutText.[2] <- (native) Text.[4] - 2 / 48 B:
(native) blink::CSSAnimationData.[5] <- (native) blink::ComputedStyleBase::StyleMisc7Data.[1] <- (native) blink::ComputedStyleBase::StyleMiscData.[10] <- (native) blink::ComputedStyle.[2] <- (native) blink::LayoutText.[2] <- (native) Text.[4]
- 3 / 72 B:
- (native) blink::MediaQuerySet
- 1 / 24 B:
(native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[31856] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document <- (synthetic).2262 / DevTools console <- (synthetic).[10] - 1 / 24 B:
(native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[27581] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document <- (synthetic).2262 / DevTools console <- (synthetic).[10] - 1 / 24 B:
(native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[7177] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document <- (synthetic).2262 / DevTools console <- (synthetic).[10] - 1 / 24 B:
(native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[12211] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document <- (synthetic).2262 / DevTools console <- (synthetic).[10] - 1 / 24 B:
(native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[22806] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document <- (synthetic).2262 / DevTools console <- (synthetic).[10]
- 1 / 24 B:
- (code)
- 2 / 39136 B:
(code).instruction_stream <- (closure) (anonymous).code <- Object.render <- oW.elementType <- oW.return <- oW.return - 1 / 34272 B:
(code).instruction_stream <- (closure) (anonymous).code <- Object.type <- system.nY <- (closure) (anonymous).context <- oW.elementType - 3 / 12392 B:
(code).[0] <- (code).deoptimization_data <- (closure) (anonymous).code <- Object.render <- oW.elementType <- oW.return - 1 / 11232 B:
(code).instruction_stream <- (closure) (anonymous).code <- system.e <- (closure) (anonymous).context <- Object.render <- oW.elementType - 1 / 9396 B:
(code).[0] <- (code).deoptimization_data <- (closure) (anonymous).code <- Object.type <- system.nY <- (closure) (anonymous).context
- 2 / 39136 B:
- Object
- 1857 / 58272 B:
Object.next <- Object.next <- Object.next <- Object.next <- Object.next <- Object.next - 206 / 3296 B:
Object.memoizedState <- Object.next <- Object.next <- Object.next <- Object.next <- Object.next - 76 / 2432 B:
Object.next <- Object.next <- Object.next <- Object.next <- Object.next <- oW.memoizedState - 32 / 1024 B:
Object.lastEffect <- oW.updateQueue <- oW.alternate <- oW.child <- oW.return <- (native) <div.__reactFiber$wimqul213a - 31 / 992 B:
Object.next <- Object.next <- Object.next <- Object.next <- Object.lastEffect <- oW.updateQueue
- 1857 / 58272 B:
- (string)
- 116 / 74876 B:
(string).first <- Object.styles <- Object.serialized <- oW.pendingProps <- oW.child <- oW.return - 81 / 36680 B:
(string).first <- Object.styles <- Object.serialized <- oW.pendingProps <- oW.alternate <- oW.child - 29 / 4624 B:
(string).first <- Object.styles <- Object.serialized <- oW.pendingProps <- oW.child <- oW.child - 27 / 2028 B:
(string).first <- Object.className <- oW.pendingProps <- oW.alternate <- oW.return <- (native) <div.__reactFiber$wimqul213a - 18 / 1568 B:
(string).first <- Object.className <- oW.pendingProps <- oW.return <- oW.return <- oW.return
- 116 / 74876 B:
- oW
- 5 / 500 B:
oW.return <- oW.return <- (native) <td.__reactFiber$wimqul213a <- (native) blink::LayoutTableCell.[8] <- (native) blink::PaintLayer.[1] <- (native) blink::PaintLayerScrollableArea.[5] - 5 / 500 B:
oW.child <- oW.return <- (native) <td.__reactFiber$wimqul213a <- (native) blink::LayoutTableCell.[8] <- (native) blink::PaintLayer.[1] <- (native) blink::PaintLayerScrollableArea.[5] - 5 / 500 B:
oW.child <- oW.return <- oW.return <- oW.return <- (native) <button.__reactFiber$wimqul213a <- (native) SVGSVGElement.[17] - 5 / 500 B:
oW.alternate <- oW.return <- (native) <div.__reactFiber$wimqul213a <- (native) blink::LayoutFlexibleBox.[7] <- (native) blink::PaintLayer.[1] <- (native) blink::PaintLayerScrollableArea.[5] - 5 / 500 B:
oW.alternate <- oW.return <- (native) <div.__reactFiber$wimqul213a <- (native) <div.[11] <- (native) blink::LayoutFlexibleBox.[7] <- (native) blink::PaintLayer.[1]
- 5 / 500 B:
- (closure) (anonymous)
- 202 / 5656 B:
Object.create <- Object.next <- Object.next <- Object.next <- Object.next <- Object.next - 81 / 2308 B:
Array.[0] <- Object.memoizedState <- Object.next <- Object.next <- Object.next <- Object.next - 59 / 1888 B:
Object.create <- Object.lastEffect <- oW.updateQueue <- oW.alternate <- oW.child <- oW.return - 48 / 1536 B:
Object.create <- Object.lastEffect <- oW.updateQueue <- oW.child <- oW.return <- (native) <div.__reactFiber$wimqul213a - 38 / 1064 B:
system.e <- (closure) (anonymous).context <- Object.create <- Object.next <- Object.next <- Object.next
- 202 / 5656 B:
- (object shape) system
- 153 / 6120 B:
(object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer - 52 / 3232 B:
(object shape) system.transitions <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer - 1 / 2436 B:
(object shape) system.transitions <- (closure) Object.initial_map <- (native) system.object_function <- (synthetic).2236 / V8PerContextData::context_ <- (synthetic).[10] <- (synthetic).[1] - 48 / 1920 B:
(object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- Object.map - 1 / 1732 B:
(object shape) system.transitions <- (object shape) system.back_pointer <- Object.map <- Object.data <- (synthetic).102 / DevTools console <- (synthetic).[10]
- 153 / 6120 B:
- (native) blink::HeapHashTableBacking<blink::HashTable<blink::ShapeCacheKey,
- 1 / 36872 B:
(native) blink::NGShapeCache.[1] <- (native) blink::SimpleFontData.[2] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[7] <- (native) blink::FontGlobalContext.[4] <- (synthetic).T *blink::ThreadSpecific<cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy>>::operator cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy> *() [T = cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy>]@../../third_party/blink/renderer/platform/wtf/thread_specific.h:137 <- (synthetic).[29] - 1 / 36872 B:
(native) blink::NGShapeCache.[1] <- (native) blink::SimpleFontData.[2] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[8] <- (native) blink::FontGlobalContext.[4] <- (synthetic).T *blink::ThreadSpecific<cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy>>::operator cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy> *() [T = cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy>]@../../third_party/blink/renderer/platform/wtf/thread_specific.h:137 <- (synthetic).[29] - 1 / 1160 B:
(native) blink::NGShapeCache.[1] <- (native) blink::SimpleFontData.[2] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[2] <- (native) blink::FontGlobalContext.[4] <- (synthetic).T *blink::ThreadSpecific<cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy>>::operator cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy> *() [T = cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy>]@../../third_party/blink/renderer/platform/wtf/thread_specific.h:137 <- (synthetic).[29]
- 1 / 36872 B:
- (native) system
- 1 / 2916 B:
(object shape) system.dependent_code <- Object.map <- system.E <- (closure) (anonymous).context <- system.to <- system.previous - 1 / 2916 B:
(object shape) system.dependent_code <- Object.map <- oW.dependencies <- oW.return <- (native) <div.__reactFiber$wimqul213a <- (native) HTMLDocument.[11] - 62 / 2376 B:
(object shape) system.dependent_code <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer - 3 / 1356 B:
Object.properties <- system.e <- (closure) debug.context <- Object.debug <- system.r <- (closure) (anonymous).context - 1 / 864 B:
(object shape) system.dependent_code <- (native) system.js_array_packed_smi_elements_map <- (synthetic).2236 / V8PerContextData::context_ <- (synthetic).[10] <- (synthetic).[1]
- 1 / 2916 B:
Detached-узлы в B
- (native) <textarea: 1
- (native) <div: 1
- (native) : 1
- (native) : 1