Performance

How we decide what gets to load before the page becomes useful

A practical look at the critical rendering path: which fonts, images, scripts, and interface behaviors deserve early bandwidth and which ones should wait.

A fast page is partly a scheduling problem. The browser has limited bandwidth, a limited main thread, and a limited amount of work it can do before the user starts noticing delay. If every asset declares itself important, nothing is actually prioritized.

Our performance work is largely about deciding what deserves to be early.

The first viewport sets the priority

When a page opens, the visitor needs a usable visual structure, readable text, the primary image if one is essential, and the controls required to navigate. They do not need the fifth gallery image, the footer logo, a below-the-fold carousel, or a marketing script before the headline appears.

That sounds obvious, but many sites load resources according to implementation convenience instead of user sequence.

Fonts are a good example

Several of our sites use next/font with a primary sans-serif family and a secondary display family. On one image-heavy site, the primary font is preloaded while the decorative serif family explicitly is not. That is an intentional distinction. The primary font affects the majority of visible text. The decorative family can arrive without blocking the page's usefulness.

A brand system can have two fonts without pretending both deserve the same place in the loading queue.

Hero images have to earn priority

Next.js makes it easy to mark an image as priority content. That does not mean every large image should be prioritized. The first meaningful hero image may deserve early loading because it affects Largest Contentful Paint. An image three sections down does not.

If five images all get priority, they compete for bandwidth and the designation loses its value.

Third-party scripts are usually not first-view content

Analytics and advertising code can be important to the business. They are rarely what the visitor came to see. On the connectrader site itself, analytics is deliberately deferred until interaction or a later timeout so it does not own the first rendering window.

Other projects use different integrations and loading requirements, so the exact implementation varies. The principle is consistent: a tracking script should not automatically outrank the page it is tracking.

Critical CSS should be simple enough to arrive quickly

We do not rely on large runtime styling systems to calculate the initial layout. The browser is very good at applying CSS. Our components use predictable styles, responsive breakpoints, and layout primitives such as grid and flexbox. That gives the first render a straightforward path.

Client JavaScript should not gate basic comprehension

A visitor should be able to understand what the business does even if interactive code has not finished hydrating. The headline, service copy, proof, location information, and primary links should already be present. Client JavaScript can enhance the experience with menus, dialogs, galleries, and form state.

It should not be the switch that turns the document on.

The critical path can change by page type

A gallery page and a contact page have different priorities. A contact page may need the form quickly. A portfolio page may depend more heavily on a lead image. A documentation page may be almost entirely text. This is why performance rules should be principles, not a single bundle of settings copied into every repository.

Network priority is not the only priority

The main thread matters too. Even a cached script has to execute. A heavy animation library can compete with input handling. Large hydration work can delay interactions. Third-party scripts can create long tasks after the page is visible. That is why we pay attention to how much JavaScript runs, not just how many kilobytes transfer.

We also protect layout stability

The page becoming visible quickly is not enough if it jumps around afterward. Known image dimensions, stable hero sizing, predictable font behavior, and reserved space for components reduce layout shift. The critical path should produce something close to the final layout, not a temporary arrangement that collapses and rebuilds as assets arrive.

Why this matters more on mobile

Mobile devices expose weak prioritization quickly. They may have slower networks, lower CPU performance, memory pressure, and browser chrome that changes the viewport while the user scrolls. A page that feels instant on a development machine can feel dramatically different there. That is why we treat first-view loading as a budget.

The budget belongs to the user's first task. Everything else can wait its turn.

From explanation to proof

Where this connects to the work

The performance library explains why our technical scores tend to be unusually strong without treating the score itself as the product.