mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Dashboards: Fixes performance issue expanding a row (#95311)
* DashboardScene: Optimize change detection * Remove arg * remove console log
This commit is contained in:
parent
5fc07abef1
commit
3523289e98
@ -1,3 +1,4 @@
|
|||||||
|
import { debounce } from 'lodash';
|
||||||
import { Unsubscribable } from 'rxjs';
|
import { Unsubscribable } from 'rxjs';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@ -120,12 +121,6 @@ export class DashboardSceneChangeTracker {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private onStateChanged(event: SceneObjectStateChangedEvent) {
|
|
||||||
if (DashboardSceneChangeTracker.isUpdatingPersistedState(event)) {
|
|
||||||
this.detectSaveModelChanges();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private detectSaveModelChanges() {
|
private detectSaveModelChanges() {
|
||||||
const changedDashboard = transformSceneToSaveModel(this._dashboard);
|
const changedDashboard = transformSceneToSaveModel(this._dashboard);
|
||||||
const initialDashboard = this._dashboard.getInitialSaveModel();
|
const initialDashboard = this._dashboard.getInitialSaveModel();
|
||||||
@ -165,13 +160,20 @@ export class DashboardSceneChangeTracker {
|
|||||||
if (!this._changesWorker) {
|
if (!this._changesWorker) {
|
||||||
this.init();
|
this.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
this._changesWorker!.onmessage = (e: MessageEvent<DashboardChangeInfo>) => {
|
this._changesWorker!.onmessage = (e: MessageEvent<DashboardChangeInfo>) => {
|
||||||
this.updateIsDirty(e.data);
|
this.updateIsDirty(e.data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const performSaveModelDiff = getChangeTrackerDebouncer(this.detectSaveModelChanges.bind(this));
|
||||||
|
|
||||||
this._changeTrackerSub = this._dashboard.subscribeToEvent(
|
this._changeTrackerSub = this._dashboard.subscribeToEvent(
|
||||||
SceneObjectStateChangedEvent,
|
SceneObjectStateChangedEvent,
|
||||||
this.onStateChanged.bind(this)
|
(event: SceneObjectStateChangedEvent) => {
|
||||||
|
if (DashboardSceneChangeTracker.isUpdatingPersistedState(event)) {
|
||||||
|
performSaveModelDiff();
|
||||||
|
}
|
||||||
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,3 +187,14 @@ export class DashboardSceneChangeTracker {
|
|||||||
this._changesWorker = undefined;
|
this._changesWorker = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The debouncer makes unit tests slower and more complex so turning it off for unit tests
|
||||||
|
*/
|
||||||
|
function getChangeTrackerDebouncer(fn: () => void) {
|
||||||
|
if (process.env.NODE_ENV === 'test') {
|
||||||
|
return fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
return debounce(fn, 250);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user