Why is Next.js so slow for developers?

Chris MbahChris Mbah
5 min read

I've been building apps with Next.js for months now. Its built-in routing, SEO support, and other perks made it a no-brainer over plain React when building full-stack applications. But there’s one thing that’s been consistently frustrating:

The development speed is painfully slow.

Next.js Hot Reload is supposed to make updates from your code to the browser faster, but in reality, every small code change feels like waiting for a full rebuild. I experience freezing pages and lagging terminals, even when working on something as simple as a landing page. It really makes me question if this is truly the "React on steroids" that everyone talks about.

So, I decided to run a comparison. I set up a simple Vite + React project to test their speed, and within minutes, I noticed something: Vite’s Hot Module Replacement (HMR) is really fast—and there's no comparison. There are no page reloads, no rebuild delays—just instant feedback.

This got me asking the question:

If Vite can give this kind of developer experience, why is Next.js still so far behind?

The Reality of Next.js in a Development Environment

When you look at the marketing for Next.js, it seems like a great solution for React developers (and it is). It offers:

  • Built-in routing

  • Server-side rendering (SSR)

  • API routes

  • SEO optimization

  • Full stack capabilities

But there's a downside:

During development, Next.js can sometimes feel like it's working against you.

Every time you save a file, the terminal starts multiple rebuilds. The browser refreshes slowly, and if you're working on a large, complex application or have many dynamic routes, it gets even worse. Moving to a different route takes a lot of time, and it's not just your machine causing this (which I initially thought). This raises the question...

What Makes Next.js so Slow?

After some digging, I realized that it isn’t actually a “me” problem but comes down to how the framework is built under the hood. Here’s what I found:

1. Next.js Compiles Everything—Client And Server

As a full-stack framework, Next.js isn’t just compiling your frontend like Vite does — it’s compiling both the frontend and the backend at once.

That means every time you hit save, the Next.js compiler has to figure out:

“Does this affect the client? The server? Both?”
…and then rebuild accordingly.

So it only makes sense that a one-line tweak might still trigger a chain reaction that takes seconds instead of milliseconds (not very efficient, in my opinion).

2. Hot Reload ≠ Hot Module Replacement

Next.js uses React Fast Refresh, which is supposed to preserve component state between edits. But in practice, especially in larger apps, Fast Refresh is slower, less predictable, and sometimes triggers a full page reload anyway.

Meanwhile, Vite uses native ESM and Hot Module Replacement (HMR)**—**so it only swaps the module that changed, without doing extra work. It’s way lighter.

3. Still Built on Webpack (Unless You Switch to Turbopack)

By default, Next.js still uses Webpack in dev mode — and Webpack is not known for speed. It was designed before ESM became mainstream, and it rebuilds too much by default.

Vite, on the other hand, uses esbuild (written in Go) and rollup for production. The difference is huge — Vite can cold-start a dev server in under 500ms, while Next.js sometimes takes 10–20 seconds or more in a mid-size project.

4. File Watching

Next.js watches a lot of files. This includes components, pages, layouts, server functions, and basically any custom config files. So if you're in a monorepo or have a large number of routes/components, Next.js’s file-watching gets heavier and can hit your CPU hard, making things feel slower.

5. Your Machine is Still a Factor

If you're running both server-side and client-side code locally (which you are with Next.js), your laptop or PC ends up doing a lot more work than in a basic client-only setup.

Pair that with VS Code, Chrome, and background services (Docker, Postman, etc.), and it’s no surprise your terminal starts wheezing.

Workarounds & Solutions

To be fair, Next.js IS a full-stack framework. It does a lot under the hood — and for a better developer experience, there are some things you can tweak to improve the speed:

1. Try Turbopack with next dev --turbo

Vercel is currently working on Turbopack, their Webpack replacement written in Rust. It’s still in early stages, but it can offer faster refresh times — especially in smaller apps.

next dev --turbo

Just know that it’s not fully stable or feature-complete yet.

2. Keep Pages and Components Small

It’s simple logic that big files = bigger rebuilds, regardless of the framework. If you split your app into smaller components and pages, you reduce the surface area that triggers a rebuild.

3. Lazy-Load Heavier Routes or Components

If you’re importing a huge component statically, it gets bundled into everything. Use dynamic() imports to load heavy UI or logic only when needed.

const HeavyComponent = dynamic(() => import('../components/HeavyComponent'))

4. Offload Your Backend

If you're doing API stuff inside Next.js (/apiroutes), it might slow things down more. Try separating your backend into a service (like Firebase, Supabase, or even a separate Express API) during development. This will lighten things up for the compiler.

Final Thoughts

So with all these said, should you ditch Next JS? Well it depends.

It’s easy to get frustrated (I’ve been there), but context matters. Here’s how I think about it now:

When Next.js Makes Sense

  • You’re building a full-stack app with server-side logic

  • You need SEO optimization or static generation

  • You want one framework that does routing, APIs, and UI

Next.js performance optimizations, image handling, SSR, and edge capabilities are top-tier in production.

When Vite Might Be Better

  • You’re building a frontend-heavy app or design tool

  • You want instant feedback during development

  • You’re prototyping and speed matters more than structure

For dev experience (especially speed), Vite is just better right now.

So what has been your experience? Have you run into the same dev-speed issues with Next.js? Did Turbopack help or did you eventually switch to something like Vite? Feel free to share your thoughts in the comments.

1
Subscribe to my newsletter

Read articles from Chris Mbah directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Chris Mbah
Chris Mbah

I build apps and write content.