-
Notifications
You must be signed in to change notification settings - Fork 164
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
Production Build with Vaadin 24 is very slow on a large project #17234
Comments
First findings:
|
Pre compiles the regex pattern to improve build frontend performance during the bytecode scan and collection of reachable classes. Also adds some package exclusions for well knonw libraries that should not be visited. Part of #17234
A first improvement consists in pre-compiling the regular expression used to detect visitable classes.
|
Pre compiles the regex pattern to improve build frontend performance during the bytecode scan and collection of reachable classes. Also adds some package exclusions for well knonw libraries that should not be visited. Part of #17234
Pre compiles the regex pattern to improve build frontend performance during the bytecode scan and collection of reachable classes. Also adds some package exclusions for well knonw libraries that should not be visited. Part of #17234
Pre compiles the regex pattern to improve build frontend performance during the bytecode scan and collection of reachable classes. Also adds some package exclusions for well knonw libraries that should not be visited. Part of #17234 Co-authored-by: Marco Collovati <marco@vaadin.com>
Pre compiles the regex pattern to improve build frontend performance during the bytecode scan and collection of reachable classes. Also adds some package exclusions for well knonw libraries that should not be visited. Part of #17234
Pre compiles the regex pattern to improve build frontend performance during the bytecode scan and collection of reachable classes. Also adds some package exclusions for well knonw libraries that should not be visited. Part of #17234
Looking at log files for a very slow build, it seems that also |
Is it possible to also manually exclude classes / package names? In our project it scans about 11000 classes most of which have nothing to do with vaadin. It takes 80s |
That's a very good question @gpsfl In my project it is |
Vaadin 24 and 23 use a slightly different algorithm to validate the license during production build. |
It's probably more related to your Mac vs Jenkins 😅 |
@knoobie Indeed I'm still waiting for the build to finish on Jenkins. So far 25 minutes elapsed :-( |
In a production build, for every chunk the JS files are parsed to extract the imported paths. There are checks to ensure that a module is visited only once, but this works on a chunk level. This change caches the JS imports extraction results, so that a single JS file is visited only once during the build. Part of #17234
* chore: cache JS imported paths during chunk generation In a production build, for every chunk the JS files are parsed to extract the imported paths. There are checks to ensure that a module is visited only once, but this works on a chunk level. This change caches the JS imports extraction results, so that a single JS file is visited only once during the build. Part of #17234 * cleanup * improve caching of imported paths
* chore: cache JS imported paths during chunk generation In a production build, for every chunk the JS files are parsed to extract the imported paths. There are checks to ensure that a module is visited only once, but this works on a chunk level. This change caches the JS imports extraction results, so that a single JS file is visited only once during the build. Part of #17234 * cleanup * improve caching of imported paths
* chore: cache JS imported paths during chunk generation In a production build, for every chunk the JS files are parsed to extract the imported paths. There are checks to ensure that a module is visited only once, but this works on a chunk level. This change caches the JS imports extraction results, so that a single JS file is visited only once during the build. Part of #17234 * cleanup * improve caching of imported paths Co-authored-by: Marco Collovati <marco@vaadin.com>
* chore: cache JS imported paths during chunk generation In a production build, for every chunk the JS files are parsed to extract the imported paths. There are checks to ensure that a module is visited only once, but this works on a chunk level. This change caches the JS imports extraction results, so that a single JS file is visited only once during the build. Part of #17234 * cleanup * improve caching of imported paths
@simasch we just released Flow 24.1.13 which has an improvement for production build. If you mind getting it a try, you can follow Mikhail's instruction from this comment #17234 (comment) |
@mcollovati Unfortunately no change. The one with over 1 hour is with Flow 24.1.13 ![]() |
That is somehow surprising, compared with local results 🤔 |
* fix: Do not override user npm dependency version Fixes #17654 * chore(deps): bump com.nimbusds:nimbus-jose-jwt from 9.34 to 9.35 (#17652) Bumps [com.nimbusds:nimbus-jose-jwt](https://bitbucket.org/connect2id/nimbus-jose-jwt) from 9.34 to 9.35. - [Changelog](https://bitbucket.org/connect2id/nimbus-jose-jwt/src/master/CHANGELOG.txt) - [Commits](https://bitbucket.org/connect2id/nimbus-jose-jwt/branches/compare/9.35..9.34) --- updated-dependencies: - dependency-name: com.nimbusds:nimbus-jose-jwt dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore: Update Node.js to latest 20.7.0 (#17646) * fix: router-link postpone navigation (#17647) Fixes issue with update timing when postponing a router-link as the navigation goes through the vaadin-router. Fixes #17528 * Feat/add tests for vaadin components (#17673) * Adds a test for Icon in theme-editor This is the first step to make the tests for all components in theme-editor. This PR also adds setup/tearDown support to the theme-editor Testbench tests. * Adds a test for Checkbox in theme-editor and make tests a bit more reliable * In theme editor tests, check if the modified label appears after a change a side effect of this change is that the checking of the values in the file is deferred and then the dev server can write to the file before we try to read it. * Caching: Cache all com.vaadin.flow class instances (#17644) * Caching: Cache all com.vaadin.flow class instances * Caching: Cache all com.vaadin.flow class instances * Ensure only classes from JARs are cached * Fix cache test * Use replace instead of replaceAll * Cache com.vaadin.* and org.vaadin.* classes * fix: synchronize cache maps in SpringLookupInitializer (#17668) To avoid possibility to get ConcurrentModificationException. * chore: changed synchronizedMap to ConcurrentHashMap (#17677) For better non-blocking read-performance for lookups with SpringLookup. * test: Ignore failed test for Theme Editor (#17679) * chore: cache JS imported paths during chunk generation (#17672) * chore: cache JS imported paths during chunk generation In a production build, for every chunk the JS files are parsed to extract the imported paths. There are checks to ensure that a module is visited only once, but this works on a chunk level. This change caches the JS imports extraction results, so that a single JS file is visited only once during the build. Part of #17234 * cleanup * improve caching of imported paths * chore(deps): bump com.vaadin:vaadin-parent from 2.2.0 to 2.2.1 (#17682) Bumps [com.vaadin:vaadin-parent](https://github.com/vaadin/maven-integration) from 2.2.0 to 2.2.1. - [Release notes](https://github.com/vaadin/maven-integration/releases) - [Commits](vaadin/maven-integration@2.2.0...2.2.1) --- updated-dependencies: - dependency-name: com.vaadin:vaadin-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix: forward/reroute when query parameters changed (#17659) Forward and reroute should run even when targeting the same target but with different query parameters. Fixes #17639 * fix: upgrade spring-boot to 3.1.4 (#17680) * Fixes the flaky theme editor tests (#17686) * chore(deps): bump com.typesafe.akka:akka-actor_2.13 from 2.8.4 to 2.8.5 (#17683) Bumps [com.typesafe.akka:akka-actor_2.13](https://github.com/akka/akka) from 2.8.4 to 2.8.5. - [Release notes](https://github.com/akka/akka/releases) - [Changelog](https://github.com/akka/akka/blob/main/akka-docs/release-train-issue-template.md) - [Commits](akka/akka@v2.8.4...v2.8.5) --- updated-dependencies: - dependency-name: com.typesafe.akka:akka-actor_2.13 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump component.version from 24.1.9 to 24.1.10 (#17651) Bumps `component.version` from 24.1.9 to 24.1.10. Updates `com.vaadin:vaadin-lumo-theme` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-upload-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-upload-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-notification-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-notification-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-button-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-button-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-text-field-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-text-field-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-tabs-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-tabs-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-app-layout-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-app-layout-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-ordered-layout-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-ordered-layout-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-login-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-login-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-dialog-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-dialog-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-avatar-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-core` from 24.1.9 to 24.1.10 --- updated-dependencies: - dependency-name: com.vaadin:vaadin-lumo-theme dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-upload-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-upload-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-notification-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-notification-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-button-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-button-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-text-field-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-text-field-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-tabs-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-tabs-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-app-layout-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-app-layout-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-ordered-layout-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-ordered-layout-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-login-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-login-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-dialog-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-dialog-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-avatar-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Marco Collovati <marco@vaadin.com> * Remove tests that test user versions end up in the vaadin section --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Mikhail Shabarov <61410877+mshabarov@users.noreply.github.com> Co-authored-by: caalador <mikael.grankvist@vaadin.com> Co-authored-by: Bruno Rezende <brunovianarezende@gmail.com> Co-authored-by: Teppo Kurki <teppo.kurki@vaadin.com> Co-authored-by: Tomi Virtanen <tltv@vaadin.com> Co-authored-by: Marco Collovati <marco@vaadin.com> Co-authored-by: Zhe Sun <31067185+ZheSun88@users.noreply.github.com>
* fix: Do not override user npm dependency version Fixes #17654 * chore(deps): bump com.nimbusds:nimbus-jose-jwt from 9.34 to 9.35 (#17652) Bumps [com.nimbusds:nimbus-jose-jwt](https://bitbucket.org/connect2id/nimbus-jose-jwt) from 9.34 to 9.35. - [Changelog](https://bitbucket.org/connect2id/nimbus-jose-jwt/src/master/CHANGELOG.txt) - [Commits](https://bitbucket.org/connect2id/nimbus-jose-jwt/branches/compare/9.35..9.34) --- updated-dependencies: - dependency-name: com.nimbusds:nimbus-jose-jwt dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore: Update Node.js to latest 20.7.0 (#17646) * fix: router-link postpone navigation (#17647) Fixes issue with update timing when postponing a router-link as the navigation goes through the vaadin-router. Fixes #17528 * Feat/add tests for vaadin components (#17673) * Adds a test for Icon in theme-editor This is the first step to make the tests for all components in theme-editor. This PR also adds setup/tearDown support to the theme-editor Testbench tests. * Adds a test for Checkbox in theme-editor and make tests a bit more reliable * In theme editor tests, check if the modified label appears after a change a side effect of this change is that the checking of the values in the file is deferred and then the dev server can write to the file before we try to read it. * Caching: Cache all com.vaadin.flow class instances (#17644) * Caching: Cache all com.vaadin.flow class instances * Caching: Cache all com.vaadin.flow class instances * Ensure only classes from JARs are cached * Fix cache test * Use replace instead of replaceAll * Cache com.vaadin.* and org.vaadin.* classes * fix: synchronize cache maps in SpringLookupInitializer (#17668) To avoid possibility to get ConcurrentModificationException. * chore: changed synchronizedMap to ConcurrentHashMap (#17677) For better non-blocking read-performance for lookups with SpringLookup. * test: Ignore failed test for Theme Editor (#17679) * chore: cache JS imported paths during chunk generation (#17672) * chore: cache JS imported paths during chunk generation In a production build, for every chunk the JS files are parsed to extract the imported paths. There are checks to ensure that a module is visited only once, but this works on a chunk level. This change caches the JS imports extraction results, so that a single JS file is visited only once during the build. Part of #17234 * cleanup * improve caching of imported paths * chore(deps): bump com.vaadin:vaadin-parent from 2.2.0 to 2.2.1 (#17682) Bumps [com.vaadin:vaadin-parent](https://github.com/vaadin/maven-integration) from 2.2.0 to 2.2.1. - [Release notes](https://github.com/vaadin/maven-integration/releases) - [Commits](vaadin/maven-integration@2.2.0...2.2.1) --- updated-dependencies: - dependency-name: com.vaadin:vaadin-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix: forward/reroute when query parameters changed (#17659) Forward and reroute should run even when targeting the same target but with different query parameters. Fixes #17639 * fix: upgrade spring-boot to 3.1.4 (#17680) * Fixes the flaky theme editor tests (#17686) * chore(deps): bump com.typesafe.akka:akka-actor_2.13 from 2.8.4 to 2.8.5 (#17683) Bumps [com.typesafe.akka:akka-actor_2.13](https://github.com/akka/akka) from 2.8.4 to 2.8.5. - [Release notes](https://github.com/akka/akka/releases) - [Changelog](https://github.com/akka/akka/blob/main/akka-docs/release-train-issue-template.md) - [Commits](akka/akka@v2.8.4...v2.8.5) --- updated-dependencies: - dependency-name: com.typesafe.akka:akka-actor_2.13 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump component.version from 24.1.9 to 24.1.10 (#17651) Bumps `component.version` from 24.1.9 to 24.1.10. Updates `com.vaadin:vaadin-lumo-theme` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-upload-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-upload-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-notification-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-notification-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-button-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-button-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-text-field-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-text-field-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-tabs-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-tabs-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-app-layout-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-app-layout-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-ordered-layout-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-ordered-layout-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-login-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-login-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-dialog-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-dialog-testbench` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-avatar-flow` from 24.1.9 to 24.1.10 Updates `com.vaadin:vaadin-core` from 24.1.9 to 24.1.10 --- updated-dependencies: - dependency-name: com.vaadin:vaadin-lumo-theme dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-upload-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-upload-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-notification-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-notification-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-button-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-button-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-text-field-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-text-field-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-tabs-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-tabs-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-app-layout-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-app-layout-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-ordered-layout-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-ordered-layout-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-login-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-login-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-dialog-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-dialog-testbench dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-avatar-flow dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.vaadin:vaadin-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Marco Collovati <marco@vaadin.com> * Remove tests that test user versions end up in the vaadin section --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Mikhail Shabarov <61410877+mshabarov@users.noreply.github.com> Co-authored-by: caalador <mikael.grankvist@vaadin.com> Co-authored-by: Bruno Rezende <brunovianarezende@gmail.com> Co-authored-by: Teppo Kurki <teppo.kurki@vaadin.com> Co-authored-by: Tomi Virtanen <tltv@vaadin.com> Co-authored-by: Marco Collovati <marco@vaadin.com> Co-authored-by: Zhe Sun <31067185+ZheSun88@users.noreply.github.com>
@simasch just a confirmation: given the times in the logs, I suppose the build is from your local machine, not Jenkins. Is it so? |
Yes, that's right. |
But it looks like it is not running the latest Flow plugin
|
Or better, it is running both the plugins
|
@simasch it looks like that |
Great to hear! Thank you so much for helping to test the fix and providing the logs 🙇 |
If no objections, I'd propose to close this issue. The tested Flow version will be available in the next maintenance release for V24.1. |
Thank you very much for the effort to fix this. |
Description of the bug
The production build with Vaadin 24 takes around 40 minutes compared to 5 minutes with Vaadin 23.
The project has around 400 Routes.
Expected behavior
It shouldn't take longer than with previous versions.
Minimal reproducible example
Unfortunately, I cannot share the project as it's not opensource.open source
Versions
Vaadin 24.1.3
The text was updated successfully, but these errors were encountered: