[9.0] [Space time] extending Scout with perfTracker fixture (#212397)#215016
Merged
dmlemeshko merged 3 commits intoelastic:9.0from Mar 19, 2025
Merged
[9.0] [Space time] extending Scout with perfTracker fixture (#212397)#215016dmlemeshko merged 3 commits intoelastic:9.0from
dmlemeshko merged 3 commits intoelastic:9.0from
Conversation
## Summary On-Week project "Client-side performance insights with Playwright & Lighthouse" revisiting old PR elastic#66224 This PR extends Scout with `perfTracker` fixture designed to analyze JavaScript bundle performance and page-level performance metrics in Kibana by leveraging Chrome DevTools Protocol (CDP). It intercepts network requests, filters static bundles, and computes bundle size statistics per page load. Additionally, it collects CDP Performance Domain Metrics, allowing in-depth analysis of rendering and script execution times. [README](https://github.com/elastic/kibana/blob/c013c39b7ed92248b94716d953ad692e9328a08d/src/platform/packages/shared/kbn-scout/src/playwright/fixtures/test/performance/README.md) file with more details and examples was added Output example for `/app/discover` (shorten, just to share the idea): ``` { "url": "http://localhost:5620/app/discover#/", "bundleCount": 87, "totalSize": 3133420, "pluginCount": 9, "plugins": [ { "name": "aiops", "bundlesCount": 2, "totalSize": 5982, "bundles": [ { "name": "aiops.chunk.1.js", "transferredSize": 2013 }, ... ] }, { "name": "discover", "bundlesCount": 17, "totalSize": 631605, "bundles": [ { "name": "discover.chunk.1.js", "transferredSize": 41915 }, ... ] }, { "name": "eventAnnotation", "bundlesCount": 1, "totalSize": 8652, "bundles": [ { "name": "eventAnnotation.chunk.1.js", "transferredSize": 8652 } ] }, { "name": "expressionXY", "bundlesCount": 5, "totalSize": 203127, "bundles": [ { "name": "expressionXY.chunk.2.js", "transferredSize": 5328 }, ... ] }, ] } ``` You can create a Scout UI test and start bundle tracker whenever you want to compute collected stats when all loading is done. Designed as test, it allows you to have individual validations for plugins, total bundle size, individual plugin size, etc. ``` // Ensure all JS bundles are loaded await perfTracker.waitForJsLoad(cdp); // Collect and validate stats const stats = perfTracker.collectJsBundleStats(currentUrl); expect( stats.totalSize, `Total bundles size loaded on page should not exceed 3.0 MB` ).toBeLessThan(3 * 1024 * 1024); expect(stats.bundleCount, { message: `Total bundle chunks count loaded on page should not exceed 100`, }).toBeLessThan(100); expect( stats.plugins.map((p) => p.name), { message: 'Unexpected plugins were loaded on page' } ).toStrictEqual([ 'aiops', 'discover', 'eventAnnotation', 'expressionXY', 'kbn-ui-shared-deps-npm', 'lens', 'maps', 'unifiedHistogram', 'unifiedSearch', ]); // Validate individual plugin bundle sizes expect(stats.plugins.find((p) => p.name === 'discover')?.totalSize, { message: `Total 'discover' bundles size should not exceed 625 KB`, }).toBeLessThan(625 * 1024); ``` Full test example: https://github.com/elastic/kibana/blob/7b18e85541d00c3c33a9640cd38a5896b3a758ed/x-pack/platform/plugins/private/discover_enhanced/ui_tests/tests/discover_cdp_perf.spec.ts --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> (cherry picked from commit b5f158b) # Conflicts: # yarn.lock
Contributor
💛 Build succeeded, but was flaky
Failed CI StepsTest Failures
Metrics [docs]Public APIs missing comments
Async chunks
Public APIs missing exports
Unknown metric groupsAPI count
ESLint disabled line counts
Total ESLint disabled count
History
|
dmlemeshko
added a commit
that referenced
this pull request
Mar 19, 2025
…#215141) # Backport This will backport the following commits from `main` to `8.x`: - [[Space time] extending Scout with perfTracker fixture (#212397)](#212397) <!--- Backport version: 9.6.6 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) <!--BACKPORT [{"author":{"name":"Dzmitry Lemechko","email":"dzmitry.lemechko@elastic.co"},"sourceCommit":{"committedDate":"2025-03-14T17:35:31Z","message":"[Space time] extending Scout with perfTracker fixture (#212397)\n\n## Summary\n\nOn-Week project \"Client-side performance insights with Playwright &\nLighthouse\"\n\nrevisiting old PR #66224\n\nThis PR extends Scout with `perfTracker` fixture designed to analyze\nJavaScript bundle performance and page-level performance metrics in\nKibana by leveraging Chrome DevTools Protocol (CDP).\n\nIt intercepts network requests, filters static bundles, and computes\nbundle size statistics per page load. Additionally, it collects CDP\nPerformance Domain Metrics, allowing in-depth analysis of rendering and\nscript execution times.\n\n\n[README](https://github.com/elastic/kibana/blob/c013c39b7ed92248b94716d953ad692e9328a08d/src/platform/packages/shared/kbn-scout/src/playwright/fixtures/test/performance/README.md)\nfile with more details and examples was added\n\nOutput example for `/app/discover` (shorten, just to share the idea):\n\n```\n{\n \"url\": \"http://localhost:5620/app/discover#/\",\n \"bundleCount\": 87,\n \"totalSize\": 3133420,\n \"pluginCount\": 9,\n \"plugins\": [\n {\n \"name\": \"aiops\",\n \"bundlesCount\": 2,\n \"totalSize\": 5982,\n \"bundles\": [\n {\n \"name\": \"aiops.chunk.1.js\",\n \"transferredSize\": 2013\n },\n ...\n ]\n },\n {\n \"name\": \"discover\",\n \"bundlesCount\": 17,\n \"totalSize\": 631605,\n \"bundles\": [\n {\n \"name\": \"discover.chunk.1.js\",\n \"transferredSize\": 41915\n },\n ...\n ]\n },\n {\n \"name\": \"eventAnnotation\",\n \"bundlesCount\": 1,\n \"totalSize\": 8652,\n \"bundles\": [\n {\n \"name\": \"eventAnnotation.chunk.1.js\",\n \"transferredSize\": 8652\n }\n ]\n },\n {\n \"name\": \"expressionXY\",\n \"bundlesCount\": 5,\n \"totalSize\": 203127,\n \"bundles\": [\n {\n \"name\": \"expressionXY.chunk.2.js\",\n \"transferredSize\": 5328\n },\n ...\n ]\n },\n ]\n}\n```\n\nYou can create a Scout UI test and start bundle tracker whenever you\nwant to compute collected stats when all loading is done. Designed as\ntest, it allows you to have individual validations for plugins, total\nbundle size, individual plugin size, etc.\n\n```\n // Ensure all JS bundles are loaded\n await perfTracker.waitForJsLoad(cdp);\n\n // Collect and validate stats\n const stats = perfTracker.collectJsBundleStats(currentUrl);\n expect(\n stats.totalSize,\n `Total bundles size loaded on page should not exceed 3.0 MB`\n ).toBeLessThan(3 * 1024 * 1024);\n expect(stats.bundleCount, {\n message: `Total bundle chunks count loaded on page should not exceed 100`,\n }).toBeLessThan(100);\n expect(\n stats.plugins.map((p) => p.name),\n { message: 'Unexpected plugins were loaded on page' }\n ).toStrictEqual([\n 'aiops',\n 'discover',\n 'eventAnnotation',\n 'expressionXY',\n 'kbn-ui-shared-deps-npm',\n 'lens',\n 'maps',\n 'unifiedHistogram',\n 'unifiedSearch',\n ]);\n // Validate individual plugin bundle sizes\n expect(stats.plugins.find((p) => p.name === 'discover')?.totalSize, {\n message: `Total 'discover' bundles size should not exceed 625 KB`,\n }).toBeLessThan(625 * 1024);\n```\n\nFull test example:\nhttps://github.com/elastic/kibana/blob/7b18e85541d00c3c33a9640cd38a5896b3a758ed/x-pack/platform/plugins/private/discover_enhanced/ui_tests/tests/discover_cdp_perf.spec.ts\n\n---------\n\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"b5f158bc42285c37911abca17c371f4459106fa7","branchLabelMapping":{"^v9.1.0$":"main","^v8.19.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:skip","v9.0.0","wg:performance","backport:version","test:scout","v9.1.0","v8.19.0"],"title":"[Space time] extending Scout with perfTracker fixture","number":212397,"url":"https://github.com/elastic/kibana/pull/212397","mergeCommit":{"message":"[Space time] extending Scout with perfTracker fixture (#212397)\n\n## Summary\n\nOn-Week project \"Client-side performance insights with Playwright &\nLighthouse\"\n\nrevisiting old PR #66224\n\nThis PR extends Scout with `perfTracker` fixture designed to analyze\nJavaScript bundle performance and page-level performance metrics in\nKibana by leveraging Chrome DevTools Protocol (CDP).\n\nIt intercepts network requests, filters static bundles, and computes\nbundle size statistics per page load. Additionally, it collects CDP\nPerformance Domain Metrics, allowing in-depth analysis of rendering and\nscript execution times.\n\n\n[README](https://github.com/elastic/kibana/blob/c013c39b7ed92248b94716d953ad692e9328a08d/src/platform/packages/shared/kbn-scout/src/playwright/fixtures/test/performance/README.md)\nfile with more details and examples was added\n\nOutput example for `/app/discover` (shorten, just to share the idea):\n\n```\n{\n \"url\": \"http://localhost:5620/app/discover#/\",\n \"bundleCount\": 87,\n \"totalSize\": 3133420,\n \"pluginCount\": 9,\n \"plugins\": [\n {\n \"name\": \"aiops\",\n \"bundlesCount\": 2,\n \"totalSize\": 5982,\n \"bundles\": [\n {\n \"name\": \"aiops.chunk.1.js\",\n \"transferredSize\": 2013\n },\n ...\n ]\n },\n {\n \"name\": \"discover\",\n \"bundlesCount\": 17,\n \"totalSize\": 631605,\n \"bundles\": [\n {\n \"name\": \"discover.chunk.1.js\",\n \"transferredSize\": 41915\n },\n ...\n ]\n },\n {\n \"name\": \"eventAnnotation\",\n \"bundlesCount\": 1,\n \"totalSize\": 8652,\n \"bundles\": [\n {\n \"name\": \"eventAnnotation.chunk.1.js\",\n \"transferredSize\": 8652\n }\n ]\n },\n {\n \"name\": \"expressionXY\",\n \"bundlesCount\": 5,\n \"totalSize\": 203127,\n \"bundles\": [\n {\n \"name\": \"expressionXY.chunk.2.js\",\n \"transferredSize\": 5328\n },\n ...\n ]\n },\n ]\n}\n```\n\nYou can create a Scout UI test and start bundle tracker whenever you\nwant to compute collected stats when all loading is done. Designed as\ntest, it allows you to have individual validations for plugins, total\nbundle size, individual plugin size, etc.\n\n```\n // Ensure all JS bundles are loaded\n await perfTracker.waitForJsLoad(cdp);\n\n // Collect and validate stats\n const stats = perfTracker.collectJsBundleStats(currentUrl);\n expect(\n stats.totalSize,\n `Total bundles size loaded on page should not exceed 3.0 MB`\n ).toBeLessThan(3 * 1024 * 1024);\n expect(stats.bundleCount, {\n message: `Total bundle chunks count loaded on page should not exceed 100`,\n }).toBeLessThan(100);\n expect(\n stats.plugins.map((p) => p.name),\n { message: 'Unexpected plugins were loaded on page' }\n ).toStrictEqual([\n 'aiops',\n 'discover',\n 'eventAnnotation',\n 'expressionXY',\n 'kbn-ui-shared-deps-npm',\n 'lens',\n 'maps',\n 'unifiedHistogram',\n 'unifiedSearch',\n ]);\n // Validate individual plugin bundle sizes\n expect(stats.plugins.find((p) => p.name === 'discover')?.totalSize, {\n message: `Total 'discover' bundles size should not exceed 625 KB`,\n }).toBeLessThan(625 * 1024);\n```\n\nFull test example:\nhttps://github.com/elastic/kibana/blob/7b18e85541d00c3c33a9640cd38a5896b3a758ed/x-pack/platform/plugins/private/discover_enhanced/ui_tests/tests/discover_cdp_perf.spec.ts\n\n---------\n\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"b5f158bc42285c37911abca17c371f4459106fa7"}},"sourceBranch":"main","suggestedTargetBranches":["8.x"],"targetPullRequestStates":[{"branch":"9.0","label":"v9.0.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"url":"https://github.com/elastic/kibana/pull/215016","number":215016,"state":"MERGED","mergeCommit":{"sha":"270867bac6f803fcd9ccb12357710300c0770a15","message":"[9.0] [Space time] extending Scout with perfTracker fixture (#212397) (#215016)\n\n# Backport\n\nThis will backport the following commits from `main` to `9.0`:\n- [[Space time] extending Scout with perfTracker fixture\n(#212397)](https://github.com/elastic/kibana/pull/212397)\n\n\n\n### Questions ?\nPlease refer to the [Backport tool\ndocumentation](https://github.com/sorenlouv/backport)\n\n"}},{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/212397","number":212397,"mergeCommit":{"message":"[Space time] extending Scout with perfTracker fixture (#212397)\n\n## Summary\n\nOn-Week project \"Client-side performance insights with Playwright &\nLighthouse\"\n\nrevisiting old PR #66224\n\nThis PR extends Scout with `perfTracker` fixture designed to analyze\nJavaScript bundle performance and page-level performance metrics in\nKibana by leveraging Chrome DevTools Protocol (CDP).\n\nIt intercepts network requests, filters static bundles, and computes\nbundle size statistics per page load. Additionally, it collects CDP\nPerformance Domain Metrics, allowing in-depth analysis of rendering and\nscript execution times.\n\n\n[README](https://github.com/elastic/kibana/blob/c013c39b7ed92248b94716d953ad692e9328a08d/src/platform/packages/shared/kbn-scout/src/playwright/fixtures/test/performance/README.md)\nfile with more details and examples was added\n\nOutput example for `/app/discover` (shorten, just to share the idea):\n\n```\n{\n \"url\": \"http://localhost:5620/app/discover#/\",\n \"bundleCount\": 87,\n \"totalSize\": 3133420,\n \"pluginCount\": 9,\n \"plugins\": [\n {\n \"name\": \"aiops\",\n \"bundlesCount\": 2,\n \"totalSize\": 5982,\n \"bundles\": [\n {\n \"name\": \"aiops.chunk.1.js\",\n \"transferredSize\": 2013\n },\n ...\n ]\n },\n {\n \"name\": \"discover\",\n \"bundlesCount\": 17,\n \"totalSize\": 631605,\n \"bundles\": [\n {\n \"name\": \"discover.chunk.1.js\",\n \"transferredSize\": 41915\n },\n ...\n ]\n },\n {\n \"name\": \"eventAnnotation\",\n \"bundlesCount\": 1,\n \"totalSize\": 8652,\n \"bundles\": [\n {\n \"name\": \"eventAnnotation.chunk.1.js\",\n \"transferredSize\": 8652\n }\n ]\n },\n {\n \"name\": \"expressionXY\",\n \"bundlesCount\": 5,\n \"totalSize\": 203127,\n \"bundles\": [\n {\n \"name\": \"expressionXY.chunk.2.js\",\n \"transferredSize\": 5328\n },\n ...\n ]\n },\n ]\n}\n```\n\nYou can create a Scout UI test and start bundle tracker whenever you\nwant to compute collected stats when all loading is done. Designed as\ntest, it allows you to have individual validations for plugins, total\nbundle size, individual plugin size, etc.\n\n```\n // Ensure all JS bundles are loaded\n await perfTracker.waitForJsLoad(cdp);\n\n // Collect and validate stats\n const stats = perfTracker.collectJsBundleStats(currentUrl);\n expect(\n stats.totalSize,\n `Total bundles size loaded on page should not exceed 3.0 MB`\n ).toBeLessThan(3 * 1024 * 1024);\n expect(stats.bundleCount, {\n message: `Total bundle chunks count loaded on page should not exceed 100`,\n }).toBeLessThan(100);\n expect(\n stats.plugins.map((p) => p.name),\n { message: 'Unexpected plugins were loaded on page' }\n ).toStrictEqual([\n 'aiops',\n 'discover',\n 'eventAnnotation',\n 'expressionXY',\n 'kbn-ui-shared-deps-npm',\n 'lens',\n 'maps',\n 'unifiedHistogram',\n 'unifiedSearch',\n ]);\n // Validate individual plugin bundle sizes\n expect(stats.plugins.find((p) => p.name === 'discover')?.totalSize, {\n message: `Total 'discover' bundles size should not exceed 625 KB`,\n }).toBeLessThan(625 * 1024);\n```\n\nFull test example:\nhttps://github.com/elastic/kibana/blob/7b18e85541d00c3c33a9640cd38a5896b3a758ed/x-pack/platform/plugins/private/discover_enhanced/ui_tests/tests/discover_cdp_perf.spec.ts\n\n---------\n\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"b5f158bc42285c37911abca17c371f4459106fa7"}},{"branch":"8.x","label":"v8.19.0","branchLabelMappingKey":"^v8.19.0$","isSourceBranch":false,"state":"NOT_CREATED"}]}] BACKPORT--> --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Backport
This will backport the following commits from
mainto9.0:Questions ?
Please refer to the Backport tool documentation