-
Notifications
You must be signed in to change notification settings - Fork 8.3k
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
Conversation
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); |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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 :)
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 andDEFAULT_VIS_CONFIG
. The behaviour is not changed.Here's before and after: