Skip to main content

Rendering, Network, and CPU

How to separate different kinds of slowness so you can attack the right layer.

Andrews Ribeiro

Andrews Ribeiro

Founder & Engineer

The problem

One of the most common mistakes in performance conversations is this:

  • calling every slow experience a performance problem and stopping there

That sounds harmless.

But it pushes teams toward generic fixes:

  • memoize the component
  • reduce the bundle
  • paginate the list
  • shrink the payload

Sometimes that helps.

Sometimes it is only a well-meaning guess.

The real issue is that the same user symptom can come from very different causes.

Mental model

Think about it like this:

a slow screen is a symptom; network, CPU, and rendering are different categories of cause.

In plain language:

  • network means waiting
  • CPU means work
  • rendering means the cost of turning state into UI

Those three things can interact.

But they are not the same kind of problem.

If you do not separate them, the chance of attacking the wrong layer rises fast.

Breaking it down

Network: the browser is waiting

When the pain is in the network, the interface can feel frozen simply because the data has not arrived yet.

Common signals:

  • requests taking too long
  • payloads too large
  • request waterfalls
  • an API or third-party service holding the response

In that case, discussing rendering too early is usually a distraction.

CPU: the client or server is doing too much work

Sometimes the data arrives quickly.

The problem comes after that:

  • sorting a huge array
  • transforming too much data
  • parsing or serializing too much
  • running too much JavaScript on the main thread

From the user’s point of view, this still feels slow.

But the fix usually involves:

  • reducing work
  • moving work
  • splitting work

not just waiting less for the network.

Rendering: the UI is too expensive to update

Sometimes the network is fine.

The CPU may not even be heavily loaded.

The interface still struggles because rendering, reconciling, layout, or paint costs too much.

This shows up in cases like:

  • a large list re-rendering when it should not
  • a component tree reacting too broadly
  • a DOM that is too heavy
  • repeated layout and paint work

Here the question is no longer “how long did the request take?”

It is:

  • how expensive is it to update the screen after the state changes?

The same symptom can hide different causes

This is the central point.

A search box that “lags while typing” might be:

  • too many slow requests
  • an expensive local filter
  • a huge table re-rendering on every keypress

Same symptom.

Completely different diagnoses.

The right tool depends on the right suspicion

You do not need to turn the investigation into a ceremony.

But you do need evidence that matches the layer:

  • Network tab for waiting on network
  • profiler for CPU and main-thread work
  • React DevTools or flamegraphs for rendering cost

The mature question is not:

  • which famous optimization should I try?

It is:

  • which layer is dominating the delay right now?

Simple example

Imagine a large table that freezes when the user types into search.

Three different scenarios can create the same feeling:

  1. the API takes 2 seconds to respond
  2. the API responds quickly, but the client filters and sorts a huge array
  3. the data is small, but the table re-renders entirely on every keystroke

For the user, all of them become:

  • the search is freezing

For someone investigating properly, they are three different problems.

And each one needs a different response:

  • reduce network wait
  • reduce CPU cost
  • reduce render cost

Common mistakes

  • calling everything performance and stopping there
  • trying to solve network delay with component-level micro-optimizations
  • trying to solve heavy CPU work by shaving irrelevant kilobytes off the payload
  • treating expensive rendering like it is only an API problem
  • jumping to a fix before classifying the type of delay

How a senior thinks

More experienced engineers usually make the conversation simpler, not more impressive.

Instead of listing fifteen optimizations, they try to classify the pain:

are we waiting on data, doing too much work, or rendering too much?

That sounds like a small question.

But it removes a lot of noise.

Seniority here is not memorizing tuning techniques.

It is putting the problem in the right drawer before suggesting the change.

What the interviewer wants to see

In interviews, this topic tests judgment very directly.

The interviewer wants to see whether you:

  • separate symptom from cause
  • understand that network, CPU, and rendering are different categories
  • connect each category to a kind of evidence
  • avoid a generic performance answer

A strong answer often sounds like this:

Before optimizing, I want to separate whether the delay is in network wait, CPU work, or rendering cost. The user symptom can look identical, but the solution changes completely depending on which layer is holding the time.

The same symptom is not the same diagnosis.

Performance work improves much faster when you stop calling everything performance.

Quick summary

What to keep in your head

Practice checklist

Use this when you answer

You finished this article

Next article Bundle Size: What to Cut and What Is Not Worth Cutting Previous article How to Optimize LCP Without Guessing What Is Slow

Keep exploring

Related articles