Skip to content

Commit 89564d6

Browse files
committed
perf(timeline): mark some properties as non reactive (such as PIXI objects)
1 parent 0a7e819 commit 89564d6

File tree

3 files changed

+43
-11
lines changed

3 files changed

+43
-11
lines changed

packages/app-frontend/src/features/timeline/TimelineView.vue

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -478,17 +478,26 @@ export default defineComponent({
478478
479479
if (!event.layer.groupsOnly || (event.group?.firstEvent === event)) {
480480
eventContainer = new PIXI.Container()
481-
event.container = eventContainer
481+
Object.defineProperty(event, 'container', {
482+
value: eventContainer,
483+
writable: true,
484+
configurable: false,
485+
})
482486
layerContainer.addChild(eventContainer)
483487
}
484488
485489
// Group graphics
486490
if (event.group) {
487491
if (event.group.firstEvent === event) {
488492
const groupG = new PIXI.Graphics()
489-
event.groupG = groupG
493+
Object.defineProperty(event, 'groupG', {
494+
value: groupG,
495+
writable: true,
496+
configurable: false,
497+
})
490498
eventContainer.addChild(groupG)
491499
event.group.oldSize = null
500+
event.group.oldSelected = null
492501
drawEventGroup(event)
493502
} else if (event.group.lastEvent === event) {
494503
drawEventGroup(event.group.firstEvent)
@@ -500,7 +509,11 @@ export default defineComponent({
500509
// Graphics
501510
if (eventContainer) {
502511
const g = new PIXI.Graphics()
503-
event.g = g
512+
Object.defineProperty(event, 'g', {
513+
value: g,
514+
writable: true,
515+
configurable: false,
516+
})
504517
eventContainer.addChild(g)
505518
}
506519

packages/app-frontend/src/features/timeline/composable/events.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
import { resetTime } from './reset'
2020
import { takeScreenshot } from './screenshot'
2121
import { addGroupAroundPosition } from './layers'
22+
import { EventGroup } from '.'
2223

2324
const AUTOSCROLL_DURATION = 10000
2425

@@ -42,7 +43,6 @@ export function addEvent (appId: string, eventOptions: TimelineEvent, layer: Lay
4243
Object.defineProperty(event, key, {
4344
value: eventOptions[key],
4445
writable: true,
45-
enumerable: true,
4646
configurable: false,
4747
})
4848
}
@@ -64,13 +64,21 @@ export function addEvent (appId: string, eventOptions: TimelineEvent, layer: Lay
6464
let group = layer.groupsMap[event.groupId]
6565
if (!group) {
6666
group = layer.groupsMap[event.groupId] = {
67-
id: event.groupId,
6867
events: [],
6968
firstEvent: event,
7069
lastEvent: event,
71-
y: 0,
7270
duration: 0,
71+
} as EventGroup
72+
const descriptor = {
73+
writable: true,
74+
configurable: false,
7375
}
76+
Object.defineProperties(group, {
77+
id: { value: event.groupId, ...descriptor },
78+
y: { value: 0, ...descriptor },
79+
oldSize: { value: null, ...descriptor },
80+
oldSelected: { value: null, ...descriptor },
81+
})
7482
layer.groups.push(group)
7583
}
7684
if (layer.groupsOnly) {

packages/app-frontend/src/features/timeline/composable/layers.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,28 @@ import {
1818
import { useRouter } from '@front/util/router'
1919

2020
export function layerFactory (options: LayerFromBackend): Layer {
21-
return {
21+
const result = {} as Layer
22+
const nonReactiveOptions = {
2223
...options,
23-
events: [],
2424
eventsMap: {},
25-
groups: [],
2625
groupsMap: {},
26+
groupPositionCache: {},
27+
}
28+
for (const key in nonReactiveOptions) {
29+
Object.defineProperty(result, key, {
30+
value: nonReactiveOptions[key],
31+
writable: true,
32+
configurable: false,
33+
})
34+
}
35+
Object.assign(result, {
36+
events: [],
37+
groups: [],
2738
height: 1,
2839
lastInspectedEvent: null,
2940
loaded: false,
30-
groupPositionCache: {},
31-
}
41+
})
42+
return result
3243
}
3344

3445
export function getLayers (appId: string) {

0 commit comments

Comments
 (0)