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

Experiment: Measure performance impact of loading blocks and patterns #33804

Closed
wants to merge 5 commits into from

Conversation

gziolo
Copy link
Member

@gziolo gziolo commented Aug 1, 2021

Description

Opened to measure the impact of loading core blocks and block patterns on the block editor's performance.

I want to check the performance metrics when:

  • core block patterns are removed
  • non-essential core blocks are removed

@gziolo gziolo added the [Type] Performance Related to performance efforts label Aug 1, 2021
@gziolo gziolo self-assigned this Aug 1, 2021
@gziolo gziolo force-pushed the try/performance-blocks branch from bc51546 to c850d47 Compare August 2, 2021 05:43
@gziolo
Copy link
Member Author

gziolo commented Aug 2, 2021

Block Patterns removed

Screen Shot 2021-08-02 at 09 18 30

I see load time decrease by 182 ms, which is 3% faster. It's still in the range of the testing error that was estimated at 5%.

@github-actions
Copy link

github-actions bot commented Aug 2, 2021

Size Change: -117 kB (-11%) 👏

Total Size: 960 kB

Filename Size Change
build/a11y/index.min.js 1.12 kB -1 B (0%)
build/annotations/index.min.js 2.93 kB +1 B (0%)
build/api-fetch/index.min.js 2.44 kB +1 B (0%)
build/block-directory/index.min.js 6.61 kB -2 B (0%)
build/block-editor/index.min.js 127 kB +66 B (0%)
build/block-library/index.min.js 30.8 kB -116 kB (-79%) 🏆
build/blocks/index.min.js 47.3 kB +20 B (0%)
build/components/index.min.js 197 kB -535 B (0%)
build/compose/index.min.js 10.2 kB +1 B (0%)
build/customize-widgets/index.min.js 10.8 kB +231 B (+2%)
build/data-controls/index.min.js 828 B -3 B (0%)
build/data/index.min.js 7.22 kB -2 B (0%)
build/deprecated/index.min.js 737 B -1 B (0%)
build/edit-post/index.min.js 59.5 kB +5 B (0%)
build/edit-site/index.min.js 26 kB +15 B (0%)
build/edit-widgets/index.min.js 16.6 kB +74 B (0%)
build/editor/index.min.js 38.2 kB -62 B (0%)
build/element/index.min.js 3.44 kB -3 B (0%)
build/format-library/index.min.js 5.71 kB -3 B (0%)
build/hooks/index.min.js 1.76 kB -1 B (0%)
build/keyboard-shortcuts/index.min.js 1.74 kB -2 B (0%)
build/list-reusable-blocks/index.min.js 2.07 kB +2 B (0%)
build/media-utils/index.min.js 3.08 kB +1 B (0%)
build/notices/index.min.js 1.07 kB +1 B (0%)
build/nux/index.min.js 2.31 kB -1 B (0%)
build/plugins/index.min.js 1.98 kB -6 B (0%)
build/priority-queue/index.min.js 790 B -1 B (0%)
build/react-i18n/index.min.js 925 B +1 B (0%)
build/redux-routine/index.min.js 2.82 kB -1 B (0%)
build/rich-text/index.min.js 10.8 kB +15 B (0%)
build/server-side-render/index.min.js 1.63 kB -8 B (0%)
build/token-list/index.min.js 847 B -1 B (0%)
build/viewport/index.min.js 1.28 kB -5 B (0%)
build/warning/index.min.js 1.16 kB -1 B (0%)
ℹ️ View Unchanged
Filename Size
build/admin-manifest/index.min.js 1.46 kB
build/autop/index.min.js 2.28 kB
build/blob/index.min.js 673 B
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/style-rtl.css 13.9 kB
build/block-editor/style.css 13.8 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 474 B
build/block-library/blocks/button/editor.css 474 B
build/block-library/blocks/button/style-rtl.css 605 B
build/block-library/blocks/button/style.css 604 B
build/block-library/blocks/buttons/editor-rtl.css 315 B
build/block-library/blocks/buttons/editor.css 315 B
build/block-library/blocks/buttons/style-rtl.css 370 B
build/block-library/blocks/buttons/style.css 370 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 189 B
build/block-library/blocks/columns/editor.css 188 B
build/block-library/blocks/columns/style-rtl.css 474 B
build/block-library/blocks/columns/style.css 475 B
build/block-library/blocks/cover/editor-rtl.css 666 B
build/block-library/blocks/cover/editor.css 670 B
build/block-library/blocks/cover/style-rtl.css 1.23 kB
build/block-library/blocks/cover/style.css 1.23 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 400 B
build/block-library/blocks/embed/style.css 400 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 711 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 707 B
build/block-library/blocks/gallery/editor.css 706 B
build/block-library/blocks/gallery/style-rtl.css 1.05 kB
build/block-library/blocks/gallery/style.css 1.05 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 93 B
build/block-library/blocks/group/theme.css 93 B
build/block-library/blocks/heading/editor-rtl.css 152 B
build/block-library/blocks/heading/editor.css 152 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 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 283 B
build/block-library/blocks/html/editor.css 284 B
build/block-library/blocks/image/editor-rtl.css 728 B
build/block-library/blocks/image/editor.css 728 B
build/block-library/blocks/image/style-rtl.css 482 B
build/block-library/blocks/image/style.css 487 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 63 B
build/block-library/blocks/list/style.css 63 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 488 B
build/block-library/blocks/media-text/style.css 485 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 474 B
build/block-library/blocks/navigation-link/editor.css 474 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/editor-rtl.css 1.67 kB
build/block-library/blocks/navigation/editor.css 1.68 kB
build/block-library/blocks/navigation/style-rtl.css 1.65 kB
build/block-library/blocks/navigation/style.css 1.64 kB
build/block-library/blocks/navigation/view.min.js 2.84 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 310 B
build/block-library/blocks/page-list/editor.css 310 B
build/block-library/blocks/page-list/style-rtl.css 242 B
build/block-library/blocks/page-list/style.css 242 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 248 B
build/block-library/blocks/paragraph/style.css 248 B
build/block-library/blocks/post-author/editor-rtl.css 210 B
build/block-library/blocks/post-author/editor.css 210 B
build/block-library/blocks/post-author/style-rtl.css 182 B
build/block-library/blocks/post-author/style.css 181 B
build/block-library/blocks/post-comments-form/style-rtl.css 140 B
build/block-library/blocks/post-comments-form/style.css 140 B
build/block-library/blocks/post-comments/style-rtl.css 360 B
build/block-library/blocks/post-comments/style.css 359 B
build/block-library/blocks/post-content/editor-rtl.css 138 B
build/block-library/blocks/post-content/editor.css 138 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 412 B
build/block-library/blocks/post-featured-image/editor.css 412 B
build/block-library/blocks/post-featured-image/style-rtl.css 143 B
build/block-library/blocks/post-featured-image/style.css 143 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 378 B
build/block-library/blocks/post-template/style.css 379 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 361 B
build/block-library/blocks/pullquote/style.css 360 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 270 B
build/block-library/blocks/query-pagination/editor.css 262 B
build/block-library/blocks/query-pagination/style-rtl.css 168 B
build/block-library/blocks/query-pagination/style.css 168 B
build/block-library/blocks/query-title/editor-rtl.css 85 B
build/block-library/blocks/query-title/editor.css 85 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 169 B
build/block-library/blocks/quote/style.css 169 B
build/block-library/blocks/quote/theme-rtl.css 220 B
build/block-library/blocks/quote/theme.css 222 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 209 B
build/block-library/blocks/search/editor.css 209 B
build/block-library/blocks/search/style-rtl.css 368 B
build/block-library/blocks/search/style.css 372 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 250 B
build/block-library/blocks/separator/style.css 250 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 462 B
build/block-library/blocks/site-logo/editor.css 464 B
build/block-library/blocks/site-logo/style-rtl.css 153 B
build/block-library/blocks/site-logo/style.css 153 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 165 B
build/block-library/blocks/social-link/editor.css 165 B
build/block-library/blocks/social-links/editor-rtl.css 812 B
build/block-library/blocks/social-links/editor.css 811 B
build/block-library/blocks/social-links/style-rtl.css 1.33 kB
build/block-library/blocks/social-links/style.css 1.33 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 636 B
build/block-library/blocks/template-part/editor.css 635 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/editor-rtl.css 90 B
build/block-library/blocks/term-description/editor.css 90 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 1.29 kB
build/block-library/common.css 1.29 kB
build/block-library/editor-rtl.css 9.87 kB
build/block-library/editor.css 9.85 kB
build/block-library/reset-rtl.css 514 B
build/block-library/reset.css 514 B
build/block-library/style-rtl.css 10.2 kB
build/block-library/style.css 10.2 kB
build/block-library/theme-rtl.css 688 B
build/block-library/theme.css 692 B
build/block-serialization-default-parser/index.min.js 1.3 kB
build/block-serialization-spec-parser/index.min.js 3.06 kB
build/components/style-rtl.css 15.8 kB
build/components/style.css 15.8 kB
build/core-data/index.min.js 12.6 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/date/index.min.js 31.8 kB
build/dom-ready/index.min.js 576 B
build/dom/index.min.js 4.78 kB
build/edit-navigation/index.min.js 13.9 kB
build/edit-navigation/style-rtl.css 3.1 kB
build/edit-navigation/style.css 3.1 kB
build/edit-post/classic-rtl.css 479 B
build/edit-post/classic.css 481 B
build/edit-post/style-rtl.css 7.19 kB
build/edit-post/style.css 7.18 kB
build/edit-site/style-rtl.css 5.01 kB
build/edit-site/style.css 5.01 kB
build/edit-widgets/style-rtl.css 4.01 kB
build/edit-widgets/style.css 4.02 kB
build/editor/style-rtl.css 3.92 kB
build/editor/style.css 3.91 kB
build/escape-html/index.min.js 739 B
build/format-library/style-rtl.css 668 B
build/format-library/style.css 669 B
build/html-entities/index.min.js 628 B
build/i18n/index.min.js 3.73 kB
build/is-shallow-equal/index.min.js 710 B
build/keycodes/index.min.js 1.49 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/primitives/index.min.js 1.06 kB
build/reusable-blocks/index.min.js 2.56 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/shortcode/index.min.js 1.68 kB
build/url/index.min.js 1.95 kB
build/widgets/index.min.js 6.48 kB
build/widgets/style-rtl.css 1.04 kB
build/widgets/style.css 1.04 kB
build/wordcount/index.min.js 1.24 kB

compressed-size-action

@gziolo
Copy link
Member Author

gziolo commented Aug 2, 2021

Most of the core block and all block patterns removed

Screen Shot 2021-08-02 at 12 28 48

I see load time decrease by ~352 ms, which is 5% faster. It's still in the range of the testing error that was estimated at 5%. I would be curious to learn what has the biggest impact on the loading time here – my initial assumption is the time to render all test blocks.

Another observation is that maxInserterOpen gets improved by ~85 ms which is nearly 18% faster. That is expected because we render only a handful of blocks. The good news is that the most recent optimizations applied by @youknowriad with the help from @gwwar in #33749 aren't very sensitive to the number of total blocks rendered anymore.

It's also worth mentioning but the removed core blocks contribute to over 11% of the download size (CSS + JS) when loading the block editor:

Screen Shot 2021-08-02 at 12 50 05

@gziolo
Copy link
Member Author

gziolo commented Aug 2, 2021

Most of the core block and all block patterns removed, only blocks present in the loaded post

Screen Shot 2021-08-02 at 13 42 03

I see load time decrease by 95 ms, which is 8% faster. It's also evident that the size of the post is the largest factor that impacts the loading time. It's over 5 seconds decrease, which is 80% faster, when comparing the loading time for trunk in the case where only 3 blocks get loaded instead of the large post.

The conclusion is that core block and core block patterns don't have that much impact on the loading time, at least in the case of the e2e test scenario. We should seek for different testing approaches to validate how the bundle size increase for core blocks impacts the perceived performance of the block editor.

@gziolo gziolo requested review from youknowriad and gwwar August 2, 2021 11:53
@gziolo gziolo added the [Status] In Progress Tracking issues with work in progress label Aug 2, 2021
@gwwar
Copy link
Contributor

gwwar commented Aug 2, 2021

Related is also #33767 where I tested not rendering drag/icons. 🤔 there is some impact, but we may want to keep 🔍 for why these are as slow for the number of items. (For example, maybe we're triggering a number of updates).

┌──────────────────┬──────────────────────────────────────────┬─────────────┐
│     (index)      │ 6e17a6b56b47f7afc05c73f0484e0c7b3acf3324 │    trunk    │
├──────────────────┼──────────────────────────────────────────┼─────────────┤
│       load       │               '6253.6 ms'                │ '6420.2 ms' │
│       type       │                '31.73 ms'                │  '36.3 ms'  │
│     minType      │                '25.47 ms'                │ '30.17 ms'  │
│     maxType      │                '63.16 ms'                │ '68.43 ms'  │
│      focus       │               '113.05 ms'                │ '73.18 ms'  │
│     minFocus     │                '57.94 ms'                │ '61.29 ms'  │
│     maxFocus     │               '315.45 ms'                │ '121.83 ms' │
│   inserterOpen   │               '203.71 ms'                │ '296.25 ms' │
│ minInserterOpen  │               '152.52 ms'                │ '234.28 ms' │
│ maxInserterOpen  │                '537.8 ms'                │ '647.84 ms' │
│  inserterHover   │                '23.61 ms'                │ '24.74 ms'  │
│ minInserterHover │                '18.42 ms'                │ '19.59 ms'  │
│ maxInserterHover │                '42.26 ms'                │ '34.85 ms'  │
└──────────────────┴──────────────────────────────────────────┴─────────────┘

@gwwar
Copy link
Contributor

gwwar commented Aug 2, 2021

Btw if folks are looking for leads on improving loading time, a handy thing to do in Chrome is use the "Start profiling and reload page" button, and make sure web vitals is checked.

Reload Web Vitals
Screen Shot 2021-08-02 at 8 50 09 AM Screen Shot 2021-08-02 at 9 02 39 AM

Then I'd go through interesting network requests / remove JS to parse / any long running tasks to find any chunks to experiment with. To get a sense of potential gains it can make sense to fully comment out a piece to see if it's worth trying to optimize. (If there isn't a sizable impact we can skip to some other idea).

  • This is going to be sensitive to development vs production builds, so be sure to verify an idea early with npm build vs npm run dev.
  • Also test on a guest profile (that doesn't have any extensions set/indexedDB/localStorage data).

@gwwar
Copy link
Contributor

gwwar commented Aug 2, 2021

Thanks for testing this @gziolo!

The conclusion is that core block and core block patterns don't have that much impact on the loading time, at least in the case of the e2e test scenario. We should seek for different testing approaches to validate how the bundle size increase for core blocks impacts the perceived performance of the block editor.

I just did a quick check on trunk to see how much time is taken to parse JS from the block-library package. The package is sizable, but I saw several other JS dependencies that were as large or larger.

One thing that stands out is how many other JS dependencies we have for the block editor. It might be interesting to separate out what's needed for wp-admin screens vs the block-editor (or what can be deferred for on demand or async loading). For example, is jQuery/backbone/underscore necessary when we're in fullscreen mode? Can we remove the moment dependency? Are we using all components from the component package? And so on...

Screen Shot 2021-08-02 at 9 24 19 AM

@gziolo
Copy link
Member Author

gziolo commented Aug 4, 2021

One more thing. I discovered there is Size Limit GitHub Action: https://github.com/ai/size-limit.

Size Limit is a performance budget tool for JavaScript. It checks every commit on CI, calculates the real cost of your JS for end-users and throws an error if the cost exceeds the limit.

It not only calculates bundle sizes like "Compressed Size" GitHub action but it also can:

  • calculate the time it would take a browser to download and execute your JS
  • calculations include all dependencies and polyfills used in your JS

One thing that stands out is how many other JS dependencies we have for the block editor. It might be interesting to separate out what's needed for wp-admin screens vs the block-editor (or what can be deferred for on demand or async loading). For example, is jQuery/backbone/underscore necessary when we're in fullscreen mode?

I filed an issue #32665 some time ago that proposes to move the Classic block and Meta Boxes to their own package so it is loaded only with the post editor. The rationale behind that was to eventually stop loading jQuery or TinyMCE when those features aren't used.

Can we remove the moment dependency?

There was a failed attempt to replace moment with date-fns. We should try it again, the blockers were detected only on the backward compatibility front - it's a very fragile one though.

Are we using all components from the component package? And so on...

This is where backward compatibility concern kicks in. Even when WordPress core doesn't use some of the components, they are part of public API so they need to be shipped in @wordpress/components because 3rd party projects may want to use them. In general, once something becomes public API, we can't tree-shake it.

@gwwar
Copy link
Contributor

gwwar commented Aug 4, 2021

One more thing. I discovered there is Size Limit GitHub Action: https://github.com/ai/size-limit.

Oh that's a neat one ✨ Probably very useful to put that up or something similar, especially if we'd like to keep things fast loading after a round of loading improvements.

There was a failed attempt to replace moment with date-fns. We should try it again, the blockers were detected only on the backward compatibility front - it's a very fragile one though.

Very tempting to 👀 again on that since there are only a few usages.

I filed an issue #32665 some time ago that proposes to move the Classic block and Meta Boxes to their own package

Nice I'll try to catch up 👀 on related PRs

This is where backward compatibility concern kicks in. Even when WordPress core doesn't use some of the components, they are part of public API so they need to be shipped in @wordpress/components because 3rd party projects may want to use them. In general, once something becomes public API, we can't tree-shake it.

That's a good point. Over time we'll probably still need to think through a strategy for what might be a core/necessary component, vs opt-in extras. It feels like the package will naturally grow over time otherwise.

@gziolo
Copy link
Member Author

gziolo commented Aug 10, 2021

#33903 from @youknowriad is close to land. It improves the loading time by nearly 5% for the post editor thanks to some optimizations to the block parsing logic. I'm about to change the base branch here to see how the loading time changes relative to the setup in this test branch. Although, there should be really no difference here.

Update, there is no much difference with #33804 (comment). It's still 8% which isn't surprising because there are only a few blocks to parse in the tweaked perf test...

@gziolo gziolo changed the base branch from trunk to update/only-fix-classnames-if-needed August 10, 2021 07:34
Base automatically changed from update/only-fix-classnames-if-needed to trunk August 10, 2021 10:11
@gziolo
Copy link
Member Author

gziolo commented Aug 11, 2021

Let's close this PR. I will perform some more measurements separately. I'd like to play with the profiler as recommended by @gwwar in #33804 (comment) 🙇🏻

@gziolo gziolo closed this Aug 11, 2021
@gziolo gziolo deleted the try/performance-blocks branch August 11, 2021 05:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Status] In Progress Tracking issues with work in progress [Type] Performance Related to performance efforts
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants