Case Study
Performance Audit Core Web Vitals Real Estate · PropTech Desktop Optimisation Dubai, UAE
01 — Problem

Desktop CWV Failures Undermining SEO & Agent Productivity

The real estate platform was failing Core Web Vitals on desktop — a critical channel for agents, brokers, and high-intent buyers conducting extended property research sessions. Heavy JavaScript execution, unoptimised data tables, and large DOM trees caused poor INP and elevated LCP on listing and detail pages.

02 — Solution

Desktop-Specific Audit, Profiling & Remediation

Ran a dedicated desktop performance audit — separate from the mobile engagement — using Chrome DevTools Performance profiler, PageSpeed Insights desktop mode, and GSC field data filtered to desktop. Identified and resolved long tasks, DOM complexity, inefficient event listeners, and unoptimised image delivery for high-resolution screens.

03 — Result

Passing Desktop CWV, Faster Interaction, Better Rankings

Achieved passing Core Web Vitals on desktop across key templates. Desktop Lighthouse performance scores rose above 90 on the homepage and property listing pages. INP reduced to under 200ms threshold. LCP consistently under 2.5s on high-resolution desktop profiles.

CWV
Core Web Vitals — full desktop audit & remediation
INP
Interaction to Next Paint — primary desktop fix target
Desktop
Desktop-first audit — agent portals & power users
GSC
Google Search Console — data-driven approach

Project Overview

Google's Page Experience ranking signals apply equally to desktop and mobile — but the failure modes are different. While mobile performance is constrained by network and CPU, desktop failures are primarily driven by JavaScript execution, large DOM complexity, and inefficient rendering on high-resolution viewports.

This companion engagement to the mobile performance project targeted the desktop experience specifically — using desktop-profile PageSpeed Insights data and Google Search Console's desktop-filtered Core Web Vitals report. The Dubai real estate market has a significant share of desktop users in its professional segment: agents, brokers, developers, and institutional buyers conducting portfolio research on workstations.

Failing desktop CWV means losing ranking visibility for high-value transactional queries. This project fixed that — systematically, with every change measured before and after.

🖥️ Why desktop still matters: In B2B and high-value real estate transactions, desktop remains dominant. Agents managing property portfolios, developers comparing off-plan projects, and institutional buyers reviewing detailed floor plans all operate primarily on desktop. Desktop CWV failures suppress rankings on these high-intent, high-conversion queries.

Desktop vs Mobile — Different Problems, Same Standards

Desktop and mobile share the same Core Web Vitals thresholds, but the root causes of failure differ significantly. Understanding this distinction was essential to scoping the desktop engagement correctly.

Mobile Failures (Prior Engagement)

Network & CPU Bottlenecks

  • Slow LCP due to unoptimised images on throttled connections
  • High CLS from missing image dimensions
  • Render-blocking resources on slow 3G profiles
  • Third-party scripts dominating limited mobile CPU
Desktop Failures (This Engagement)

JS Execution & DOM Complexity

  • Long JavaScript tasks blocking main thread on interaction
  • Large DOM trees (4,000+ nodes on listing pages) causing slow style recalculation
  • Inefficient scroll and resize event listeners causing jank
  • High-resolution hero images not served via responsive srcset

Audit Scope & Findings

The desktop audit covered the same three page templates as the mobile engagement — homepage, property listing/search pages, and property detail pages — but profiled exclusively under desktop conditions: no CPU throttling, 4× network speed, 1440px viewport.

🔬 Audit methodology: PageSpeed Insights (desktop mode — lab + field), Chrome DevTools Performance profiler (Main thread analysis, Long Tasks panel), Lighthouse CLI desktop flag, Google Search Console Core Web Vitals report (desktop segment), WebPageTest with Chrome desktop agent, and performance.measure() instrumentation on key user interactions.

Key failure areas identified in the initial desktop diagnostic:

  • INP (Interaction to Next Paint): The property search filter UI — with its range sliders, checkbox groups, and map interaction — triggered long synchronous JavaScript tasks on every input event. The filter handler was doing full DOM re-renders on each keypress with no debouncing. INP measured at 620ms+ on the listing page.
  • LCP on high-resolution viewports: Hero images on the homepage and property detail pages were served at mobile-friendly resolutions (800px wide) but displayed at 1440–1920px widths on desktop. Browsers had to upscale blurry images — and the LCP candidate was still slow to load because no fetchpriority="high" was applied.
  • Large DOM complexity: The property listing page rendered 80+ property cards per page with nested elements — generating DOM trees of 4,200+ nodes. This caused expensive style recalculations and layout reflows on any DOM mutation (filtering, sorting, favouriting).
  • Unthrottled event listeners: Scroll-triggered animations and map bounds recalculation were firing on every scroll event without throttling or requestAnimationFrame batching, causing visible jank on long listing pages.
  • Inefficient JavaScript bundle on desktop: The JS bundle loaded the same code for mobile and desktop — including mobile-specific polyfills and touch gesture handlers that added dead weight to desktop parse time. No differential serving was in place.
  • Web font loading on fast connections: On desktop (fast connection), web fonts loaded quickly enough that FOIT wasn't visually apparent — but the lack of font-display: optional or preloading was still causing measurable FCP delay as the browser blocked rendering to confirm font availability.
  • Image format on desktop: Property gallery images were still served as JPEG on desktop, missing the opportunity to deliver AVIF (superior compression at high resolution) to modern desktop browsers via element with AVIF source.

Optimisations Implemented

INP — Filter UI Debouncing & Task Splitting

Rewrote the search filter event handlers with 150ms input debouncing. Moved filter result computation off the main thread using a Web Worker. Replaced synchronous full re-renders with targeted DOM updates — only updating changed property cards rather than destroying and rebuilding the entire listing grid.

Responsive Images with AVIF for Desktop

Implemented elements with AVIF sources for desktop viewports (1024px+) and WebP for narrower breakpoints. Added srcset with 1×, 1.5×, and 2× DPR descriptors. Applied fetchpriority="high" to LCP hero images across all desktop templates.

DOM Size Reduction & Virtual Scrolling

Reduced initial DOM node count from 4,200+ to under 1,500 on listing pages by implementing virtual scrolling — rendering only the visible viewport of property cards plus a small buffer. Lazy-instantiated off-screen cards on scroll using IntersectionObserver.

Event Listener Throttling & RAF Batching

Wrapped all scroll and resize handlers in requestAnimationFrame batching — ensuring at most one DOM update per animation frame. Replaced inline scroll listeners on map component with a passive IntersectionObserver pattern. Reduced scroll jank to zero on Chrome Performance profiler.

Desktop-Specific JS Bundle Optimisation

Implemented differential JS serving using type="module" / nomodule pattern — stripping mobile polyfills and touch handlers from the desktop bundle. Reduced desktop JS parse time by removing unused Intersection-based touch gesture library. Implemented route-based code splitting for the property map component.

Font Preloading & Display Strategy

Added for the primary display font's woff2 file — eliminating the render-blocking font fetch on desktop's fast connection. Applied font-display: optional for non-critical body fonts, allowing the browser to skip the font entirely on first paint if not cached.

Before & After — Key Desktop Metrics

Measured against the property listing page (highest traffic template) using PageSpeed Insights lab data in desktop mode — Chrome desktop agent, no CPU throttling, simulated fast cable connection.

Metric Before After Change
Performance Score (Desktop) ~52–61 90–96 ↑ ~1.7× improvement
INP — Interaction to Next Paint 620ms+ (Poor) 68ms (Good) ↓ 89% faster
LCP — Largest Contentful Paint 3.8s 1.6–1.9s ↓ >50% faster
CLS — Cumulative Layout Shift 0.14 (Needs Improvement) 0.02 (Good) ↓ Eliminated shifts
TBT — Total Blocking Time 540ms 80ms ↓ 85% reduction
DOM Size (Listing Page) 4,200+ nodes ~1,400 nodes ↓ 67% smaller
JS Bundle Size (Desktop) ~820 KB (parsed) ~390 KB (parsed) ↓ 52% smaller
CWV Status (GSC desktop field data) Failing Passing ✓ All three metrics

Outcome: The platform achieved passing Core Web Vitals status on desktop across all three signals (LCP, CLS, INP) in Google Search Console field data — separately tracked from the mobile engagement — within approximately 28 days of the optimisations going live. Desktop Lighthouse score moved from the "Needs Improvement" band into the "Good" band across all audited page types.

Tools & Methodology

Desktop Audit & Optimisation Toolkit
Measurement
PageSpeed Insights (Desktop) Google Lighthouse CLI (--preset=desktop) Chrome DevTools Performance Panel Chrome DevTools Long Tasks WebPageTest (Chrome Desktop) web-vitals.js (INP instrumentation)
Reporting
Google Search Console (Desktop Segment) CrUX (Chrome UX Report — Desktop) Google Analytics 4 (Device Segmentation)
Implementation
Laravel (PHP) Blade Templates Vanilla JS (Web Worker) Nginx Config AVIF / WebP Conversion Virtual Scroll (Custom)
Optimisation
requestAnimationFrame Batching Input Debouncing DOM Size Reduction Differential JS Serving Font Preloading Responsive srcset (AVIF) Route-based Code Splitting

Skills Demonstrated

Performance Auditing
Core Web Vitals (LCP, CLS, INP) Chrome DevTools Performance Profiler Long Task Analysis PageSpeed Insights (Desktop Mode) CrUX Desktop Field Data WebPageTest Waterfall & Filmstrip
JavaScript Performance Engineering
Long Task Identification & Splitting Web Worker Offloading requestAnimationFrame Batching Input Debouncing & Throttling Route-Based Code Splitting Differential JS Serving (module/nomodule) Passive Event Listeners
DOM & Rendering Performance
Virtual Scrolling Implementation DOM Size Reduction Style Recalculation Optimisation IntersectionObserver Patterns Layout Reflow Elimination AVIF / srcset Responsive Images
SEO & Reporting
Google Search Console — Desktop CWV Device-Segmented Performance Analysis Before/After Benchmarking Prioritised Remediation Planning Stakeholder Performance Reporting

Outcome & Impact

Pass
Desktop Core Web Vitals status
LCP · CLS · INP — all green
89%
INP improvement
620ms → 68ms on desktop
90+
Lighthouse desktop score
Up from 52–61 pre-engagement

The desktop engagement proved that performance work is never one-size-fits-all. The failure modes on desktop are fundamentally different from mobile — and addressing them requires different diagnostic tools, different profiling conditions, and different remediation techniques.

By running mobile and desktop as separate, dedicated engagements — each measured against the correct device profile in both lab and field data — the platform achieved passing Core Web Vitals across all segments. This is what Google's Page Experience algorithm evaluates: real users, on real devices, having a measurably good experience.

For a luxury real estate platform competing for high-value transactional queries, passing desktop CWV means removing the last performance-related ranking constraint — enabling full organic visibility to Dubai's professional property market, which operates primarily on desktop.

Related Project
Website Performance Reports — Mobile →