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

List View: fix pagedown/pageup and improve scrolling #36063

Merged
merged 4 commits into from
Nov 4, 2021

Conversation

gwwar
Copy link
Contributor

@gwwar gwwar commented Oct 28, 2021

Follow up to #35230, this PR improves scrolling in List View by:

  • Memoing the List View block and the BlockIcon
  • Tunes the windowOverscan value to 40 instead of the number of currently visible items.
  • Fixes a bug around the keyboard handler using a stale reference (so we were moving by 30 items instead of the visible window).

Why the memo? When we scroll the list of virtualized items we should render changes. This object is passed to the branch component, and when that branch updates all children of that branch render too. By memoing we avoid needing to re-render all items in the window.

I think this can be improved further, but we can tackle that in future profiling passes.

Testing Instructions

  • Less white area is visible while scrolling in List View
  • No regressions in List View functionality
  • Dragging should be improved
  • No regressions in test performance results from CI

Example of ListView scroll with ~900 blocks:

CleanShot.2021-10-28.at.16.07.23.mp4

CleanShot 2021-10-28 at 16 09 24

@gwwar gwwar added [Type] Performance Related to performance efforts [Feature] List View Menu item in the top toolbar to select blocks from a list of links. [Package] Block editor /packages/block-editor labels Oct 28, 2021
@gwwar gwwar self-assigned this Oct 28, 2021
@gwwar gwwar requested review from talldan and youknowriad October 28, 2021 22:40
@github-actions
Copy link

github-actions bot commented Oct 28, 2021

Size Change: +28 B (0%)

Total Size: 1.08 MB

Filename Size Change
build/block-editor/index.min.js 136 kB +16 B (0%)
build/compose/index.min.js 10.9 kB +12 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 931 B
build/admin-manifest/index.min.js 1.09 kB
build/annotations/index.min.js 2.7 kB
build/api-fetch/index.min.js 2.17 kB
build/autop/index.min.js 2.08 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.2 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/style-rtl.css 14.1 kB
build/block-editor/style.css 14.1 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 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 58 B
build/block-library/blocks/audio/editor.css 58 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 470 B
build/block-library/blocks/button/editor.css 470 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 309 B
build/block-library/blocks/buttons/editor.css 309 B
build/block-library/blocks/buttons/style-rtl.css 317 B
build/block-library/blocks/buttons/style.css 317 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 131 B
build/block-library/blocks/code/theme.css 131 B
build/block-library/blocks/columns/editor-rtl.css 206 B
build/block-library/blocks/columns/editor.css 205 B
build/block-library/blocks/columns/style-rtl.css 497 B
build/block-library/blocks/columns/style.css 496 B
build/block-library/blocks/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.17 kB
build/block-library/blocks/cover/style.css 1.17 kB
build/block-library/blocks/embed/editor-rtl.css 488 B
build/block-library/blocks/embed/editor.css 488 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 322 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 977 B
build/block-library/blocks/gallery/editor.css 982 B
build/block-library/blocks/gallery/style-rtl.css 1.6 kB
build/block-library/blocks/gallery/style.css 1.59 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 159 B
build/block-library/blocks/group/editor.css 159 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 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/home-link/style-rtl.css 247 B
build/block-library/blocks/home-link/style.css 247 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 731 B
build/block-library/blocks/image/editor.css 730 B
build/block-library/blocks/image/style-rtl.css 502 B
build/block-library/blocks/image/style.css 505 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B
build/block-library/blocks/latest-posts/editor.css 137 B
build/block-library/blocks/latest-posts/style-rtl.css 528 B
build/block-library/blocks/latest-posts/style.css 527 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 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 493 B
build/block-library/blocks/media-text/style.css 490 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 642 B
build/block-library/blocks/navigation-link/editor.css 642 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/style-rtl.css 195 B
build/block-library/blocks/navigation-submenu/style.css 195 B
build/block-library/blocks/navigation-submenu/view.min.js 343 B
build/block-library/blocks/navigation/editor-rtl.css 1.83 kB
build/block-library/blocks/navigation/editor.css 1.84 kB
build/block-library/blocks/navigation/style-rtl.css 1.72 kB
build/block-library/blocks/navigation/style.css 1.7 kB
build/block-library/blocks/navigation/view.min.js 2.74 kB
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 198 B
build/block-library/blocks/page-list/style.css 198 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 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/style-rtl.css 347 B
build/block-library/blocks/post-comments-form/style.css 347 B
build/block-library/blocks/post-comments/style-rtl.css 492 B
build/block-library/blocks/post-comments/style.css 493 B
build/block-library/blocks/post-content/style-rtl.css 56 B
build/block-library/blocks/post-content/style.css 56 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 396 B
build/block-library/blocks/post-featured-image/editor.css 397 B
build/block-library/blocks/post-featured-image/style-rtl.css 156 B
build/block-library/blocks/post-featured-image/style.css 156 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 391 B
build/block-library/blocks/post-template/style.css 392 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 60 B
build/block-library/blocks/post-title/style.css 60 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 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 378 B
build/block-library/blocks/pullquote/style.css 378 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 262 B
build/block-library/blocks/query-pagination/editor.css 255 B
build/block-library/blocks/query-pagination/style-rtl.css 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 187 B
build/block-library/blocks/quote/style.css 187 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 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 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 245 B
build/block-library/blocks/separator/style.css 245 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 770 B
build/block-library/blocks/site-logo/editor.css 770 B
build/block-library/blocks/site-logo/style-rtl.css 165 B
build/block-library/blocks/site-logo/style.css 165 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 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 824 B
build/block-library/blocks/social-links/editor.css 823 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB
build/block-library/blocks/social-links/style.css 1.32 kB
build/block-library/blocks/spacer/editor-rtl.css 307 B
build/block-library/blocks/spacer/editor.css 307 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 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 146 B
build/block-library/blocks/tag-cloud/style.css 146 B
build/block-library/blocks/template-part/editor-rtl.css 560 B
build/block-library/blocks/template-part/editor.css 559 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/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 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 571 B
build/block-library/blocks/video/editor.css 572 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 815 B
build/block-library/common.css 812 B
build/block-library/editor-rtl.css 9.8 kB
build/block-library/editor.css 9.8 kB
build/block-library/index.min.js 157 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/style-rtl.css 10.5 kB
build/block-library/style.css 10.5 kB
build/block-library/theme-rtl.css 668 B
build/block-library/theme.css 673 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/blocks/index.min.js 46 kB
build/components/index.min.js 212 kB
build/components/style-rtl.css 15.4 kB
build/components/style.css 15.4 kB
build/core-data/index.min.js 12.7 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 614 B
build/data/index.min.js 7.15 kB
build/date/index.min.js 31.5 kB
build/deprecated/index.min.js 428 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.44 kB
build/edit-navigation/index.min.js 15.9 kB
build/edit-navigation/style-rtl.css 3.76 kB
build/edit-navigation/style.css 3.76 kB
build/edit-post/classic-rtl.css 492 B
build/edit-post/classic.css 494 B
build/edit-post/index.min.js 29.4 kB
build/edit-post/style-rtl.css 7.12 kB
build/edit-post/style.css 7.12 kB
build/edit-site/index.min.js 30.9 kB
build/edit-site/style-rtl.css 5.79 kB
build/edit-site/style.css 5.78 kB
build/edit-widgets/index.min.js 16.4 kB
build/edit-widgets/style-rtl.css 4.17 kB
build/edit-widgets/style.css 4.18 kB
build/editor/index.min.js 37.4 kB
build/editor/style-rtl.css 3.78 kB
build/editor/style.css 3.77 kB
build/element/index.min.js 3.21 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 6.34 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.6 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.72 kB
build/keycodes/index.min.js 1.3 kB
build/list-reusable-blocks/index.min.js 1.85 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.92 kB
build/notices/index.min.js 845 B
build/nux/index.min.js 2.03 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.83 kB
build/primitives/index.min.js 921 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/redux-routine/index.min.js 2.63 kB
build/reusable-blocks/index.min.js 2.19 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.7 kB
build/server-side-render/index.min.js 1.52 kB
build/shortcode/index.min.js 1.48 kB
build/token-list/index.min.js 562 B
build/url/index.min.js 1.82 kB
build/viewport/index.min.js 1.02 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.11 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@gwwar gwwar requested review from mkaz and ramonjd October 28, 2021 23:15
@gwwar
Copy link
Contributor Author

gwwar commented Oct 29, 2021

