Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Visualize] fix performance degradation after lodash@4 upgrade #75850

Merged
merged 1 commit into from
Aug 25, 2020

Conversation

mbondyra
Copy link
Contributor

@mbondyra mbondyra commented Aug 25, 2020

Summary

After merging lodash 4, there was a significant performance degradation for visualize charts with many buckets.

Digging a bit deeper, I noticed that implementation of lodash defaultsDeep changed and causes issues when merging three objects (for area chart: 72 hours timepicker configured with y - count, x - date histogram on auto interval and split series with 5 buckets it increased from 0.7 ms to 400ms!).

A simple solution is to copy typeDefaults object and then run a function on a copy and DEFAULT_VIS_CONFIG. The behaviour is not changed.

Here's before and after:

image
image

@mbondyra mbondyra requested a review from a team August 25, 2020 08:53
@mbondyra mbondyra added release_note:fix Team:Visualizations Visualization editors, elastic-charts and infrastructure v7.10.0 v7.9.1 v8.0.0 labels Aug 25, 2020
@elasticmachine
Copy link
Contributor

Pinging @elastic/kibana-app (Team:KibanaApp)

@@ -41,7 +41,7 @@ export class VisConfig {

const visType = visTypes[visConfigArgs.type];
const typeDefaults = visType(visConfigArgs, this.data);
this._values = _.defaultsDeep({}, typeDefaults, DEFAULT_VIS_CONFIG);
this._values = _.defaultsDeep({ ...typeDefaults }, DEFAULT_VIS_CONFIG);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought we were going to add a special case to keep style parameters?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @majagrubic, it made sense when we wanted to change it for

this._values = {
... DEFAULT_VIS_CONFIG
...typeDefaults,
style:{
... DEFAULT_VIS_CONFIG.style
...typeDefaults.style,
}
}

but as I found a way to use defaultsDeep without perf degradation (not using 3 params but just two) the lodash function will do the above for free :)

@mbondyra mbondyra requested review from majagrubic and a team August 25, 2020 09:09
@kibanamachine
Copy link
Contributor

💚 Build Succeeded

Build metrics

page load bundle size

id value diff baseline
visTypeVislib 1.3MB +1.0KB 1.3MB

To update your PR or re-run it, just comment with:
@elasticmachine merge upstream

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
release_note:fix Team:Visualizations Visualization editors, elastic-charts and infrastructure v7.9.1 v7.10.0 v8.0.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants