← Useful
15 October 20267 min read
News

The Website Passes the Test but Feels Slow: Find the Delays Users Actually Notice

Category: Website Performance. A practical method for finding out why fast measurements do not always result in fast user journeys.

A website can achieve good results in a simple performance test and still feel slow. The homepage loads quickly at the office, but the product list stutters on mobile. The menu responds slowly. A form takes several seconds to confirm submission. Problems like these do not always show up in a single overall score.

The reason is that website performance consists of several types of delay. Some occur before content is displayed, some when the user tries to do something, and some only after several page views. A useful analysis must therefore follow the entire user journey, not just test one page under ideal conditions.

Start with the Pages and Actions That Matter Most

It is inefficient to begin with a random list of technical improvements. First, map which pages and actions are most important to the business. These may include product pages, category pages, contact forms, checkout, login or search.

Viktige brukerreiser bør testes på reelle enheter.
Important user journeys should be tested on real devices.

Then choose a few specific test journeys, for example:

  1. Open a landing page from a search result and continue to the contact form.
  2. Open a product category, filter the list and view a product.
  3. Add an item to the shopping cart and start checkout.
  4. Log in and open a page with personal data.

Test both first-time and repeat visits. First-time visits often reveal large images, fonts, JavaScript and missing browser caching. Repeat visits can uncover a slow database, external services or functions that run again even though they should have been cached.

Read Core Web Vitals as Symptoms, Not Grades

Core Web Vitals provide a useful language for key aspects of the user experience. The measurements should be used to find causes, not merely to produce a green report.

LCP: When does the main content become visible?

Largest Contentful Paint usually concerns the largest visible content element early in the page view. On a corporate website, this is often a hero image, a large heading or a content area. On a product page, it is typically the product image.

A poor LCP can be caused by more than a large image file. The browser may discover the image too late because it is loaded via JavaScript or as a CSS background. The server may take a long time to generate the page. Critical CSS may be blocked by other stylesheets or fonts. The solution must target the actual bottleneck.

Målingene må vise hvor ventetiden faktisk oppstår.
Measurements must show where the delay actually occurs.

INP: How Quickly Does the Page Respond to Actions?

Interaction to Next Paint measures how the page responds when the user clicks, taps or types. A page may look finished but be busy running JavaScript. The result is a menu that opens slowly, a filter that freezes or a button that appears unresponsive.

Pay particular attention to long JavaScript tasks, many events being triggered at the same time and components that redraw large parts of the page. Break up heavy work, load functions only where they are needed, and prevent analytics tools and third-party scripts from competing with the user's actions.

CLS: Does the Content Move While the Page Loads?

Cumulative Layout Shift captures unexpected shifts. Typical causes include images without reserved dimensions, banners inserted afterward, fonts that change the size of text and consent solutions that push the entire page down.

Reserve space for images, video, ads and dynamic components. Also test after consent has been given, because different scripts and elements may load in that situation.

Distinguish Between Server Time and Rendering Time

Before the browser can build the page, the server must respond. If the HTML document itself arrives late, compressing a few icons will help only marginally. Slow server time can be caused by extensive database work, external integrations, inefficient plugins or missing page caching.

Ytelse bør vurderes på flere sidetyper og skjermstørrelser.
Performance should be assessed across multiple page types and screen sizes.

Therefore, divide the analysis into two questions:

  • How long does it take before the server starts responding?
  • What happens in the browser after the response arrives?

This division prevents the frontend and server from being conflated. A large hero image is not the explanation if the server takes up most of the waiting time before the image can even be discovered.

Optimize Images According to Placement and Purpose

Image optimization is not just about file format and compression. The browser should receive an image that fits the actual display size. A small card in an article overview does not need the same file as a wide hero image.

Check the following:

  • That responsive image sizes are actually generated and selected.
  • That the hero image is prioritized over images further down the page.
  • That images below the first screenful can be loaded later.
  • That width and height are specified so that space is reserved.
  • That compression is adapted to the subject without noticeable loss of quality.

Be careful about loading the hero image late. Deferred loading is useful for content further down the page, but it can weaken LCP if used for the page's most important image.

Use caching at multiple layers

Caching is not a single measure. A typical solution may have page cache, object cache, browser cache and caching of static files. Each layer solves different problems.

  • Page cache can deliver ready-made HTML without rebuilding the page for every visit.
  • Object cache can reduce repeated database operations.
  • Browser cache means that CSS, JavaScript, fonts and images do not need to be loaded again unnecessarily.
  • Cache for Externally Delivered Files can reduce distance and load by serving static resources closer to the user.

Always test exceptions. Shopping carts, logins, personalized content, and form results may require different rules than ordinary content pages. Incorrect caching can produce fast pages with incorrect information, which is worse than moderate wait times.

Reduce JavaScript and CSS where it actually helps

The number of files alone says little. A large file that is used efficiently may be less problematic than many small scripts that perform intensive work. Therefore, examine both the amount downloaded, execution time, and when the resources are used.

Remove code that is no longer needed, and avoid loading features globally if they are only used on certain types of pages. A form library normally does not need to be loaded on every article. The same applies to code for carousels, maps, product filters, and logins.

For CSS, the goal should be for the content at the top of the page to be displayed without waiting for large amounts of unused style code. At the same time, the optimization must be robust. Aggressive merging or automatic removal of CSS can create errors that only appear on specific templates and screen sizes.

Examine the database with specific queries

A large database is not necessarily a slow database. The problem often occurs when the website makes many unnecessary queries, searches inefficiently, or retrieves more information than the page needs.

Look for patterns: Do product pages become slower as the number of variants increases? Does the administration take longer after many revisions or logs have been stored? Does a filter perform several intensive searches for every click? Is the same database query run repeatedly during a single page view?

Do not start with random cleanup. Measure which queries take time, identify the component that triggers them, and assess whether data can be retrieved less often, indexed more effectively, or cached. Make a backup and have a rollback plan before making structural changes.

Improve perceived speed without hiding the problem

Users assess more than total load time. Clear feedback can make waiting easier to understand. A button should change state when it is pressed. A filter should indicate that the results are being updated. The main content should appear before less important content.

This must not be used to disguise unnecessary slowness. A loading indicator does not make a slow database faster. But it prevents uncertainty and repeated clicks while the technical bottleneck is being improved.

Therefore, prioritize visible progress, stable positioning, and fast responses to actions. Load secondary content later when appropriate, but avoid having late-arriving content shift or interrupt what the user is already working on.

A practical sequence for improvement work

  1. Choose important page types and user journeys. Do not limit testing to the homepage.
  2. Measure both the initial view and interactions. Record what feels slow, not just an overall score.
  3. Distinguish server problems from browser problems. Find out where the waiting occurs.
  4. Fix the biggest bottleneck first. It could be the LCP image, JavaScript, database work, or missing caching.
  5. Test after every significant change. Check multiple page types, screen sizes, and login situations.
  6. Track progress over time. New campaigns, integrations, and editorial content can gradually change performance.

Good website performance rarely comes from one plugin or one compression setting. It comes from understanding which delays affect the user, where they occur, and which measure reduces them without creating new problems. When the analysis follows actual user journeys, Core Web Vitals and technical measurements become decision-making support rather than decoration in a report.