April 8 2025
Rendering, Network, and CPU
How to separate different kinds of slowness so you can attack the right layer.
Andrews Ribeiro
Founder & Engineer
4 min Intermediate Systems
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:
networkmeans waitingCPUmeans workrenderingmeans 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:
- the API takes 2 seconds to respond
- the API responds quickly, but the client filters and sorts a huge array
- 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
- A slow screen might be waiting on network, burning CPU, or paying a rendering cost, and each case needs a different response.
- The same symptom does not mean the same diagnosis.
- Separating network, processing, and render work prevents optimization in the wrong place.
- In interviews, good answers show how you would tell those sources apart before suggesting the fix.
Practice checklist
Use this when you answer
- Can I explain the difference between network delay, CPU cost, and rendering cost?
- Do I know which evidence helps distinguish those three categories?
- Can I give an example where the visual symptom stayed the same but the technical cause changed?
- Can I justify why the right solution depends on which layer is dominating the time?
You finished this article
Next step
Measure Before You Optimize Next step →Share this page
Copy the link manually from the field below.