Skip to content

Comments

[Lens] Move from lodash.cloneDeep to native structuredClone#223207

Merged
dej611 merged 1 commit intoelastic:mainfrom
dej611:fix/structuredClone-lens
Jun 12, 2025
Merged

[Lens] Move from lodash.cloneDeep to native structuredClone#223207
dej611 merged 1 commit intoelastic:mainfrom
dej611:fix/structuredClone-lens

Conversation

@dej611
Copy link
Contributor

@dej611 dej611 commented Jun 10, 2025

Summary

Noticed we use a lot cloneDeep while reviewing #222160 so I've revisited Lens to use the native structuredClone.

The obvious question is: is structuredClone fast enough? I've setup a (micro) benchmark to compare the two here

The two looks like they are within the same performance.

@dej611 dej611 added Team:Visualizations Team label for Lens, elastic-charts, Graph, legacy editors (TSVB, Visualize, Timelion) t// release_note:skip Skip the PR/issue when compiling release notes Feature:Lens backport:version Backport to applied version labels v9.1.0 v8.19.0 labels Jun 10, 2025
@elasticmachine
Copy link
Contributor

💚 Build Succeeded

Metrics [docs]

Async chunks

Total size of all lazy-loaded chunks that will be downloaded as the user navigates the app

id before after diff
lens 1.5MB 1.5MB -17.0B

@dej611 dej611 marked this pull request as ready for review June 10, 2025 12:54
@dej611 dej611 requested a review from a team as a code owner June 10, 2025 12:54
@elasticmachine
Copy link
Contributor

Pinging @elastic/kibana-visualizations (Team:Visualizations)

@nickofthyme nickofthyme changed the title [Lens] Move from lodash.cloneDeep to native structuredClone [Lens] Move from lodash.cloneDeep to native structuredClone Jun 10, 2025
@ppisljar
Copy link
Contributor

given than structuredClone is native implementation and cloneDeep is javascript it should be at least as fast if not faster, but there is a catch: cloneDeep seems to clone more, specifically it seems to copy custom object prototypes, which structuredClone will not, so we need to be a bit careful where we switch over.

@dej611
Copy link
Contributor Author

dej611 commented Jun 11, 2025

Yes, there are small differences.
I would argue that we should not expect that clone objects with functions/classes in general would work and provide ad-hoc solutions for that.

Copy link
Contributor

@markov00 markov00 left a comment

Choose a reason for hiding this comment

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

Looks a safe change. I've took a look at all the types of the cloned object and I can see only primitive and serializable objects, looks safe.

@dej611 dej611 merged commit be75dfd into elastic:main Jun 12, 2025
24 checks passed
@kibanamachine
Copy link
Contributor

Starting backport for target branches: 8.19

https://github.com/elastic/kibana/actions/runs/15607479784

kibanamachine pushed a commit to kibanamachine/kibana that referenced this pull request Jun 12, 2025
…tic#223207)

## Summary

Noticed we use a lot `cloneDeep` while reviewing elastic#222160 so I've
revisited Lens to use the native structuredClone.

The obvious question is: is structuredClone fast enough? I've setup a
(micro) benchmark to compare the two
[here](https://jsbenchmark.com/#eyJjYXNlcyI6W3siaWQiOiJZeGVGTlFuWHljX3pPaUdlVkM0M2kiLCJjb2RlIjoibG9kYXNoLmNsb25lRGVlcChEQVRBKSIsIm5hbWUiOiJsb2Rhc2guY2xvbmVEZWVwIiwiZGVwZW5kZW5jaWVzIjpbeyJ1cmwiOiJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xvZGFzaEA0LjE3LjIxLytlc20iLCJuYW1lIjoibG9kYXNoIiwiZXNtIjp0cnVlfV19LHsiaWQiOiI0aGR0SXQ4bVlianEyaENEQ1l3d0UiLCJjb2RlIjoic3RydWN0dXJlZENsb25lKERBVEEpIiwibmFtZSI6InN0cnVjdHVyZWRDbG9uZSIsImRlcGVuZGVuY2llcyI6W119XSwiY29uZmlnIjp7Im5hbWUiOiJCYXNpYyBleGFtcGxlIiwicGFyYWxsZWwiOnRydWUsImdsb2JhbFRlc3RDb25maWciOnsiZGVwZW5kZW5jaWVzIjpbXX0sImRhdGFDb2RlIjoicmV0dXJuIFtcbiAge1xuICAgIFwiX2lkXCI6IFwiNjg0ODA1NzIwN2FiYjE1OTM3N2VlYWJhXCIsXG4gICAgXCJpbmRleFwiOiAwLFxuICAgIFwiZ3VpZFwiOiBcIjVlMzUyZGY5LWMyNGEtNDRmYy1iZGU5LTNjNWIwNmZmOWMzZVwiLFxuICAgIFwiaXNBY3RpdmVcIjogZmFsc2UsXG4gICAgXCJiYWxhbmNlXCI6IFwiJDEsNjY0LjgwXCIsXG4gICAgXCJwaWN0dXJlXCI6IFwiaHR0cDovL3BsYWNlaG9sZC5pdC8zMngzMlwiLFxuICAgIFwiYWdlXCI6IDIxLFxuICAgIFwiZXllQ29sb3JcIjogXCJicm93blwiLFxuICAgIFwibmFtZVwiOiBcIkRlYW5uZSBNaXJhbmRhXCIsXG4gICAgXCJnZW5kZXJcIjogXCJmZW1hbGVcIixcbiAgICBcImNvbXBhbnlcIjogXCJEVU9GTEVYXCIsXG4gICAgXCJlbWFpbFwiOiBcImRlYW5uZW1pcmFuZGFAZHVvZmxleC5jb21cIixcbiAgICBcInBob25lXCI6IFwiKzEgKDkxNCkgNDc3LTIxODBcIixcbiAgICBcImFkZHJlc3NcIjogXCIyMTEgU2Fja2V0dCBTdHJlZXQsIEJpZGRsZSwgS2Fuc2FzLCA0MTc4XCIsXG4gICAgXCJhYm91dFwiOiBcIkV4IG1hZ25hIHNpbnQgYW5pbSBpbmNpZGlkdW50IG1pbmltIGR1aXMgY29uc2VjdGV0dXIgc3VudCBjb25zZWN0ZXR1ciBjdWxwYSBsYWJvcnVtIHVsbGFtY28uIExhYm9ydW0gbm9uIGVsaXQgZnVnaWF0IGNvbnNlY3RldHVyIG5pc2kgYXV0ZSBhbWV0LiBOdWxsYSBlYSB0ZW1wb3IgbGFib3JlIHZvbHVwdGF0ZSBlYS4gTWluaW0gbnVsbGEgY29tbW9kbyBkb2xvciBlaXVzbW9kIGlydXJlIHF1aSBldSBhZGlwaXNpY2luZyBzdW50IGFkIGVuaW0uIFNpbnQgb2NjYWVjYXQgcXVpcyBlbmltIG5vbiBlaXVzbW9kIGVzdCBkZXNlcnVudCByZXByZWhlbmRlcml0LiBDb21tb2RvIGN1cGlkYXRhdCBtaW5pbSBjdWxwYSB1bGxhbWNvIGRvIGN1cGlkYXRhdC4gQWQgdm9sdXB0YXRlIGlkIG1pbmltIG9mZmljaWEgZWxpdCBxdWkgYWxpcXVhIGNvbW1vZG8gdmVuaWFtLlxcclxcblwiLFxuICAgIFwicmVnaXN0ZXJlZFwiOiBcIjIwMTgtMDgtMTFUMTI6NTQ6MTYgLTAyOjAwXCIsXG4gICAgXCJsYXRpdHVkZVwiOiAtNjYuNzE2Mjg4LFxuICAgIFwibG9uZ2l0dWRlXCI6IC0zMS41MDA0NTYsXG4gICAgXCJ0YWdzXCI6IFtcbiAgICAgIFwiZXRcIixcbiAgICAgIFwiYW5pbVwiLFxuICAgICAgXCJkb2xvclwiLFxuICAgICAgXCJzaXRcIixcbiAgICAgIFwiZWxpdFwiLFxuICAgICAgXCJlc3NlXCIsXG4gICAgICBcImV1XCJcbiAgICBdLFxuICAgIFwiZnJpZW5kc1wiOiBbXG4gICAgICB7XG4gICAgICAgIFwiaWRcIjogMCxcbiAgICAgICAgXCJuYW1lXCI6IFwiTWVhZ2FuIFN1dHRvblwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgIFwibmFtZVwiOiBcIlRvbmkgU3VsbGl2YW5cIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJpZFwiOiAyLFxuICAgICAgICBcIm5hbWVcIjogXCJHZW9yZ2UgUGl0dG1hblwiXG4gICAgICB9XG4gICAgXSxcbiAgICBcImdyZWV0aW5nXCI6IFwiSGVsbG8sIERlYW5uZSBNaXJhbmRhISBZb3UgaGF2ZSA5IHVucmVhZCBtZXNzYWdlcy5cIixcbiAgICBcImZhdm9yaXRlRnJ1aXRcIjogXCJiYW5hbmFcIlxuICB9XG5dIn19)

The two looks like they are within the same performance.

(cherry picked from commit be75dfd)
@kibanamachine
Copy link
Contributor

💚 All backports created successfully

Status Branch Result
8.19

Note: Successful backport PRs will be merged automatically after passing CI.

Questions ?

Please refer to the Backport tool documentation

iblancof pushed a commit to iblancof/kibana that referenced this pull request Jun 16, 2025
…tic#223207)

## Summary

Noticed we use a lot `cloneDeep` while reviewing elastic#222160 so I've
revisited Lens to use the native structuredClone.

The obvious question is: is structuredClone fast enough? I've setup a
(micro) benchmark to compare the two
[here](https://jsbenchmark.com/#eyJjYXNlcyI6W3siaWQiOiJZeGVGTlFuWHljX3pPaUdlVkM0M2kiLCJjb2RlIjoibG9kYXNoLmNsb25lRGVlcChEQVRBKSIsIm5hbWUiOiJsb2Rhc2guY2xvbmVEZWVwIiwiZGVwZW5kZW5jaWVzIjpbeyJ1cmwiOiJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xvZGFzaEA0LjE3LjIxLytlc20iLCJuYW1lIjoibG9kYXNoIiwiZXNtIjp0cnVlfV19LHsiaWQiOiI0aGR0SXQ4bVlianEyaENEQ1l3d0UiLCJjb2RlIjoic3RydWN0dXJlZENsb25lKERBVEEpIiwibmFtZSI6InN0cnVjdHVyZWRDbG9uZSIsImRlcGVuZGVuY2llcyI6W119XSwiY29uZmlnIjp7Im5hbWUiOiJCYXNpYyBleGFtcGxlIiwicGFyYWxsZWwiOnRydWUsImdsb2JhbFRlc3RDb25maWciOnsiZGVwZW5kZW5jaWVzIjpbXX0sImRhdGFDb2RlIjoicmV0dXJuIFtcbiAge1xuICAgIFwiX2lkXCI6IFwiNjg0ODA1NzIwN2FiYjE1OTM3N2VlYWJhXCIsXG4gICAgXCJpbmRleFwiOiAwLFxuICAgIFwiZ3VpZFwiOiBcIjVlMzUyZGY5LWMyNGEtNDRmYy1iZGU5LTNjNWIwNmZmOWMzZVwiLFxuICAgIFwiaXNBY3RpdmVcIjogZmFsc2UsXG4gICAgXCJiYWxhbmNlXCI6IFwiJDEsNjY0LjgwXCIsXG4gICAgXCJwaWN0dXJlXCI6IFwiaHR0cDovL3BsYWNlaG9sZC5pdC8zMngzMlwiLFxuICAgIFwiYWdlXCI6IDIxLFxuICAgIFwiZXllQ29sb3JcIjogXCJicm93blwiLFxuICAgIFwibmFtZVwiOiBcIkRlYW5uZSBNaXJhbmRhXCIsXG4gICAgXCJnZW5kZXJcIjogXCJmZW1hbGVcIixcbiAgICBcImNvbXBhbnlcIjogXCJEVU9GTEVYXCIsXG4gICAgXCJlbWFpbFwiOiBcImRlYW5uZW1pcmFuZGFAZHVvZmxleC5jb21cIixcbiAgICBcInBob25lXCI6IFwiKzEgKDkxNCkgNDc3LTIxODBcIixcbiAgICBcImFkZHJlc3NcIjogXCIyMTEgU2Fja2V0dCBTdHJlZXQsIEJpZGRsZSwgS2Fuc2FzLCA0MTc4XCIsXG4gICAgXCJhYm91dFwiOiBcIkV4IG1hZ25hIHNpbnQgYW5pbSBpbmNpZGlkdW50IG1pbmltIGR1aXMgY29uc2VjdGV0dXIgc3VudCBjb25zZWN0ZXR1ciBjdWxwYSBsYWJvcnVtIHVsbGFtY28uIExhYm9ydW0gbm9uIGVsaXQgZnVnaWF0IGNvbnNlY3RldHVyIG5pc2kgYXV0ZSBhbWV0LiBOdWxsYSBlYSB0ZW1wb3IgbGFib3JlIHZvbHVwdGF0ZSBlYS4gTWluaW0gbnVsbGEgY29tbW9kbyBkb2xvciBlaXVzbW9kIGlydXJlIHF1aSBldSBhZGlwaXNpY2luZyBzdW50IGFkIGVuaW0uIFNpbnQgb2NjYWVjYXQgcXVpcyBlbmltIG5vbiBlaXVzbW9kIGVzdCBkZXNlcnVudCByZXByZWhlbmRlcml0LiBDb21tb2RvIGN1cGlkYXRhdCBtaW5pbSBjdWxwYSB1bGxhbWNvIGRvIGN1cGlkYXRhdC4gQWQgdm9sdXB0YXRlIGlkIG1pbmltIG9mZmljaWEgZWxpdCBxdWkgYWxpcXVhIGNvbW1vZG8gdmVuaWFtLlxcclxcblwiLFxuICAgIFwicmVnaXN0ZXJlZFwiOiBcIjIwMTgtMDgtMTFUMTI6NTQ6MTYgLTAyOjAwXCIsXG4gICAgXCJsYXRpdHVkZVwiOiAtNjYuNzE2Mjg4LFxuICAgIFwibG9uZ2l0dWRlXCI6IC0zMS41MDA0NTYsXG4gICAgXCJ0YWdzXCI6IFtcbiAgICAgIFwiZXRcIixcbiAgICAgIFwiYW5pbVwiLFxuICAgICAgXCJkb2xvclwiLFxuICAgICAgXCJzaXRcIixcbiAgICAgIFwiZWxpdFwiLFxuICAgICAgXCJlc3NlXCIsXG4gICAgICBcImV1XCJcbiAgICBdLFxuICAgIFwiZnJpZW5kc1wiOiBbXG4gICAgICB7XG4gICAgICAgIFwiaWRcIjogMCxcbiAgICAgICAgXCJuYW1lXCI6IFwiTWVhZ2FuIFN1dHRvblwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgIFwibmFtZVwiOiBcIlRvbmkgU3VsbGl2YW5cIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJpZFwiOiAyLFxuICAgICAgICBcIm5hbWVcIjogXCJHZW9yZ2UgUGl0dG1hblwiXG4gICAgICB9XG4gICAgXSxcbiAgICBcImdyZWV0aW5nXCI6IFwiSGVsbG8sIERlYW5uZSBNaXJhbmRhISBZb3UgaGF2ZSA5IHVucmVhZCBtZXNzYWdlcy5cIixcbiAgICBcImZhdm9yaXRlRnJ1aXRcIjogXCJiYW5hbmFcIlxuICB9XG5dIn19)

The two looks like they are within the same performance.
@kibanamachine kibanamachine added the backport missing Added to PRs automatically when the are determined to be missing a backport. label Jun 16, 2025
@kibanamachine
Copy link
Contributor

Looks like this PR has a backport PR but it still hasn't been merged. Please merge it ASAP to keep the branches relatively in sync.
cc: @dej611

kibanamachine added a commit that referenced this pull request Jun 16, 2025
#223207) (#223519)

# Backport

This will backport the following commits from `main` to `8.19`:
- [[Lens] Move from `lodash.cloneDeep` to native `structuredClone`
(#223207)](#223207)

<!--- Backport version: 9.6.6 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)

<!--BACKPORT [{"author":{"name":"Marco
Liberati","email":"dej611@users.noreply.github.com"},"sourceCommit":{"committedDate":"2025-06-12T09:59:20Z","message":"[Lens]
Move from `lodash.cloneDeep` to native `structuredClone` (#223207)\n\n##
Summary\n\nNoticed we use a lot `cloneDeep` while reviewing #222160 so
I've\nrevisited Lens to use the native structuredClone.\n\nThe obvious
question is: is structuredClone fast enough? I've setup a\n(micro)
benchmark to compare the
two\n[here](https://jsbenchmark.com/#eyJjYXNlcyI6W3siaWQiOiJZeGVGTlFuWHljX3pPaUdlVkM0M2kiLCJjb2RlIjoibG9kYXNoLmNsb25lRGVlcChEQVRBKSIsIm5hbWUiOiJsb2Rhc2guY2xvbmVEZWVwIiwiZGVwZW5kZW5jaWVzIjpbeyJ1cmwiOiJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xvZGFzaEA0LjE3LjIxLytlc20iLCJuYW1lIjoibG9kYXNoIiwiZXNtIjp0cnVlfV19LHsiaWQiOiI0aGR0SXQ4bVlianEyaENEQ1l3d0UiLCJjb2RlIjoic3RydWN0dXJlZENsb25lKERBVEEpIiwibmFtZSI6InN0cnVjdHVyZWRDbG9uZSIsImRlcGVuZGVuY2llcyI6W119XSwiY29uZmlnIjp7Im5hbWUiOiJCYXNpYyBleGFtcGxlIiwicGFyYWxsZWwiOnRydWUsImdsb2JhbFRlc3RDb25maWciOnsiZGVwZW5kZW5jaWVzIjpbXX0sImRhdGFDb2RlIjoicmV0dXJuIFtcbiAge1xuICAgIFwiX2lkXCI6IFwiNjg0ODA1NzIwN2FiYjE1OTM3N2VlYWJhXCIsXG4gICAgXCJpbmRleFwiOiAwLFxuICAgIFwiZ3VpZFwiOiBcIjVlMzUyZGY5LWMyNGEtNDRmYy1iZGU5LTNjNWIwNmZmOWMzZVwiLFxuICAgIFwiaXNBY3RpdmVcIjogZmFsc2UsXG4gICAgXCJiYWxhbmNlXCI6IFwiJDEsNjY0LjgwXCIsXG4gICAgXCJwaWN0dXJlXCI6IFwiaHR0cDovL3BsYWNlaG9sZC5pdC8zMngzMlwiLFxuICAgIFwiYWdlXCI6IDIxLFxuICAgIFwiZXllQ29sb3JcIjogXCJicm93blwiLFxuICAgIFwibmFtZVwiOiBcIkRlYW5uZSBNaXJhbmRhXCIsXG4gICAgXCJnZW5kZXJcIjogXCJmZW1hbGVcIixcbiAgICBcImNvbXBhbnlcIjogXCJEVU9GTEVYXCIsXG4gICAgXCJlbWFpbFwiOiBcImRlYW5uZW1pcmFuZGFAZHVvZmxleC5jb21cIixcbiAgICBcInBob25lXCI6IFwiKzEgKDkxNCkgNDc3LTIxODBcIixcbiAgICBcImFkZHJlc3NcIjogXCIyMTEgU2Fja2V0dCBTdHJlZXQsIEJpZGRsZSwgS2Fuc2FzLCA0MTc4XCIsXG4gICAgXCJhYm91dFwiOiBcIkV4IG1hZ25hIHNpbnQgYW5pbSBpbmNpZGlkdW50IG1pbmltIGR1aXMgY29uc2VjdGV0dXIgc3VudCBjb25zZWN0ZXR1ciBjdWxwYSBsYWJvcnVtIHVsbGFtY28uIExhYm9ydW0gbm9uIGVsaXQgZnVnaWF0IGNvbnNlY3RldHVyIG5pc2kgYXV0ZSBhbWV0LiBOdWxsYSBlYSB0ZW1wb3IgbGFib3JlIHZvbHVwdGF0ZSBlYS4gTWluaW0gbnVsbGEgY29tbW9kbyBkb2xvciBlaXVzbW9kIGlydXJlIHF1aSBldSBhZGlwaXNpY2luZyBzdW50IGFkIGVuaW0uIFNpbnQgb2NjYWVjYXQgcXVpcyBlbmltIG5vbiBlaXVzbW9kIGVzdCBkZXNlcnVudCByZXByZWhlbmRlcml0LiBDb21tb2RvIGN1cGlkYXRhdCBtaW5pbSBjdWxwYSB1bGxhbWNvIGRvIGN1cGlkYXRhdC4gQWQgdm9sdXB0YXRlIGlkIG1pbmltIG9mZmljaWEgZWxpdCBxdWkgYWxpcXVhIGNvbW1vZG8gdmVuaWFtLlxcclxcblwiLFxuICAgIFwicmVnaXN0ZXJlZFwiOiBcIjIwMTgtMDgtMTFUMTI6NTQ6MTYgLTAyOjAwXCIsXG4gICAgXCJsYXRpdHVkZVwiOiAtNjYuNzE2Mjg4LFxuICAgIFwibG9uZ2l0dWRlXCI6IC0zMS41MDA0NTYsXG4gICAgXCJ0YWdzXCI6IFtcbiAgICAgIFwiZXRcIixcbiAgICAgIFwiYW5pbVwiLFxuICAgICAgXCJkb2xvclwiLFxuICAgICAgXCJzaXRcIixcbiAgICAgIFwiZWxpdFwiLFxuICAgICAgXCJlc3NlXCIsXG4gICAgICBcImV1XCJcbiAgICBdLFxuICAgIFwiZnJpZW5kc1wiOiBbXG4gICAgICB7XG4gICAgICAgIFwiaWRcIjogMCxcbiAgICAgICAgXCJuYW1lXCI6IFwiTWVhZ2FuIFN1dHRvblwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgIFwibmFtZVwiOiBcIlRvbmkgU3VsbGl2YW5cIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJpZFwiOiAyLFxuICAgICAgICBcIm5hbWVcIjogXCJHZW9yZ2UgUGl0dG1hblwiXG4gICAgICB9XG4gICAgXSxcbiAgICBcImdyZWV0aW5nXCI6IFwiSGVsbG8sIERlYW5uZSBNaXJhbmRhISBZb3UgaGF2ZSA5IHVucmVhZCBtZXNzYWdlcy5cIixcbiAgICBcImZhdm9yaXRlRnJ1aXRcIjogXCJiYW5hbmFcIlxuICB9XG5dIn19)\n\nThe
two looks like they are within the same
performance.","sha":"be75dfd3fb1364899afe051013642edfa02acd0c","branchLabelMapping":{"^v9.1.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["Team:Visualizations","release_note:skip","Feature:Lens","backport:version","v9.1.0","v8.19.0"],"title":"[Lens]
Move from `lodash.cloneDeep` to native
`structuredClone`","number":223207,"url":"https://github.com/elastic/kibana/pull/223207","mergeCommit":{"message":"[Lens]
Move from `lodash.cloneDeep` to native `structuredClone` (#223207)\n\n##
Summary\n\nNoticed we use a lot `cloneDeep` while reviewing #222160 so
I've\nrevisited Lens to use the native structuredClone.\n\nThe obvious
question is: is structuredClone fast enough? I've setup a\n(micro)
benchmark to compare the
two\n[here](https://jsbenchmark.com/#eyJjYXNlcyI6W3siaWQiOiJZeGVGTlFuWHljX3pPaUdlVkM0M2kiLCJjb2RlIjoibG9kYXNoLmNsb25lRGVlcChEQVRBKSIsIm5hbWUiOiJsb2Rhc2guY2xvbmVEZWVwIiwiZGVwZW5kZW5jaWVzIjpbeyJ1cmwiOiJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xvZGFzaEA0LjE3LjIxLytlc20iLCJuYW1lIjoibG9kYXNoIiwiZXNtIjp0cnVlfV19LHsiaWQiOiI0aGR0SXQ4bVlianEyaENEQ1l3d0UiLCJjb2RlIjoic3RydWN0dXJlZENsb25lKERBVEEpIiwibmFtZSI6InN0cnVjdHVyZWRDbG9uZSIsImRlcGVuZGVuY2llcyI6W119XSwiY29uZmlnIjp7Im5hbWUiOiJCYXNpYyBleGFtcGxlIiwicGFyYWxsZWwiOnRydWUsImdsb2JhbFRlc3RDb25maWciOnsiZGVwZW5kZW5jaWVzIjpbXX0sImRhdGFDb2RlIjoicmV0dXJuIFtcbiAge1xuICAgIFwiX2lkXCI6IFwiNjg0ODA1NzIwN2FiYjE1OTM3N2VlYWJhXCIsXG4gICAgXCJpbmRleFwiOiAwLFxuICAgIFwiZ3VpZFwiOiBcIjVlMzUyZGY5LWMyNGEtNDRmYy1iZGU5LTNjNWIwNmZmOWMzZVwiLFxuICAgIFwiaXNBY3RpdmVcIjogZmFsc2UsXG4gICAgXCJiYWxhbmNlXCI6IFwiJDEsNjY0LjgwXCIsXG4gICAgXCJwaWN0dXJlXCI6IFwiaHR0cDovL3BsYWNlaG9sZC5pdC8zMngzMlwiLFxuICAgIFwiYWdlXCI6IDIxLFxuICAgIFwiZXllQ29sb3JcIjogXCJicm93blwiLFxuICAgIFwibmFtZVwiOiBcIkRlYW5uZSBNaXJhbmRhXCIsXG4gICAgXCJnZW5kZXJcIjogXCJmZW1hbGVcIixcbiAgICBcImNvbXBhbnlcIjogXCJEVU9GTEVYXCIsXG4gICAgXCJlbWFpbFwiOiBcImRlYW5uZW1pcmFuZGFAZHVvZmxleC5jb21cIixcbiAgICBcInBob25lXCI6IFwiKzEgKDkxNCkgNDc3LTIxODBcIixcbiAgICBcImFkZHJlc3NcIjogXCIyMTEgU2Fja2V0dCBTdHJlZXQsIEJpZGRsZSwgS2Fuc2FzLCA0MTc4XCIsXG4gICAgXCJhYm91dFwiOiBcIkV4IG1hZ25hIHNpbnQgYW5pbSBpbmNpZGlkdW50IG1pbmltIGR1aXMgY29uc2VjdGV0dXIgc3VudCBjb25zZWN0ZXR1ciBjdWxwYSBsYWJvcnVtIHVsbGFtY28uIExhYm9ydW0gbm9uIGVsaXQgZnVnaWF0IGNvbnNlY3RldHVyIG5pc2kgYXV0ZSBhbWV0LiBOdWxsYSBlYSB0ZW1wb3IgbGFib3JlIHZvbHVwdGF0ZSBlYS4gTWluaW0gbnVsbGEgY29tbW9kbyBkb2xvciBlaXVzbW9kIGlydXJlIHF1aSBldSBhZGlwaXNpY2luZyBzdW50IGFkIGVuaW0uIFNpbnQgb2NjYWVjYXQgcXVpcyBlbmltIG5vbiBlaXVzbW9kIGVzdCBkZXNlcnVudCByZXByZWhlbmRlcml0LiBDb21tb2RvIGN1cGlkYXRhdCBtaW5pbSBjdWxwYSB1bGxhbWNvIGRvIGN1cGlkYXRhdC4gQWQgdm9sdXB0YXRlIGlkIG1pbmltIG9mZmljaWEgZWxpdCBxdWkgYWxpcXVhIGNvbW1vZG8gdmVuaWFtLlxcclxcblwiLFxuICAgIFwicmVnaXN0ZXJlZFwiOiBcIjIwMTgtMDgtMTFUMTI6NTQ6MTYgLTAyOjAwXCIsXG4gICAgXCJsYXRpdHVkZVwiOiAtNjYuNzE2Mjg4LFxuICAgIFwibG9uZ2l0dWRlXCI6IC0zMS41MDA0NTYsXG4gICAgXCJ0YWdzXCI6IFtcbiAgICAgIFwiZXRcIixcbiAgICAgIFwiYW5pbVwiLFxuICAgICAgXCJkb2xvclwiLFxuICAgICAgXCJzaXRcIixcbiAgICAgIFwiZWxpdFwiLFxuICAgICAgXCJlc3NlXCIsXG4gICAgICBcImV1XCJcbiAgICBdLFxuICAgIFwiZnJpZW5kc1wiOiBbXG4gICAgICB7XG4gICAgICAgIFwiaWRcIjogMCxcbiAgICAgICAgXCJuYW1lXCI6IFwiTWVhZ2FuIFN1dHRvblwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgIFwibmFtZVwiOiBcIlRvbmkgU3VsbGl2YW5cIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJpZFwiOiAyLFxuICAgICAgICBcIm5hbWVcIjogXCJHZW9yZ2UgUGl0dG1hblwiXG4gICAgICB9XG4gICAgXSxcbiAgICBcImdyZWV0aW5nXCI6IFwiSGVsbG8sIERlYW5uZSBNaXJhbmRhISBZb3UgaGF2ZSA5IHVucmVhZCBtZXNzYWdlcy5cIixcbiAgICBcImZhdm9yaXRlRnJ1aXRcIjogXCJiYW5hbmFcIlxuICB9XG5dIn19)\n\nThe
two looks like they are within the same
performance.","sha":"be75dfd3fb1364899afe051013642edfa02acd0c"}},"sourceBranch":"main","suggestedTargetBranches":["8.19"],"targetPullRequestStates":[{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/223207","number":223207,"mergeCommit":{"message":"[Lens]
Move from `lodash.cloneDeep` to native `structuredClone` (#223207)\n\n##
Summary\n\nNoticed we use a lot `cloneDeep` while reviewing #222160 so
I've\nrevisited Lens to use the native structuredClone.\n\nThe obvious
question is: is structuredClone fast enough? I've setup a\n(micro)
benchmark to compare the
two\n[here](https://jsbenchmark.com/#eyJjYXNlcyI6W3siaWQiOiJZeGVGTlFuWHljX3pPaUdlVkM0M2kiLCJjb2RlIjoibG9kYXNoLmNsb25lRGVlcChEQVRBKSIsIm5hbWUiOiJsb2Rhc2guY2xvbmVEZWVwIiwiZGVwZW5kZW5jaWVzIjpbeyJ1cmwiOiJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xvZGFzaEA0LjE3LjIxLytlc20iLCJuYW1lIjoibG9kYXNoIiwiZXNtIjp0cnVlfV19LHsiaWQiOiI0aGR0SXQ4bVlianEyaENEQ1l3d0UiLCJjb2RlIjoic3RydWN0dXJlZENsb25lKERBVEEpIiwibmFtZSI6InN0cnVjdHVyZWRDbG9uZSIsImRlcGVuZGVuY2llcyI6W119XSwiY29uZmlnIjp7Im5hbWUiOiJCYXNpYyBleGFtcGxlIiwicGFyYWxsZWwiOnRydWUsImdsb2JhbFRlc3RDb25maWciOnsiZGVwZW5kZW5jaWVzIjpbXX0sImRhdGFDb2RlIjoicmV0dXJuIFtcbiAge1xuICAgIFwiX2lkXCI6IFwiNjg0ODA1NzIwN2FiYjE1OTM3N2VlYWJhXCIsXG4gICAgXCJpbmRleFwiOiAwLFxuICAgIFwiZ3VpZFwiOiBcIjVlMzUyZGY5LWMyNGEtNDRmYy1iZGU5LTNjNWIwNmZmOWMzZVwiLFxuICAgIFwiaXNBY3RpdmVcIjogZmFsc2UsXG4gICAgXCJiYWxhbmNlXCI6IFwiJDEsNjY0LjgwXCIsXG4gICAgXCJwaWN0dXJlXCI6IFwiaHR0cDovL3BsYWNlaG9sZC5pdC8zMngzMlwiLFxuICAgIFwiYWdlXCI6IDIxLFxuICAgIFwiZXllQ29sb3JcIjogXCJicm93blwiLFxuICAgIFwibmFtZVwiOiBcIkRlYW5uZSBNaXJhbmRhXCIsXG4gICAgXCJnZW5kZXJcIjogXCJmZW1hbGVcIixcbiAgICBcImNvbXBhbnlcIjogXCJEVU9GTEVYXCIsXG4gICAgXCJlbWFpbFwiOiBcImRlYW5uZW1pcmFuZGFAZHVvZmxleC5jb21cIixcbiAgICBcInBob25lXCI6IFwiKzEgKDkxNCkgNDc3LTIxODBcIixcbiAgICBcImFkZHJlc3NcIjogXCIyMTEgU2Fja2V0dCBTdHJlZXQsIEJpZGRsZSwgS2Fuc2FzLCA0MTc4XCIsXG4gICAgXCJhYm91dFwiOiBcIkV4IG1hZ25hIHNpbnQgYW5pbSBpbmNpZGlkdW50IG1pbmltIGR1aXMgY29uc2VjdGV0dXIgc3VudCBjb25zZWN0ZXR1ciBjdWxwYSBsYWJvcnVtIHVsbGFtY28uIExhYm9ydW0gbm9uIGVsaXQgZnVnaWF0IGNvbnNlY3RldHVyIG5pc2kgYXV0ZSBhbWV0LiBOdWxsYSBlYSB0ZW1wb3IgbGFib3JlIHZvbHVwdGF0ZSBlYS4gTWluaW0gbnVsbGEgY29tbW9kbyBkb2xvciBlaXVzbW9kIGlydXJlIHF1aSBldSBhZGlwaXNpY2luZyBzdW50IGFkIGVuaW0uIFNpbnQgb2NjYWVjYXQgcXVpcyBlbmltIG5vbiBlaXVzbW9kIGVzdCBkZXNlcnVudCByZXByZWhlbmRlcml0LiBDb21tb2RvIGN1cGlkYXRhdCBtaW5pbSBjdWxwYSB1bGxhbWNvIGRvIGN1cGlkYXRhdC4gQWQgdm9sdXB0YXRlIGlkIG1pbmltIG9mZmljaWEgZWxpdCBxdWkgYWxpcXVhIGNvbW1vZG8gdmVuaWFtLlxcclxcblwiLFxuICAgIFwicmVnaXN0ZXJlZFwiOiBcIjIwMTgtMDgtMTFUMTI6NTQ6MTYgLTAyOjAwXCIsXG4gICAgXCJsYXRpdHVkZVwiOiAtNjYuNzE2Mjg4LFxuICAgIFwibG9uZ2l0dWRlXCI6IC0zMS41MDA0NTYsXG4gICAgXCJ0YWdzXCI6IFtcbiAgICAgIFwiZXRcIixcbiAgICAgIFwiYW5pbVwiLFxuICAgICAgXCJkb2xvclwiLFxuICAgICAgXCJzaXRcIixcbiAgICAgIFwiZWxpdFwiLFxuICAgICAgXCJlc3NlXCIsXG4gICAgICBcImV1XCJcbiAgICBdLFxuICAgIFwiZnJpZW5kc1wiOiBbXG4gICAgICB7XG4gICAgICAgIFwiaWRcIjogMCxcbiAgICAgICAgXCJuYW1lXCI6IFwiTWVhZ2FuIFN1dHRvblwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgIFwibmFtZVwiOiBcIlRvbmkgU3VsbGl2YW5cIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJpZFwiOiAyLFxuICAgICAgICBcIm5hbWVcIjogXCJHZW9yZ2UgUGl0dG1hblwiXG4gICAgICB9XG4gICAgXSxcbiAgICBcImdyZWV0aW5nXCI6IFwiSGVsbG8sIERlYW5uZSBNaXJhbmRhISBZb3UgaGF2ZSA5IHVucmVhZCBtZXNzYWdlcy5cIixcbiAgICBcImZhdm9yaXRlRnJ1aXRcIjogXCJiYW5hbmFcIlxuICB9XG5dIn19)\n\nThe
two looks like they are within the same
performance.","sha":"be75dfd3fb1364899afe051013642edfa02acd0c"}},{"branch":"8.19","label":"v8.19.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"}]}]
BACKPORT-->

Co-authored-by: Marco Liberati <dej611@users.noreply.github.com>
@kibanamachine kibanamachine removed the backport missing Added to PRs automatically when the are determined to be missing a backport. label Jun 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport:version Backport to applied version labels Feature:Lens release_note:skip Skip the PR/issue when compiling release notes Team:Visualizations Team label for Lens, elastic-charts, Graph, legacy editors (TSVB, Visualize, Timelion) t// v8.19.0 v9.1.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants