-
Notifications
You must be signed in to change notification settings - Fork 171
-
Notifications
You must be signed in to change notification settings - Fork 171
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
Icon resize task blocks the main thread during build #171
Comments
Hi @jhnns. Thanks for reporting this issue. Actually, this problem was not visible because normally the original icon is small-sized. I've tried to make the issue more visible by using a bigger icon in the test fixture: I'm working on an icon module rewrite in a way that resize microtasks running in the background. (Initial read may be still required before build to generate MD5 hash that is used in filenames) |
Implemented in a4a457e (with some enhancenments including cache in later commits) I used normal |
I never changed the icon. I just used the default icon (see also reproduction link).
Awesome, the flame graph looks good 👍. I just left some comments at the commit :) |
Thanks, @jhnns for the comments. |
Released in 3.0.0-beta.15 |
Version
2.6.0
Reproduction link
https://github.com/jhnns/nuxt-pwa-build-perf-demo
Steps to reproduce
create-nuxt-app
and select the PWA modulenode --inspect-brk ./node_modules/.bin/nuxt
What is expected ?
The icon resize task should start as soon as possible in a different process/thread to speed up the build.
What is actually happening?
Here is a flamegraph that demonstrates that the icon resize task takes up more than half of the build time. But the bigger problem is that the task blocks the main thread which means that webpack can't start to do its work in the mean time. Here I've marked the resize task with red:
You can see that webpack starts its work only after around 16s.
Additional comments?
Spinning up a separate process doesn't come for free. Usually it's better to have a separate thread for this kind of task. We could do this with Node.js worker threads (https://nodejs.org/api/worker_threads.html) which are only available for Node >10.
The text was updated successfully, but these errors were encountered: