[Lens] Move from lodash.cloneDeep to native structuredClone#223207
[Lens] Move from lodash.cloneDeep to native structuredClone#223207dej611 merged 1 commit intoelastic:mainfrom
lodash.cloneDeep to native structuredClone#223207Conversation
💚 Build Succeeded
Metrics [docs]Async chunks
|
|
Pinging @elastic/kibana-visualizations (Team:Visualizations) |
lodash.cloneDeep to native structuredClone
|
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. |
|
Yes, there are small differences. |
markov00
left a comment
There was a problem hiding this comment.
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.
|
Starting backport for target branches: 8.19 https://github.com/elastic/kibana/actions/runs/15607479784 |
…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)
💚 All backports created successfully
Note: Successful backport PRs will be merged automatically after passing CI. Questions ?Please refer to the Backport tool documentation |
…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.
|
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. |
#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>
Summary
Noticed we use a lot
cloneDeepwhile 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.