NextJs compiling extremely slow
See original GitHub issueWhat version of Next.js are you using?
11.1.2
What version of Node.js are you using?
14.18.0
What browser are you using?
Chrome
What operating system are you using?
Windows 10
How are you deploying your application?
AWS ECS
Describe the Bug
I’ve been using NextJs for years and recently it has been very hard to work with because very slow in development.
After npm run dev
, I go to localhost:3000
. From there the page can take up to 60 seconds to display. Then when the first page finally displays, each code change fast refresh or page transition SSR (compilation) takes between 15-20 seconds, sometimes more than 30 seconds, and sometimes it even doesn’t work so I have to refresh the page.
- I read that on windows, windows defender could be blocking so I did this, which didn’t help: https://github.com/vercel/next.js/issues/12797#issuecomment-660225689
- I use webpack 5
- I read tailwind could be causing this kind of issue, but I don’t use it.
Expected Behavior
Page load + compilation should be faster.
To Reproduce
Unfortunately, I cannot send a reproducible UI because the project I work on is pretty big and the UI is under NDA.
Maybe without a reproducible UI, you guys have thoughts about how to improve/fix the compilation time on windows. Maybe some of you have faced the same problem and fixed it somehow. I’m all ears.
My package.json
{ “name”: “myname”, “version”: “0.1.0”, “private”: true, “scripts”: { “dev”: “next dev”, “build”: “next build”, “start”: “next start -p 3002” }, “dependencies”: { “@react-google-maps/api”: “^2.0.2”, “@sentry/browser”: “^6.7.2”, “@sentry/react”: “^6.7.2”, “@sentry/tracing”: “^6.7.2”, “@sentry/webpack-plugin”: “^1.15.1”, “@stripe/react-stripe-js”: “^1.4.0”, “@stripe/stripe-js”: “^1.13.1”, “accept-language-parser”: “^1.5.0”, “aws-sdk”: “^2.802.0”, “base-64”: “^1.0.0”, “cors”: “^2.8.5”, “dotenv”: “^8.2.0”, “hls.js”: “^0.14.16”, “iban”: “0.0.14”, “js-sha256”: “^0.9.0”, “libphonenumber-js”: “^1.9.11”, “localized-countries”: “^2.0.0”, “lodash”: “^4.17.21”, “moment”: “^2.29.1”, “next”: “^11.1.2”, “next-compose-plugins”: “^2.2.1”, “next-fonts”: “^1.5.1”, “next-images”: “^1.8.1”, “next-seo”: “^4.17.0”, “nookies”: “^2.5.0”, “platform”: “^1.3.6”, “qrcode”: “^1.4.4”, “randomstring”: “^1.1.5”, “react”: “^17.0.2”, “react-cropper”: “^2.1.4”, “react-datepicker”: “^3.3.0”, “react-device-detect”: “^1.15.0”, “react-dom”: “^17.0.2”, “react-dotdotdot”: “^1.3.1”, “react-ga”: “^3.3.0”, “react-geocode”: “^0.2.2”, “react-google-maps”: “^9.4.5”, “react-lines-ellipsis”: “^0.14.1”, “react-loading-skeleton”: “^2.2.0”, “react-query”: “^3.13.2”, “react-textarea-autosize”: “^8.3.2”, “sass”: “^1.29.0”, “stripe”: “^8.137.0”, “uuid”: “^8.3.1”, “video.js”: “^7.11.0”, “videojs-contrib-dash”: “^4.0.0” }, “devDependencies”: { “@svgr/webpack”: “^5.5.0” } }
Issue Analytics
- State:
- Created 2 years ago
- Reactions:8
- Comments:42 (15 by maintainers)
Top GitHub Comments
I’ve experienced the issue with
@mui/material
and my own npm package@gorazdo/tomui
The problem comes from a lot of modules to process (11k) like in this article Unfortunately, this solution doesn’t work. The problem is the regex (which is a completely mysterious thing for a non-rust developer. I’ve even tried Rust Regex online tool ), with no luck.My Solution (3-5 times faster)
I’ve managed it using the following config:
But I had to update imports manually for
useTheme
,ThemeProvider
,styled
,lighten
anddarken
in my casefrom:
to
To fix my library I had to use
default export
for each file which is going to be modularized.Questions
@mui/material
?Experiencing this issue?
To provide a trace which only includes metadata of the application:
npm install next@canary
(oryarn add next@canary
)ctrl + c
).next/trace
file here or send it to https://twitter.com/timneutkens if you don’t want to share it publicly. You can use https://gist.github.com to create a private url for the file. - If you have a custom.babelrc
please provide it - If you have a customnext.config.js
please provide it - if you are using TailwindCSS please providetailwind.config.js
⚠️ The metadata in
.next/trace
includes full file paths to all JS/CSS. It does not include the file contents. ⚠️ The main thing we need to help investigate your application is.next/trace
, package.json and such are not helpful in investigating the issue.Reply to earlier messages
So far all I’ve done is help investigate the slowdowns for the people that reached out. There’s no specific solution as it highly depends on the app and I’m going to share the findings. . I’ve been working on a way that we can investigate these slowdowns without needing the application code itself but it requires a bunch of steps that up till a few days ago were quite involved.
Here’s a list of what I’ve found so far:
http://localhost:3000/about
Next.js will at that point start compiling the JS/CSS forpages/about.js
, this is intentional to ensure that you can have thousands of pages in a Next.js app and it would not slow down your app, otherwise you’d pay this compilation penalty at bootupfs.readFile
seems to be slow, it takes over 100ms per file, we expanded the tracing to include timing for individual filespages/index.js
reads and compiles about 6867 files. What I’ve found is that 5557 of those are coming from@material-ui/icons/esm
, assuming that the app is not using 5.5K icons I’d recommend changing how they are imported so that not all files have to be compiled. Based on debugging this trace we’re adding a separate chart that will allow us to visualize the dependency graph based on a trace file