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

Performance tests: configure as a production environment #52016

Merged
merged 1 commit into from
Jun 29, 2023

Conversation

oandregal
Copy link
Member

@oandregal oandregal commented Jun 28, 2023

What?

Sets up the WP_DEBUG and SCRIPTS_DEBUG to false, so the WordPress instance resembles a production environment.

Why?

Certain aspects of performance are different when running when debug enabled: some caches may be disabled, assets are minified, etc. We should aim to measure performance as close as possible to a production environment.

This is the difference in the performance CI job in this branch vs one of the last to succeed in trunk (can also be compared with current codevitals metrics):

This branch Trunk
Front-end image image
Post editor image image
Site editor image image

How?

Sets the WP_DEBUG and SCRIPTS_DEBUG global variables to false.

Testing Instructions

See the performance results.

@oandregal oandregal self-assigned this Jun 28, 2023
@oandregal oandregal added the [Type] Performance Related to performance efforts label Jun 28, 2023
@oandregal oandregal changed the title Disable debug variables in performance tests Performance tests: configure as a production environment Jun 28, 2023
@oandregal
Copy link
Member Author

Related: I discovered this by running into this issue in core at WordPress/wordpress-develop#4565 (comment)

@github-actions
Copy link

Size Change: 0 B

Total Size: 1.44 MB

ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 955 B
build/annotations/index.min.js 2.69 kB
build/api-fetch/index.min.js 2.28 kB
build/autop/index.min.js 2.1 kB
build/blob/index.min.js 451 B
build/block-directory/index.min.js 6.99 kB
build/block-directory/style-rtl.css 1.02 kB
build/block-directory/style.css 1.02 kB
build/block-editor/content-rtl.css 4.22 kB
build/block-editor/content.css 4.22 kB
build/block-editor/default-editor-styles-rtl.css 381 B
build/block-editor/default-editor-styles.css 381 B
build/block-editor/index.min.js 208 kB
build/block-editor/style-rtl.css 14.7 kB
build/block-editor/style.css 14.7 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 126 B
build/block-library/blocks/audio/theme.css 126 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 584 B
build/block-library/blocks/button/editor.css 582 B
build/block-library/blocks/button/style-rtl.css 624 B
build/block-library/blocks/button/style.css 623 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 409 B
build/block-library/blocks/columns/style.css 409 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/cover/style-rtl.css 1.61 kB
build/block-library/blocks/cover/style.css 1.6 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 159 B
build/block-library/blocks/details/style.css 159 B
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 126 B
build/block-library/blocks/embed/theme.css 126 B
build/block-library/blocks/file/editor-rtl.css 316 B
build/block-library/blocks/file/editor.css 316 B
build/block-library/blocks/file/interactivity.min.js 395 B
build/block-library/blocks/file/style-rtl.css 269 B
build/block-library/blocks/file/style.css 270 B
build/block-library/blocks/file/view.min.js 375 B
build/block-library/blocks/footnotes/style-rtl.css 183 B
build/block-library/blocks/footnotes/style.css 182 B
build/block-library/blocks/freeform/editor-rtl.css 2.58 kB
build/block-library/blocks/freeform/editor.css 2.58 kB
build/block-library/blocks/gallery/editor-rtl.css 947 B
build/block-library/blocks/gallery/editor.css 952 B
build/block-library/blocks/gallery/style-rtl.css 1.53 kB
build/block-library/blocks/gallery/style.css 1.53 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 654 B
build/block-library/blocks/group/editor.css 654 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 336 B
build/block-library/blocks/html/editor.css 337 B
build/block-library/blocks/image/editor-rtl.css 834 B
build/block-library/blocks/image/editor.css 833 B
build/block-library/blocks/image/interactivity.min.js 1.52 kB
build/block-library/blocks/image/style-rtl.css 1.34 kB
build/block-library/blocks/image/style.css 1.35 kB
build/block-library/blocks/image/theme-rtl.css 126 B
build/block-library/blocks/image/theme.css 126 B
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 507 B
build/block-library/blocks/media-text/style.css 505 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 712 B
build/block-library/blocks/navigation-link/editor.css 711 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation/editor-rtl.css 2.26 kB
build/block-library/blocks/navigation/editor.css 2.26 kB
build/block-library/blocks/navigation/interactivity.min.js 978 B
build/block-library/blocks/navigation/style-rtl.css 2.21 kB
build/block-library/blocks/navigation/style.css 2.2 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 438 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 401 B
build/block-library/blocks/page-list/editor.css 401 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 174 B
build/block-library/blocks/paragraph/editor.css 174 B
build/block-library/blocks/paragraph/style-rtl.css 279 B
build/block-library/blocks/paragraph/style.css 281 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 508 B
build/block-library/blocks/post-comments-form/style.css 508 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 588 B
build/block-library/blocks/post-featured-image/editor.css 586 B
build/block-library/blocks/post-featured-image/style-rtl.css 319 B
build/block-library/blocks/post-featured-image/style.css 319 B
build/block-library/blocks/post-navigation-link/style-rtl.css 153 B
build/block-library/blocks/post-navigation-link/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 314 B
build/block-library/blocks/post-template/style.css 314 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 335 B
build/block-library/blocks/pullquote/style.css 335 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 450 B
build/block-library/blocks/query/editor.css 449 B
build/block-library/blocks/quote/style-rtl.css 222 B
build/block-library/blocks/quote/style.css 222 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 178 B
build/block-library/blocks/search/editor.css 178 B
build/block-library/blocks/search/style-rtl.css 587 B
build/block-library/blocks/search/style.css 584 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 531 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 323 B
build/block-library/blocks/shortcode/editor.css 323 B
build/block-library/blocks/site-logo/editor-rtl.css 754 B
build/block-library/blocks/site-logo/editor.css 754 B
build/block-library/blocks/site-logo/style-rtl.css 203 B
build/block-library/blocks/site-logo/style.css 203 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.43 kB
build/block-library/blocks/social-links/style.css 1.42 kB
build/block-library/blocks/spacer/editor-rtl.css 348 B
build/block-library/blocks/spacer/editor.css 348 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 433 B
build/block-library/blocks/table/editor.css 433 B
build/block-library/blocks/table/style-rtl.css 645 B
build/block-library/blocks/table/style.css 644 B
build/block-library/blocks/table/theme-rtl.css 146 B
build/block-library/blocks/table/theme.css 146 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 403 B
build/block-library/blocks/template-part/editor.css 403 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/term-description/style-rtl.css 111 B
build/block-library/blocks/term-description/style.css 111 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 174 B
build/block-library/blocks/video/style.css 174 B
build/block-library/blocks/video/theme-rtl.css 126 B
build/block-library/blocks/video/theme.css 126 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.1 kB
build/block-library/common.css 1.1 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 12.1 kB
build/block-library/editor.css 12.1 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 201 kB
build/block-library/interactivity/runtime.min.js 2.69 kB
build/block-library/interactivity/vendors.min.js 8.2 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 13.6 kB
build/block-library/style.css 13.6 kB
build/block-library/theme-rtl.css 686 B
build/block-library/theme.css 691 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 50.9 kB
build/commands/index.min.js 14.9 kB
build/commands/style-rtl.css 827 B
build/commands/style.css 827 B
build/components/index.min.js 240 kB
build/components/style-rtl.css 11.8 kB
build/components/style.css 11.8 kB
build/compose/index.min.js 12 kB
build/core-commands/index.min.js 2.26 kB
build/core-data/index.min.js 16.1 kB
build/customize-widgets/index.min.js 12 kB
build/customize-widgets/style-rtl.css 1.46 kB
build/customize-widgets/style.css 1.45 kB
build/data-controls/index.min.js 640 B
build/data/index.min.js 8.27 kB
build/date/index.min.js 40.4 kB
build/deprecated/index.min.js 451 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.63 kB
build/edit-post/classic-rtl.css 544 B
build/edit-post/classic.css 545 B
build/edit-post/index.min.js 35.2 kB
build/edit-post/style-rtl.css 7.58 kB
build/edit-post/style.css 7.57 kB
build/edit-site/index.min.js 84.3 kB
build/edit-site/style-rtl.css 12.5 kB
build/edit-site/style.css 12.5 kB
build/edit-widgets/index.min.js 16.9 kB
build/edit-widgets/style-rtl.css 4.53 kB
build/edit-widgets/style.css 4.53 kB
build/editor/index.min.js 45.5 kB
build/editor/style-rtl.css 3.58 kB
build/editor/style.css 3.58 kB
build/element/index.min.js 4.8 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 7.62 kB
build/format-library/style-rtl.css 554 B
build/format-library/style.css 553 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.58 kB
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.64 kB
build/keycodes/index.min.js 1.84 kB
build/list-reusable-blocks/index.min.js 2.13 kB
build/list-reusable-blocks/style-rtl.css 836 B
build/list-reusable-blocks/style.css 836 B
build/media-utils/index.min.js 2.9 kB
build/notices/index.min.js 948 B
build/plugins/index.min.js 1.77 kB
build/preferences-persistence/index.min.js 1.84 kB
build/preferences/index.min.js 1.24 kB
build/primitives/index.min.js 943 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 943 B
build/react-i18n/index.min.js 615 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.7 kB
build/reusable-blocks/index.min.js 2.38 kB
build/reusable-blocks/style-rtl.css 243 B
build/reusable-blocks/style.css 243 B
build/rich-text/index.min.js 10.9 kB
build/router/index.min.js 1.77 kB
build/server-side-render/index.min.js 1.94 kB
build/shortcode/index.min.js 1.39 kB
build/style-engine/index.min.js 1.81 kB
build/token-list/index.min.js 582 B
build/url/index.min.js 3.57 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.8 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 958 B
build/warning/index.min.js 268 B
build/widgets/index.min.js 7.16 kB
build/widgets/style-rtl.css 1.15 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.02 kB

compressed-size-action

@oandregal
Copy link
Member Author

oandregal commented Jun 28, 2023

This is the difference I see locally when I use enable/disable WP_DEBUG and calculate TTFB:

image

This is the difference in the performance CI job in this branch vs one of the last to succeed in trunk (can also be compared with current codevitals metrics):

This branch Trunk
Front-end image image
Post editor image image
Site editor image image

Copy link
Member

@WunderBart WunderBart left a comment

Choose a reason for hiding this comment

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

Looks good to me! I'll make sure to include that before running metrics on the migrated tests 🙌

@oandregal oandregal merged commit 69ad318 into trunk Jun 29, 2023
52 checks passed
@oandregal oandregal deleted the update/performance-tests-to-use-production-setup branch June 29, 2023 11:59
@github-actions github-actions bot added this to the Gutenberg 16.2 milestone Jun 29, 2023
@oandregal
Copy link
Member Author

I haven't seen the impact this PR suggested in the metrics (this is TTFB for block themes, and the cursor points at the commit corresponding to the merge of this PR):

image

Any ideas why?

glendaviesnz added a commit that referenced this pull request Jul 3, 2023
…#52229)

* Patterns: Fix setting of sync status for fully synced patterns (#51952)
* Add check for sync status of fully to account for bug in 16.1 release
* Fix phpunit failures (#51950)
* Fix phpunit failures
* Performance tests: configure as a production environment (#52016)

---------

Co-authored-by: Aaron Robertshaw <60436221+aaronrobertshaw@users.noreply.github.com>
Co-authored-by: Robert Anderson <robert@noisysocks.com>
Co-authored-by: André <583546+oandregal@users.noreply.github.com>
@WunderBart
Copy link
Member

WunderBart commented Jul 3, 2023

Any ideas why?

I think it's expected because we normalize results in codevitals. Since the change was made to the test runner script (performance.js), both the base branch and subject branch's results were affected by the change from this PR, which led to the normalization of the stored/displayed value. For example:

Current TTFB in codevitals: 50
New TTFB, base branch: 36 (because the job will run with WP_DEBUG disabled!)
New TTFB, this branch: 36
Next TTFB stored in codevitals: 36 * 50 / 36 = 50

This checks out with the results from the merge commit perf comparison job:

Screenshot 2023-07-12 at 14 53 09

Does that make sense? cc @youknowriad

@youknowriad
Copy link
Contributor

yes, unless two versions of WP have different performance results in production and similar in development, this PR shouldn't have any impact on the graphs.

sethrubenstein pushed a commit to pewresearch/gutenberg that referenced this pull request Jul 13, 2023
@oandregal
Copy link
Member Author

@WunderBart @youknowriad So, a side effect of the normalization done by codevitals is that we are cancelling any change in the WordPress runtime used as base, aren't we?

For example, any improvement in TTFB, LCP, etc. that didn't land in Gutenberg first is not reflected in the metrics: because they affect both the latest commit (metrictValue) and the base reference (baseMetrics), the stored values would be one close to the old reference. Even the impact of the ones that landed in Gutenberg first is mitigated, because once they come as part of the WordPress runtime they go through this process as well.

This is problematic for front-end metrics: it builds "inertia" in their values and deviates from reality too much. It makes it impossible to compare how the same metric fares for block & classic themes, for example.

How can we fix it? By manually updating the values stored in the codevitals database for the base reference 34af582?

@youknowriad
Copy link
Contributor

@oandregal I don't think we should fix that at all, codevitals for "Gutenberg" is about tracking Gutenberg impact and the WordPress project is about tracking WordPress impact. In other words, we should track these improvements in WordPress instead since the code change happened in WordPress.

@oandregal
Copy link
Member Author

@youknowriad I see what you mean. My concern is that, in addition to being unable to compare block vs classic themes, there's also a perception issue. Block & classic themes have about the same TTFB (according to the WordPress dashboard and other tests) but the gutenberg dashboard reports block themes being 2,5x slower than classic ones. This may confuse people or lead them to the wrong conclusions. If not fixing the issue, what else can we do to clarify this?

@youknowriad
Copy link
Contributor

Yeah, good point. Codevitals is currently optimized to check for commit impact on metrics not for cross metric comparison, I'm not sure how to fix that and whether we should do it. Maybe we can start storing both normalized and actual values and have a page/UI where you can "focus" on a single commit and compare cross metrics (showing the real values instead of the normalized ones), the history graphs should always show the normalized values though.

@WunderBart
Copy link
Member

WunderBart commented Jul 19, 2023

A potential solution could be a relative chart with a 0% base. Since the actual milliseconds are not our primary concern, we could opt not to display them. Instead, we can have the chart start at a 0% value (base), and then fluctuate as new data (commits) come in. For example:

image

If we need to display the actual (not normalized) milliseconds, we could do so in a separate section or only for the most recent record tick. This is because the last measurement is the only one of significant value.

Does this approach make sense?

@oandregal
Copy link
Member Author

I'm not sure if I follow: what would be the zero, and what would be the actual values of that chart ("normalized" or the actual values)?

@WunderBart
Copy link
Member

WunderBart commented Jul 21, 2023

I'm not sure if I follow: what would be the zero, and what would be the actual values of that chart ("normalized" or the actual values)?

The data represented in this chart essentially reflects relative percentages, which indicate the degree of deviation from a set baseline of 0%. Both normalized and "actual" values are meaningless and we don't really care about any of them - we only care about the consistency over time so that we're able to detect whether the performance is getting worse or better.

I think that dropping the milliseconds would actually be liberating in this context. They only confuse, and there's no way to achieve numbers that would mean anything unless we actually start RUMming the metrics. Even then, though, I don't think they would be a good source of what we aim to achieve here, which is to track performance changes over time.

@oandregal
Copy link
Member Author

Thanks, I see now. I don't think percentages or ms values make any difference: the gist of my concern is that normalizing the numbers we receive builds inertia, creates deviation from reality, and don't allow us to compare metrics (block vs classic).

@WunderBart
Copy link
Member

WunderBart commented Jul 21, 2023

I don't think percentages or ms values make any difference: the gist of my concern is that normalizing the numbers we receive builds inertia, creates deviation from reality, and don't allow us to compare metrics (block vs classic).

I believe the relative percentage would eliminate the confusion of, for example, the block theme being displayed as 2.5x slower than the classic one which you mentioned above.

As for the data normalization, to my knowledge, we have to do it to (at least somewhat) accurately track the performance changes as the testing environment is inherently unstable and would cause significant value drift if we haven't.

Regarding the cross-metric comparison, we do have the data for that (e.g. classic vs. block TTFB) - we're just not utilizing it that way. I imagine, though, that it would be fairly straightforward to add that metric to the codevitals dashboard. Do you think that would suffice as a solution here?

@oandregal
Copy link
Member Author

I believe the relative percentage would eliminate the confusion of, for example, the #52016 (comment) which you mentioned above.

Unfortunately, it wouldn't: you'd still see a reference (the 0% base) and inspecting both graphs you'd still see the percentage for block themes is a lot higher than for classic.

As for the data normalization, to my knowledge, we have to do it to (at least somewhat) accurately track the performance changes as the testing environment is inherently unstable and would cause significant value drift if we haven't.

I don't mean to remove it, it's useful. Though, it comes with side effects we need to manage. To mitigate them, I don't see any option other than resetting the values regularly: perhaps every time we bump the WordPress base, once a year, etc.

Regarding the cross-metric comparison, we do have the data for that (e.g. classic vs. block TTFB) - we're just not utilizing it that way. I imagine, though, that it would be fairly straightforward to add that metric to the codevitals dashboard. Do you think that would suffice as a solution here?

I don't mean to have a new metric/card/etc. My point is that the numbers we already display, we cannot compare. Though anyone who visits codevitals does, and that's an issue because they go away with the wrong impression (2.5x difference between block and classic themes). That's my concern.

@WunderBart
Copy link
Member

WunderBart commented Jul 25, 2023

I believe the relative percentage would eliminate the confusion of, for example, the #52016 (comment) which you mentioned above.

Unfortunately, it wouldn't: you'd still see a reference (the 0% base) and inspecting both graphs you'd still see the percentage for block themes is a lot higher than for classic.

We can check that! 😄 I downloaded the TTFB data for both classic and block themes and transformed the values to relative percentages, setting the base value as 0%. Below are the visuals. The snap on the left is from codevitals, and on the right is from my sheet.

TTFB, Classic Theme

Absolute (ms) Relative (%)
Screenshot 2023-07-25 at 11 47 13 Screenshot 2023-07-25 at 11 55 09

TTFB, Block Theme

Absolute (ms) Relative (%)
Screenshot 2023-07-25 at 11 46 59 Screenshot 2023-07-25 at 11 55 20

As you can see, the relative value is actually showing the same increase (~40%) since we started measuring, which is a correct indication that also doesn't suggest the 2.5x difference. Interestingly, the first recorded sample is from a commit from February, which means that, roughly, between the v15 and v16 (major) releases the TTFB for both themes went up 40%. I think it's a good indication that we should be resetting the base at least every major GB release (every ~4-6 months). IMO it would provide a clear 'snapshot' view of the performance improvements or regressions with each new release, which can help understand the changes in a concise and relevant way. It would also ensure that the relative measurements are not excessively influenced by old data or anomalies from past versions. Does that make sense?

/cc @dmsnell

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Type] Performance Related to performance efforts
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants