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

Patterns: avoid fetching on load #57999

Merged
merged 7 commits into from
Jan 24, 2024
Merged

Conversation

ellatrix
Copy link
Member

@ellatrix ellatrix commented Jan 19, 2024

What? Why?

Currently all patterns are fetched from the server at editor setup, to be passed to the block editor as a setting. This is not ideal because the editor doesn't require the list of patterns until you open the inserter.

This PR adds a new setting that is an async function to get the patterns. This function can then be used in a resolver in the blocks-editor store, allowing us to fetch the patterns only when needed.

The PR adds a __experimentalFetchBlockPatterns block editor setting (async function), while retaining the __experimentalBlockPatterns setting (array).

How?

One interesting implementation detail is that resolvers cannot be called from plain state selectors. They must be called within a registry selector. The current patterns selectors are memoized selectors. Thanks to #57888 and #57943 this works now!

Testing Instructions

Open the inserter's patterns tab. All e2e tests should pass.

Testing Instructions for Keyboard

Screenshots or screencast

@ellatrix ellatrix added the [Type] Performance Related to performance efforts label Jan 19, 2024
@ellatrix ellatrix requested a review from nerrad as a code owner January 19, 2024 11:04
Copy link

github-actions bot commented Jan 19, 2024

Size Change: -5.63 kB (0%)

Total Size: 1.69 MB

Filename Size Change
build/a11y/index.min.js 955 B -9 B (-1%)
build/annotations/index.min.js 2.69 kB -20 B (-1%)
build/api-fetch/index.min.js 2.32 kB -12 B (-1%)
build/autop/index.min.js 2.1 kB -7 B (0%)
build/blob/index.min.js 578 B -12 B (-2%)
build/block-directory/index.min.js 7.22 kB -26 B (0%)
build/block-directory/style-rtl.css 1.02 kB -28 B (-3%)
build/block-directory/style.css 1.02 kB -27 B (-3%)
build/block-editor/content-rtl.css 4.38 kB -42 B (-1%)
build/block-editor/content.css 4.38 kB -43 B (-1%)
build/block-editor/default-editor-styles-rtl.css 381 B -22 B (-5%)
build/block-editor/default-editor-styles.css 381 B -22 B (-5%)
build/block-editor/index.min.js 249 kB -397 B (0%)
build/block-editor/style-rtl.css 15.3 kB -77 B (0%)
build/block-editor/style.css 15.3 kB -79 B (-1%)
build/block-library/blocks/audio/theme-rtl.css 126 B -12 B (-9%)
build/block-library/blocks/audio/theme.css 126 B -12 B (-9%)
build/block-library/blocks/button/editor-rtl.css 415 B -4 B (-1%)
build/block-library/blocks/button/editor.css 414 B -3 B (-1%)
build/block-library/blocks/button/style-rtl.css 627 B -5 B (-1%)
build/block-library/blocks/button/style.css 626 B -5 B (-1%)
build/block-library/blocks/cover/style-rtl.css 1.69 kB -7 B (0%)
build/block-library/blocks/cover/style.css 1.68 kB -7 B (0%)
build/block-library/blocks/embed/theme-rtl.css 126 B -12 B (-9%)
build/block-library/blocks/embed/theme.css 126 B -12 B (-9%)
build/block-library/blocks/file/view.min.js 316 B -6 B (-2%)
build/block-library/blocks/form-input/editor-rtl.css 227 B -2 B (-1%)
build/block-library/blocks/form-input/editor.css 227 B -1 B (0%)
build/block-library/blocks/form-submission-notification/editor-rtl.css 340 B -3 B (-1%)
build/block-library/blocks/form-submission-notification/editor.css 340 B -2 B (-1%)
build/block-library/blocks/freeform/editor-rtl.css 2.61 kB -1 B (0%)
build/block-library/blocks/gallery/editor-rtl.css 947 B -10 B (-1%)
build/block-library/blocks/gallery/editor.css 952 B -10 B (-1%)
build/block-library/blocks/gallery/style-rtl.css 1.72 kB -26 B (-1%)
build/block-library/blocks/gallery/style.css 1.72 kB -27 B (-2%)
build/block-library/blocks/gallery/theme-rtl.css 108 B -14 B (-11%) 👏
build/block-library/blocks/gallery/theme.css 108 B -14 B (-11%) 👏
build/block-library/blocks/html/editor-rtl.css 336 B -4 B (-1%)
build/block-library/blocks/html/editor.css 337 B -4 B (-1%)
build/block-library/blocks/image/style-rtl.css 1.6 kB -7 B (0%)
build/block-library/blocks/image/style.css 1.59 kB -8 B (0%)
build/block-library/blocks/image/theme-rtl.css 126 B -11 B (-8%)
build/block-library/blocks/image/theme.css 126 B -11 B (-8%)
build/block-library/blocks/image/view.min.js 2.01 kB -2 B (0%)
build/block-library/blocks/navigation-link/editor-rtl.css 668 B -3 B (0%)
build/block-library/blocks/navigation-link/editor.css 669 B -3 B (0%)
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B -3 B (-1%)
build/block-library/blocks/navigation-submenu/editor.css 295 B -4 B (-1%)
build/block-library/blocks/navigation/editor-rtl.css 2.25 kB -5 B (0%)
build/block-library/blocks/navigation/editor.css 2.26 kB -5 B (0%)
build/block-library/blocks/navigation/style-rtl.css 2.24 kB -11 B (0%)
build/block-library/blocks/navigation/style.css 2.23 kB -9 B (0%)
build/block-library/blocks/navigation/view.min.js 1.1 kB -6 B (-1%)
build/block-library/blocks/post-featured-image/style-rtl.css 342 B -3 B (-1%)
build/block-library/blocks/post-featured-image/style.css 342 B -3 B (-1%)
build/block-library/blocks/query/view.min.js 642 B -5 B (-1%)
build/block-library/blocks/search/style-rtl.css 614 B +12 B (+2%)
build/block-library/blocks/search/style.css 614 B +12 B (+2%)
build/block-library/blocks/search/view.min.js 471 B -4 B (-1%)
build/block-library/blocks/shortcode/editor-rtl.css 323 B -6 B (-2%)
build/block-library/blocks/shortcode/editor.css 323 B -6 B (-2%)
build/block-library/blocks/site-logo/editor-rtl.css 754 B -6 B (-1%)
build/block-library/blocks/site-logo/editor.css 754 B -6 B (-1%)
build/block-library/blocks/spacer/editor-rtl.css 348 B -11 B (-3%)
build/block-library/blocks/spacer/editor.css 348 B -11 B (-3%)
build/block-library/blocks/table/style-rtl.css 639 B -7 B (-1%)
build/block-library/blocks/table/style.css 639 B -6 B (-1%)
build/block-library/blocks/table/theme-rtl.css 146 B -11 B (-7%)
build/block-library/blocks/table/theme.css 146 B -11 B (-7%)
build/block-library/blocks/video/style-rtl.css 185 B -6 B (-3%)
build/block-library/blocks/video/style.css 185 B -6 B (-3%)
build/block-library/blocks/video/theme-rtl.css 126 B -13 B (-9%)
build/block-library/blocks/video/theme.css 126 B -13 B (-9%)
build/block-library/common-rtl.css 1.1 kB -12 B (-1%)
build/block-library/common.css 1.1 kB -13 B (-1%)
build/block-library/editor-rtl.css 12.3 kB -37 B (0%)
build/block-library/editor.css 12.3 kB -41 B (0%)
build/block-library/index.min.js 214 kB -641 B (0%)
build/block-library/style-rtl.css 14.7 kB -49 B (0%)
build/block-library/style.css 14.7 kB -40 B (0%)
build/block-library/theme-rtl.css 688 B -12 B (-2%)
build/block-library/theme.css 693 B -12 B (-2%)
build/block-serialization-default-parser/index.min.js 1.12 kB -8 B (-1%)
build/block-serialization-spec-parser/index.min.js 2.87 kB -2 B (0%)
build/blocks/index.min.js 51.4 kB -116 B (0%)
build/commands/index.min.js 15.5 kB -2 B (0%)
build/commands/style-rtl.css 921 B -26 B (-3%)
build/commands/style.css 918 B -24 B (-3%)
build/components/index.min.js 235 kB -610 B (0%)
build/components/style-rtl.css 12 kB -87 B (-1%)
build/components/style.css 12.1 kB -86 B (-1%)
build/compose/index.min.js 12.6 kB -16 B (0%)
build/core-commands/index.min.js 2.71 kB -15 B (-1%)
build/core-data/index.min.js 72.7 kB -80 B (0%)
build/customize-widgets/index.min.js 12.1 kB -9 B (0%)
build/customize-widgets/style-rtl.css 1.34 kB -25 B (-2%)
build/customize-widgets/style.css 1.33 kB -25 B (-2%)
build/data-controls/index.min.js 640 B -11 B (-2%)
build/data/index.min.js 8.92 kB -43 B (0%)
build/date/index.min.js 17.8 kB -10 B (0%)
build/deprecated/index.min.js 451 B -11 B (-2%)
build/dom-ready/index.min.js 324 B -12 B (-4%)
build/dom/index.min.js 4.65 kB -40 B (-1%)
build/edit-post/classic-rtl.css 544 B -27 B (-5%)
build/edit-post/classic.css 545 B -26 B (-5%)
build/edit-post/index.min.js 24.8 kB -110 B (0%)
build/edit-post/style-rtl.css 5.62 kB -63 B (-1%)
build/edit-post/style.css 5.61 kB -62 B (-1%)
build/edit-site/index.min.js 195 kB -196 B (0%)
build/edit-site/style-rtl.css 15.2 kB -108 B (-1%)
build/edit-site/style.css 15.2 kB -108 B (-1%)
build/edit-widgets/index.min.js 17.3 kB -64 B (0%)
build/edit-widgets/style-rtl.css 4.39 kB -47 B (-1%)
build/edit-widgets/style.css 4.39 kB -45 B (-1%)
build/editor/index.min.js 61.4 kB -348 B (-1%)
build/editor/style-rtl.css 5.43 kB -50 B (-1%)
build/editor/style.css 5.43 kB -52 B (-1%)
build/element/index.min.js 4.83 kB -49 B (-1%)
build/escape-html/index.min.js 537 B -11 B (-2%)
build/format-library/index.min.js 7.88 kB -12 B (0%)
build/format-library/style-rtl.css 478 B -22 B (-4%)
build/format-library/style.css 477 B -23 B (-5%)
build/hooks/index.min.js 1.55 kB -23 B (-1%)
build/html-entities/index.min.js 448 B -6 B (-1%)
build/i18n/index.min.js 3.58 kB -28 B (-1%)
build/interactivity/file.min.js 440 B -2 B (0%)
build/interactivity/image.min.js 2.15 kB -4 B (0%)
build/interactivity/index.min.js 13.3 kB -39 B (0%)
build/interactivity/navigation.min.js 1.23 kB +3 B (0%)
build/interactivity/query.min.js 789 B -2 B (0%)
build/is-shallow-equal/index.min.js 527 B -8 B (-1%)
build/keyboard-shortcuts/index.min.js 1.74 kB -18 B (-1%)
build/keycodes/index.min.js 1.46 kB -33 B (-2%)
build/list-reusable-blocks/index.min.js 2.11 kB +4 B (0%)
build/list-reusable-blocks/style-rtl.css 836 B -29 B (-3%)
build/list-reusable-blocks/style.css 836 B -29 B (-3%)
build/media-utils/index.min.js 2.9 kB -16 B (-1%)
build/notices/index.min.js 948 B -16 B (-2%)
build/nux/index.min.js 2 kB -16 B (-1%)
build/nux/style-rtl.css 735 B -40 B (-5%)
build/nux/style.css 732 B -39 B (-5%)
build/patterns/index.min.js 5.45 kB -14 B (0%)
build/patterns/style-rtl.css 540 B -24 B (-4%)
build/patterns/style.css 539 B -25 B (-4%)
build/plugins/index.min.js 1.8 kB -14 B (-1%)
build/preferences-persistence/index.min.js 2.07 kB -9 B (0%)
build/preferences/index.min.js 2.81 kB -17 B (-1%)
build/preferences/style-rtl.css 698 B -27 B (-4%)
build/preferences/style.css 700 B -28 B (-4%)
build/primitives/index.min.js 975 B -19 B (-2%)
build/priority-queue/index.min.js 1.52 kB -2 B (0%)
build/private-apis/index.min.js 1 kB -13 B (-1%)
build/react-i18n/index.min.js 623 B -8 B (-1%)
build/react-refresh-entry/index.min.js 9.47 kB +2 B (0%)
build/react-refresh-runtime/index.min.js 6.78 kB +1 B (0%)
build/redux-routine/index.min.js 2.7 kB -3 B (0%)
build/reusable-blocks/index.min.js 2.72 kB -21 B (-1%)
build/reusable-blocks/style-rtl.css 243 B -22 B (-8%)
build/reusable-blocks/style.css 243 B -22 B (-8%)
build/rich-text/index.min.js 10.4 kB -38 B (0%)
build/router/index.min.js 1.79 kB +2 B (0%)
build/server-side-render/index.min.js 1.95 kB -11 B (-1%)
build/shortcode/index.min.js 1.39 kB -8 B (-1%)
build/style-engine/index.min.js 2.05 kB -6 B (0%)
build/token-list/index.min.js 582 B -5 B (-1%)
build/url/index.min.js 3.72 kB -104 B (-3%)
build/viewport/index.min.js 957 B -10 B (-1%)
build/warning/index.min.js 249 B -10 B (-4%)
build/widgets/index.min.js 7.21 kB -10 B (0%)
build/widgets/style-rtl.css 1.15 kB -27 B (-2%)
build/widgets/style.css 1.16 kB -26 B (-2%)
build/wordcount/index.min.js 1.02 kB -4 B (0%)
ℹ️ View Unchanged
Filename Size
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/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/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 421 B
build/block-library/blocks/columns/style.css 421 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/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 98 B
build/block-library/blocks/details/style.css 98 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/file/editor-rtl.css 316 B
build/block-library/blocks/file/editor.css 316 B
build/block-library/blocks/file/style-rtl.css 280 B
build/block-library/blocks/file/style.css 281 B
build/block-library/blocks/footnotes/style-rtl.css 201 B
build/block-library/blocks/footnotes/style.css 199 B
build/block-library/blocks/form-input/style-rtl.css 343 B
build/block-library/blocks/form-input/style.css 343 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 452 B
build/block-library/blocks/freeform/editor.css 2.61 kB
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 189 B
build/block-library/blocks/heading/style.css 189 B
build/block-library/blocks/image/editor-rtl.css 834 B
build/block-library/blocks/image/editor.css 833 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 505 B
build/block-library/blocks/media-text/style.css 503 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/style-rtl.css 103 B
build/block-library/blocks/navigation-link/style.css 103 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 377 B
build/block-library/blocks/page-list/editor.css 377 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 235 B
build/block-library/blocks/paragraph/editor.css 235 B
build/block-library/blocks/paragraph/style-rtl.css 335 B
build/block-library/blocks/paragraph/style.css 335 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 666 B
build/block-library/blocks/post-featured-image/editor.css 662 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 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 409 B
build/block-library/blocks/post-template/style.css 408 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 125 B
build/block-library/blocks/preformatted/style.css 125 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 354 B
build/block-library/blocks/pullquote/style.css 354 B
build/block-library/blocks/pullquote/theme-rtl.css 168 B
build/block-library/blocks/pullquote/theme.css 168 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 486 B
build/block-library/blocks/query/editor.css 486 B
build/block-library/blocks/query/style-rtl.css 312 B
build/block-library/blocks/query/style.css 308 B
build/block-library/blocks/quote/style-rtl.css 237 B
build/block-library/blocks/quote/style.css 237 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 140 B
build/block-library/blocks/read-more/style.css 140 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 184 B
build/block-library/blocks/search/editor.css 184 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 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/site-logo/style-rtl.css 204 B
build/block-library/blocks/site-logo/style.css 204 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 682 B
build/block-library/blocks/social-links/editor.css 681 B
build/block-library/blocks/social-links/style-rtl.css 1.49 kB
build/block-library/blocks/social-links/style.css 1.49 kB
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 395 B
build/block-library/blocks/table/editor.css 395 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/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/interactivity/search.min.js 610 B
build/modules/importmap-polyfill.min.js 12.2 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

compressed-size-action

Copy link

github-actions bot commented Jan 19, 2024

Flaky tests detected in 7bdf71f.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/7639313281
📝 Reported issues:

@ellatrix ellatrix force-pushed the try/avoid-patterns-fetching-on-load-3 branch from cf64f9c to 68f3515 Compare January 19, 2024 22:10
@@ -4205,382 +4201,6 @@ describe( 'selectors', () => {
} );
} );

describe( '__experimentalGetAllowedPatterns', () => {
Copy link
Member Author

Choose a reason for hiding this comment

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

These tests are moved to a separate file (above), because they now depend on a registered store.

@@ -0,0 +1,6 @@
export const getFetchedPatterns =
Copy link
Member Author

Choose a reason for hiding this comment

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

Note that this resolves a private selector.

( state ) => [ getAllPatterns( state ) ]
);

const getAllAllowedPatterns = createSelector(
Copy link
Member Author

Choose a reason for hiding this comment

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

Was not exposed, so absorbed it into __experimentalGetAllowedPatterns.

*/
import { INSERTER_PATTERN_TYPES } from '../components/inserter/block-patterns-tab/utils';

export const getUserPatterns = createSelector(
Copy link
Member Author

Choose a reason for hiding this comment

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

I absorbed this into the getAllPatterns private selector.

@ellatrix ellatrix force-pushed the try/avoid-patterns-fetching-on-load-3 branch from 0a77097 to e559aab Compare January 22, 2024 21:15
@@ -0,0 +1,6 @@
export const getFetchedPatterns =
( fetch ) =>
Copy link
Contributor

Choose a reason for hiding this comment

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

If I'm not wrong, "fetch" comes from the store itself, so why not select it instead?

Copy link
Member

Choose a reason for hiding this comment

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

On a related note, what happens when the __exFetchBlockPatterns setting changes? Do we detect that and invalidate/refetch the resolved selector state, or ignore the change and resolve only once, with the "fetch" function that was present at the time?

Copy link
Member Author

Choose a reason for hiding this comment

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

It was a remnant from old code, will adjust it

Copy link
Member Author

Choose a reason for hiding this comment

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

Adjusted :) I also added shouldInvalidate.

__experimentalBlockPatterns,
__experimentalFetchBlockPatterns,
__experimentalUserPatternCategories = [],
__experimentalReusableBlocks = [],
Copy link
Member

Choose a reason for hiding this comment

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

Note that __exUserPatternCategories, __exReusableBlocks and __exBlockPatternCategories are exactly the same kind of setting as __exBlockPatterns: their true source is also an async REST endpoint, and they are fetched prematurely on editor load, in the block editor provider component.

We should also migrate them to this new approach with a "fetch" function in settings. It's not a blocker for this PR, but something we should think about.

How will we have to change getAllPatterns and other selectors when there is also a getFetchedX selector+resolver also for the three other entities? Will it be a straightforward change?

Copy link
Member Author

Choose a reason for hiding this comment

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

That is exactly the plan 🙂

Copy link
Member Author

Choose a reason for hiding this comment

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

And yes the others should be more straightforward

...__experimentalBlockPatterns,
...unlock( select( store ) ).getFetchedPatterns(
__experimentalFetchBlockPatterns
),
Copy link
Member

Choose a reason for hiding this comment

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

Maybe, instead of merging __exBlockPatterns and __experimentalFetchBlockPatterns, we should treat __exBlockPatterns as a legacy fallback: use it only when __experimentalFetchBlockPatterns is not specified at all. Then __exBlockPatterns feels more like a deprecated setting rather than one of two supported alternatives.

Copy link
Member Author

Choose a reason for hiding this comment

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

Ok, done

Copy link
Member Author

Choose a reason for hiding this comment

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

I changed this back to the original because there's still a use case for loading patterns locally through the settings without it triggering a re-fetch from the server. We can polish this later I guess if we would still like to unify it.

@@ -0,0 +1,6 @@
export const getFetchedPatterns =
( fetch ) =>
Copy link
Member

Choose a reason for hiding this comment

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

On a related note, what happens when the __exFetchBlockPatterns setting changes? Do we detect that and invalidate/refetch the resolved selector state, or ignore the change and resolve only once, with the "fetch" function that was present at the time?

}
return {
...pattern,
blocks: parse( pattern.content, {
Copy link
Member

Choose a reason for hiding this comment

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

This is another thing to think about: with lazy block loading, the parse function becomes async and __exGetParsedPattern must become a selector with resolver and associated reducer state. And all the callers, like _exGetAllowedPatterns, must be modified accordingly. I had it working in the #51778, but it deteriorated over time as pattern code in trunk got modified. And this PR will force another update.

Copy link
Member Author

Choose a reason for hiding this comment

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

Is it a blocker for this PR? Should I adjust anything?

Copy link
Member

Choose a reason for hiding this comment

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

Not a blocker, just something to consider -- that we'll probably want to evolve in that direction in near future. Is this PR going in the same direction (making that change easier) or in the opposite direction (making it harder)?

Copy link
Member Author

Choose a reason for hiding this comment

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

Not sure it makes it easier or harder, it's probably the same as before. The only difference is that you can now take advantage of resolvers, so that might help.

const blockPatterns = __experimentalFetchBlockPatterns
? unlock( select( store ) ).getFetchedPatterns()
: __experimentalBlockPatterns;
return [ ...userPatterns, ...blockPatterns ];
Copy link
Member

Choose a reason for hiding this comment

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

The blockPatterns variable will be undefined when neither setting is specified, and then the array spread will crash. We'll need to default __experimentalFetchBlockPatterns to [] or something similar.

Copy link
Member Author

Choose a reason for hiding this comment

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

Defaulted __experimentalBlockPatterns. Also changed getFetchedPatterns to always return an array.

const restPatterns = await apiFetch( {
path: '/wp/v2/block-patterns/patterns',
} );
return restPatterns?.map( ( pattern ) =>
Copy link
Member

Choose a reason for hiding this comment

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

This ?. optional chaining, if restPatterns is ever truly null-ish, leads to fetchBlockPatterns returning null, and that value will then sneak into Redux state, which expects array. Let's make sure the return value is always an array.

Copy link
Member Author

Choose a reason for hiding this comment

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

Fixed :)

@ellatrix ellatrix force-pushed the try/avoid-patterns-fetching-on-load-3 branch from a497f0d to 43522b7 Compare January 23, 2024 14:30
Copy link
Member

@jsnajdr jsnajdr left a comment

Choose a reason for hiding this comment

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

I have nothing more to add 🙂

@ellatrix ellatrix force-pushed the try/avoid-patterns-fetching-on-load-3 branch from 43522b7 to cb49561 Compare January 24, 2024 09:52
@ellatrix ellatrix enabled auto-merge (squash) January 24, 2024 09:55
@ellatrix ellatrix merged commit 8db42b1 into trunk Jan 24, 2024
56 checks passed
@ellatrix ellatrix deleted the try/avoid-patterns-fetching-on-load-3 branch January 24, 2024 11:42
@github-actions github-actions bot added this to the Gutenberg 17.6 milestone Jan 24, 2024
@ellatrix
Copy link
Member Author

Thanks for the review @jsnajdr!

@Mamaduka
Copy link
Member

Mamaduka commented Feb 6, 2024

@ellatrix, based on git bisect, this refactoring might have introduced the bug in the Site Editor's inserter. See #58665.

@jsnajdr
Copy link
Member

jsnajdr commented Feb 7, 2024

@Mamaduka can you try applying #58661 and seeing if it fixes the issue? It's a further improvement to the pattern loading code from this PR (#57999) and I think it's likely to solve issues like this.

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.

4 participants