Perf results: (As expected there isn't any regressions in list view open).

>> post-editor

┌──────────────────────┬──────────────────────────────────────────┬──────────────┐
│       (index)        │ 11e88b319701e35cf5c1da30b4ebd81e6ca4f6cf │    trunk     │
├──────────────────────┼──────────────────────────────────────────┼──────────────┤
│    serverResponse    │                '241.1 ms'                │ '240.26 ms'  │
│      firstPaint      │                '23.32 ms'                │  '20.66 ms'  │
│   domContentLoaded   │                '274.3 ms'                │ '279.44 ms'  │
│        loaded        │               '283.18 ms'                │ '288.28 ms'  │
│ firstContentfulPaint │               '5307.54 ms'               │ '5648.14 ms' │
│      firstBlock      │               '5926.88 ms'               │ '6287.56 ms' │
│         type         │                '40.15 ms'                │  '40.11 ms'  │
│       minType        │                '33.79 ms'                │  '34.87 ms'  │
│       maxType        │                '51.97 ms'                │  '49.83 ms'  │
│        focus         │               '160.12 ms'                │  '161.9 ms'  │
│       minFocus       │               '121.83 ms'                │  '115.9 ms'  │
│       maxFocus       │               '373.81 ms'                │ '393.72 ms'  │
│     inserterOpen     │               '264.96 ms'                │ '274.56 ms'  │
│   minInserterOpen    │               '241.14 ms'                │ '249.41 ms'  │
│   maxInserterOpen    │               '431.59 ms'                │ '451.77 ms'  │
│    inserterSearch    │                '63.86 ms'                │   '68 ms'    │
│  minInserterSearch   │                '55.24 ms'                │  '57.36 ms'  │
│  maxInserterSearch   │                '71.27 ms'                │  '74.83 ms'  │
│    inserterHover     │                '33.17 ms'                │  '33.24 ms'  │
│   minInserterHover   │                '29.02 ms'                │  '29.65 ms'  │
│   maxInserterHover   │                '40.62 ms'                │  '37.88 ms'  │
│     listViewOpen     │               '460.26 ms'                │ '473.35 ms'  │
│   minListViewOpen    │               '439.16 ms'                │ '451.93 ms'  │
│   maxListViewOpen    │               '534.01 ms'                │ '545.38 ms'  │
└──────────────────────┴──────────────────────────────────────────┴──────────────┘

>> site-editor

┌──────────────────────┬──────────────────────────────────────────┬─────────────┐
│       (index)        │ 11e88b319701e35cf5c1da30b4ebd81e6ca4f6cf │    trunk    │
├──────────────────────┼──────────────────────────────────────────┼─────────────┤
│    serverResponse    │                '131.4 ms'                │ '132.43 ms' │
│      firstPaint      │                '464.6 ms'                │ '410.4 ms'  │
│   domContentLoaded   │               '453.03 ms'                │ '441.9 ms'  │
│        loaded        │               '655.17 ms'                │ '563.13 ms' │
│ firstContentfulPaint │                '464.6 ms'                │ '410.4 ms'  │
│      firstBlock      │               '6450.4 ms'                │ '6624.5 ms' │
│         type         │                '32.47 ms'                │ '32.69 ms'  │
│       minType        │                '27.75 ms'                │ '28.05 ms'  │
│       maxType        │                '74.02 ms'                │ '69.07 ms'  │
└──────────────────────┴──────────────────────────────────────────┴─────────────┘

@gwwar gwwar requested review from nerrad and ntwb as code owners October 29, 2021 18:31
@gwwar
Copy link
Contributor Author

gwwar commented Oct 29, 2021

With the list view block memo, I do need to move back querying selected state on the parent component to avoid having multiple items lag (with the selected styling when we add blocks). With manual testing I don't think this should degrade block focus times, but I updated the typing/focus test to have list view open in 5f1d64a

before after
CleanShot 2021-10-29 at 11 51 44 CleanShot 2021-10-29 at 11 49 39

@gwwar
Copy link
Contributor Author

gwwar commented Oct 29, 2021

Nice, it looks like focus results (with list view open) are reasonable, and there are no changes to list view open. This one is ready for review 👍

│        focus         │                '191.3 ms'                │ '177.87 ms'  │
│       minFocus       │                '1.21 ms'                 │  '1.15 ms'   │
│       maxFocus       │               '545.72 ms'                │ '520.51 ms'  │
>> post-editor

┌──────────────────────┬──────────────────────────────────────────┬──────────────┐
│       (index)        │ 93499c01d00f978d8d726689738e4bac61d76039 │    trunk     │
├──────────────────────┼──────────────────────────────────────────┼──────────────┤
│    serverResponse    │               '272.52 ms'                │ '266.64 ms'  │
│      firstPaint      │                '37.22 ms'                │   '67 ms'    │
│   domContentLoaded   │               '353.42 ms'                │  '349.2 ms'  │
│        loaded        │                 '365 ms'                 │ '360.48 ms'  │
│ firstContentfulPaint │               '6285.92 ms'               │ '6519.44 ms' │
│      firstBlock      │               '7259.52 ms'               │ '7596.74 ms' │
│         type         │                '53.71 ms'                │  '50.71 ms'  │
│       minType        │                '42.24 ms'                │  '40.53 ms'  │
│       maxType        │                '65.47 ms'                │  '67.99 ms'  │
│        focus         │                '191.3 ms'                │ '177.87 ms'  │
│       minFocus       │                '1.21 ms'                 │  '1.15 ms'   │
│       maxFocus       │               '545.72 ms'                │ '520.51 ms'  │
│     inserterOpen     │               '388.95 ms'                │ '391.46 ms'  │
│   minInserterOpen    │               '345.22 ms'                │  '344.2 ms'  │
│   maxInserterOpen    │               '635.86 ms'                │ '630.46 ms'  │
│    inserterSearch    │                '87.37 ms'                │  '94.75 ms'  │
│  minInserterSearch   │                '64.27 ms'                │  '63.7 ms'   │
│  maxInserterSearch   │               '117.44 ms'                │ '123.07 ms'  │
│    inserterHover     │                '36.7 ms'                 │  '35.17 ms'  │
│   minInserterHover   │                '27.6 ms'                 │  '29.45 ms'  │
│   maxInserterHover   │                '44.71 ms'                │  '45.7 ms'   │
│     listViewOpen     │                 '606 ms'                 │ '600.42 ms'  │
│   minListViewOpen    │               '565.42 ms'                │ '570.21 ms'  │
│   maxListViewOpen    │               '633.19 ms'                │  '627.4 ms'  │
└──────────────────────┴──────────────────────────────────────────┴──────────────┘

>> site-editor

┌──────────────────────┬──────────────────────────────────────────┬──────────────┐
│       (index)        │ 93499c01d00f978d8d726689738e4bac61d76039 │    trunk     │
├──────────────────────┼──────────────────────────────────────────┼──────────────┤
│    serverResponse    │               '169.73 ms'                │ '114.53 ms'  │
│      firstPaint      │                '521.7 ms'                │  '526.1 ms'  │
│   domContentLoaded   │                '595.2 ms'                │  '615.5 ms'  │
│        loaded        │                '691.2 ms'                │ '788.57 ms'  │
│ firstContentfulPaint │                '521.7 ms'                │  '526.1 ms'  │
│      firstBlock      │               '7584.6 ms'                │ '8192.77 ms' │
│         type         │                '36.23 ms'                │  '36.45 ms'  │
│       minType        │                '27.05 ms'                │  '29.09 ms'  │
│       maxType        │                '62.8 ms'                 │  '73.02 ms'  │
└──────────────────────┴──────────────────────────────────────────┴──────────────┘

@ramonjd
Copy link
Member

ramonjd commented Nov 1, 2021

I took this for a spin in Chrome, Firefox and Safari using a post with 385 blocks and nesting up to 5 layers deep. Here's what I'm seeing:

Nov-01-2021.13-40-49.mp4

I compared visually with trunk and noticed no real differences in rendering speed or the lag in element interactivity.

I ran the React Performance profiler while opening the List View panel, then scrolling to the bottom. For this action, React Profiler tells me that the BlockListView is rendered far fewer times (yellow bars):

Trunk:
Screen Shot 2021-11-01 at 1 35 43 pm

This branch:
Screen Shot 2021-11-01 at 1 37 31 pm

@gwwar
Copy link
Contributor Author

gwwar commented Nov 2, 2021

Thanks for testing @ramonjd@talldan @youknowriad what do you think of changes here? Would it be possible to have this land before code freeze?

@gwwar
Copy link
Contributor Author

gwwar commented Nov 2, 2021

Dropped changes to the performance test suite (that run typing and focus tests with list view open). See #36063 (comment) for how changes in this PR affect performance when list view is open.

…o avoid multiple items being styled as selected when they are not
@gwwar gwwar force-pushed the try/list-view-drag-scroll branch from e149f24 to 39eb49e Compare November 2, 2021 15:51
@gwwar
Copy link
Contributor Author

gwwar commented Nov 4, 2021

@mkaz I'm keeping half an eye on this one, but would it be possible to see if we can get some 👀 to help land this one? I think at a minimum we'll want to have the pageup/pagedown fix.

Adding in the list view block memo + selectedIds, should help bulletproof block focus performance when list view is open. It's pretty easy to regress at the moment accidentally.

@georgeh
Copy link
Contributor

georgeh commented Nov 4, 2021

Tested this in Firefox 94 with 800 blocks, and the scrolling performance is noticeably much better!

Dragging blocks triggers the interface much faster too, although it still feels too slow to trigger reliably. It's probably better to get this merged and then iterate on the dragging trigger later.

Copy link
Member

@mkaz mkaz left a comment

Choose a reason for hiding this comment

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

Agree with George's review, performance is better and an improvement overall.
Pageup/Pagedown scrolling works in List View with focus and not scrolling the center column.

👍 Let's go for it and iterate

@mkaz mkaz merged commit 6b4b8c4 into trunk Nov 4, 2021
@mkaz mkaz deleted the try/list-view-drag-scroll branch November 4, 2021 21:16
@github-actions github-actions bot added this to the Gutenberg 11.9 milestone Nov 4, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] List View Menu item in the top toolbar to select blocks from a list of links. [Package] Block editor /packages/block-editor [Type] Performance Related to performance efforts
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants