Story 1.5.2 Product Feed (/bags) – Performance Improvement

General Info

The /bags product feed page currently has an LCP of ~5.5 s on mobile.

The biggest driver is that the first visible product grid images (likely hero thumbnails) are discovered late — probably due to incorrect lazy-loading or missing preload hints.

Other issues include: large DOM size, unused CSS, some images still in JPEG, and the HiPay SDK script unnecessarily loading on the listing page.

saclab.com_bags_productf…

Bildschirmfoto 2025-07-09 um 14.37.47.png

User Story

As a customer browsing /bags, I want visible products to load instantly without waiting for hidden ones so I can find what I want quickly.

Acceptance Criteria

ID

Scenario

Details

01

Scenario: Above-the-fold product images load eagerly and are preloaded

Given grid product thumbnails drive LCP

When the page loads

Then the first visible images are not lazy-loaded and are preloaded

Evidence: Lighthouse: “largest-contentful-paint.numericValue = 5474ms” confirms slow LCP due to grid images.

Why: When above-the-fold images are lazy-loaded, the browser discovers them late, delaying LCP.

Action direction: For the first ~6–8 visible product images: use loading="eager", fetchpriority="high" on <img>, and <link rel="preload" as="image"> in the <head>. Dev to confirm which images become LCP candidates at different breakpoints.

02

Scenario: Offscreen grid images are lazy-loaded

Given thumbnails below the fold don’t need to load immediately

When the page loads

Then only visible images load upfront

Evidence: The audit shows more images load upfront than needed, pushing network requests. Why: Loading all thumbnails delays the main grid.

Action direction: Use loading="lazy" for offscreen items; confirm WP Rocket LazyLoad is correctly configured.

03

Scenario: Product images served in next-gen formats

Given many grid images are still JPEG

When they load

Then they use WebP

Evidence: “Serve images in next-gen formats” – significant savings potential.

Why: Reduces payload, faster LCP.

Action direction: Convert grid thumbnails to WebP; test for color fidelity.

04

Scenario: DOM size is reasonable

Given product grids can create massive DOM trees

When page loads

Then initial HTML keeps DOM under control

Evidence: Large grids often exceed ~4000+ nodes.

Why: High DOM size increases layout cost. Action direction: Limit initial product count (e.g., 16 items) with auto“Load More” or pagination.

05

Scenario: Remove unused CSS

Given the grid pulls in widget styles not needed

When page loads

Then only relevant CSS is served

Evidence: “Remove unused CSS” flagged in prior audit – ~180 KB waste likely persists. Why: Redundant CSS blocks paint.

Action direction: Enable WP Rocket Remove Unused CSS; verify nothing breaks in grid styling.

06

Scenario: HiPay SDK does not load unnecessarily

Given payments only happen in checkout

When the /bags page loads

Then HiPay scripts are not included

Evidence: HiPay script seen in page waterfall for /bags.

Why: Large third-party payment JS (~200–300 KB) adds overhead for no reason.

Action direction: Wrap enqueue for is_checkout() or unload with Asset CleanUp.

Additional Note for Devs

These recommendations explain why to fix each problem and how it typically works, but exact implementation must match our theme’s structure and breakpoints. For the grid images especially, test different viewport widths to see which images consistently become the LCP candidate.

Use staging and verify LCP improvement in Lighthouse.

Comments

Leave a Reply