Skip to main content

Web Performance Optimization in 2024 - Complete Guide to Core Web Vitals

Muhammad Ubaid Raza
Saturday, January 20, 2024
PerformanceWeb VitalsOptimization
Web performance optimization metrics dashboard

Web Performance Optimization in 2024: Complete Guide to Core Web Vitals

Web performance has never been more critical. With Google's Page Experience update and the increasing focus on Core Web Vitals, optimizing your website's performance directly impacts search rankings, user experience, and conversion rates. After optimizing hundreds of websites and achieving consistent 90+ Lighthouse scores, I'm sharing the most effective strategies that work in 2024.

Understanding Core Web Vitals in Depth

Core Web Vitals are the foundation of modern web performance. Let's break down each metric and how to optimize for them.

Largest Contentful Paint (LCP) - Loading Performance

LCP measures when the largest content element becomes visible. Target: under 2.5 seconds.

Common LCP Elements and Optimization Strategies

<!-- ❌ Unoptimized hero image -->
<img src="hero-image.jpg" alt="Hero" />

<!-- ✅ Optimized with multiple techniques -->
<img
  src="hero-image-800w.webp"
  srcset="
    hero-image-400w.webp   400w,
    hero-image-800w.webp   800w,
    hero-image-1200w.webp 1200w
  "
  sizes="(max-width: 768px) 100vw, 50vw"
  alt="Hero"
  loading="eager"
  fetchpriority="high"
  decoding="async"
/>

Advanced LCP Optimization Techniques

  1. Resource Hints for Critical Assets
<!-- Preload critical resources -->
<link
  rel="preload"
  href="/fonts/inter-var.woff2"
  as="font"
  type="font/woff2"
  crossorigin
/>
<link rel="preload" href="/hero-image-800w.webp" as="image" />

<!-- DNS prefetch for external resources -->
<link rel="dns-prefetch" href="//fonts.googleapis.com" />
<link rel="dns-prefetch" href="//analytics.google.com" />
  1. Critical CSS Inlining
<style>
  /* Inline critical CSS for above-the-fold content */
  .hero {
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    height: 100vh;
    display: flex;
    align-items: center;
  }
  .hero h1 {
    font-size: 3rem;
    color: white;
    font-weight: 700;
  }
</style>

<!-- Load non-critical CSS asynchronously -->
<link
  rel="preload"
  href="/styles/main.css"
  as="style"
  onload="this.onload=null;this.rel='stylesheet'"
/>

First Input Delay (FID) / Interaction to Next Paint (INP)

FID is being replaced by INP in 2024. INP measures responsiveness throughout the page lifecycle. Target: under 200ms.

JavaScript Optimization Strategies

  1. Code Splitting and Lazy Loading
// ❌ Loading everything upfront
import { heavyLibrary } from "./heavy-library"
import { analytics } from "./analytics"
import { chatWidget } from "./chat-widget"

// ✅ Dynamic imports for non-critical code
const loadHeavyFeature = async () => {
  const { heavyLibrary } = await import("./heavy-library")
  return heavyLibrary
}

// ✅ Lazy load analytics
setTimeout(async () => {
  const { analytics } = await import("./analytics")
  analytics.init()
}, 3000)

// ✅ Load chat widget on user interaction
document.addEventListener(
  "scroll",
  async () => {
    if (window.scrollY > 1000) {
      const { chatWidget } = await import("./chat-widget")
      chatWidget.render()
    }
  },
  { once: true },
)
  1. Web Workers for Heavy Computations
// main.js
const worker = new Worker("/js/data-processor.js")

worker.postMessage({ data: largeDataSet })
worker.onmessage = (e) => {
  const processedData = e.data
  updateUI(processedData)
}

// data-processor.js (Web Worker)
self.onmessage = function (e) {
  const { data } = e.data

  // Heavy computation that won't block the main thread
  const processed = data.map((item) => ({
    ...item,
    computed: expensiveCalculation(item),
  }))

  self.postMessage(processed)
}
  1. Optimizing Event Handlers
// ❌ Blocking event handlers
document.addEventListener("scroll", () => {
  // Expensive DOM operations on every scroll
  updateNavigation()
  updateProgressBar()
  checkVisibility()
})

// ✅ Throttled and optimized handlers
import { throttle } from "lodash-es"

const optimizedScrollHandler = throttle(() => {
  // Use requestAnimationFrame for DOM updates
  requestAnimationFrame(() => {
    updateNavigation()
    updateProgressBar()
    checkVisibility()
  })
}, 16) // ~60fps

document.addEventListener("scroll", optimizedScrollHandler, { passive: true })

Cumulative Layout Shift (CLS) - Visual Stability

CLS measures unexpected layout shifts. Target: under 0.1.

Preventing Layout Shifts

  1. Reserve Space for Dynamic Content
/* ❌ No space reserved for images */
.image-container img {
  width: 100%;
  height: auto;
}

/* ✅ Aspect ratio containers */
.image-container {
  aspect-ratio: 16 / 9;
  overflow: hidden;
}

.image-container img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
  1. Font Loading Optimization
/* ✅ Prevent font swap layout shifts */
@font-face {
  font-family: "Inter";
  src: url("/fonts/inter-var.woff2") format("woff2");
  font-display: optional; /* Prevents layout shift */
  font-weight: 100 900;
}

/* Fallback font with similar metrics */
body {
  font-family:
    "Inter",
    -apple-system,
    BlinkMacSystemFont,
    "Segoe UI",
    system-ui,
    sans-serif;
}
  1. Skeleton Screens for Loading States
// ✅ Skeleton that matches final content dimensions
function ProductCardSkeleton() {
  return (
    <div className="product-card">
      <div
        className="skeleton-image"
        style={{ aspectRatio: "1/1", height: "200px" }}
      />
      <div
        className="skeleton-text"
        style={{ height: "24px", marginTop: "12px" }}
      />
      <div
        className="skeleton-text"
        style={{ height: "16px", width: "60%", marginTop: "8px" }}
      />
      <div
        className="skeleton-button"
        style={{ height: "40px", marginTop: "16px" }}
      />
    </div>
  )
}

Advanced Performance Optimization Techniques

1. Resource Loading Strategies

Priority Hints for Fine-tuned Loading

<!-- High priority for critical resources -->
<link rel="preload" href="/critical.css" as="style" fetchpriority="high" />
<img src="/hero.webp" fetchpriority="high" alt="Hero" />

<!-- Low priority for non-critical resources -->
<img
  src="/footer-logo.webp"
  fetchpriority="low"
  loading="lazy"
  alt="Footer logo"
/>
<script src="/analytics.js" fetchpriority="low" defer></script>

Service Worker for Advanced Caching

// sw.js - Advanced caching strategies
const CACHE_NAME = "app-v1"
const STATIC_CACHE = "static-v1"
const DYNAMIC_CACHE = "dynamic-v1"

// Cache strategies for different resource types
const cacheStrategies = {
  // Static assets - Cache first
  static: (request) => caches.match(request),

  // API calls - Network first with fallback
  api: async (request) => {
    try {
      const response = await fetch(request)
      const cache = await caches.open(DYNAMIC_CACHE)
      cache.put(request, response.clone())
      return response
    } catch (error) {
      return caches.match(request)
    }
  },

  // Images - Stale while revalidate
  images: async (request) => {
    const cache = await caches.open(STATIC_CACHE)
    const cached = await cache.match(request)

    const fetchPromise = fetch(request).then((response) => {
      cache.put(request, response.clone())
      return response
    })

    return cached || fetchPromise
  },
}

2. Modern Image Optimization

Next-gen Image Formats with Fallbacks

<picture>
  <!-- AVIF for supported browsers (best compression) -->
  <source srcset="/image.avif" type="image/avif" />

  <!-- WebP for most modern browsers -->
  <source srcset="/image.webp" type="image/webp" />

  <!-- JPEG fallback -->
  <img src="/image.jpg" alt="Description" loading="lazy" decoding="async" />
</picture>

Responsive Images with Art Direction

<picture>
  <!-- Mobile: cropped version -->
  <source
    media="(max-width: 768px)"
    srcset="/hero-mobile-400w.webp 400w, /hero-mobile-800w.webp 800w"
    sizes="100vw"
  />

  <!-- Desktop: full version -->
  <source
    media="(min-width: 769px)"
    srcset="/hero-desktop-800w.webp 800w, /hero-desktop-1600w.webp 1600w"
    sizes="50vw"
  />

  <img src="/hero-desktop-800w.webp" alt="Hero image" loading="eager" />
</picture>

3. CSS Performance Optimization

Critical CSS Extraction and Inlining

// Build-time critical CSS extraction
const critical = require("critical")

critical.generate({
  inline: true,
  base: "dist/",
  src: "index.html",
  dest: "index-critical.html",
  width: 1300,
  height: 900,
  minify: true,
  extract: true, // Extract critical CSS to separate file
  ignore: ["@font-face", /url\(/], // Ignore certain rules
})

CSS Containment for Performance

/* Isolate layout calculations */
.card {
  contain: layout style paint;
}

/* Optimize for animations */
.animated-element {
  contain: layout;
  will-change: transform;
}

/* Content containment for dynamic sections */
.dynamic-content {
  contain: size layout style paint;
}

4. JavaScript Bundle Optimization

Tree Shaking and Dead Code Elimination

// ❌ Importing entire library
import _ from "lodash"

// ✅ Import only what you need
import { debounce, throttle } from "lodash-es"

// ✅ Even better: use native alternatives
const debounce = (func, wait) => {
  let timeout
  return function executedFunction(...args) {
    const later = () => {
      clearTimeout(timeout)
      func(...args)
    }
    clearTimeout(timeout)
    timeout = setTimeout(later, wait)
  }
}

Module Federation for Micro-frontends

// webpack.config.js
const ModuleFederationPlugin = require("@module-federation/webpack")

module.exports = {
  plugins: [
    new ModuleFederationPlugin({
      name: "shell",
      remotes: {
        dashboard: "dashboard@http://localhost:3001/remoteEntry.js",
        profile: "profile@http://localhost:3002/remoteEntry.js",
      },
      shared: {
        react: { singleton: true },
        "react-dom": { singleton: true },
      },
    }),
  ],
}

Performance Monitoring and Measurement

1. Real User Monitoring (RUM)

// Custom performance monitoring
class PerformanceMonitor {
  constructor() {
    this.metrics = {}
    this.observer = null
    this.init()
  }

  init() {
    // Core Web Vitals monitoring
    this.observeCLS()
    this.observeLCP()
    this.observeFID()
    this.observeINP()
  }

  observeLCP() {
    const observer = new PerformanceObserver((list) => {
      const entries = list.getEntries()
      const lastEntry = entries[entries.length - 1]
      this.metrics.lcp = lastEntry.startTime
      this.sendMetric("lcp", lastEntry.startTime)
    })

    observer.observe({ entryTypes: ["largest-contentful-paint"] })
  }

  observeCLS() {
    let clsValue = 0
    const observer = new PerformanceObserver((list) => {
      for (const entry of list.getEntries()) {
        if (!entry.hadRecentInput) {
          clsValue += entry.value
        }
      }
      this.metrics.cls = clsValue
    })

    observer.observe({ entryTypes: ["layout-shift"] })
  }

  observeINP() {
    const observer = new PerformanceObserver((list) => {
      for (const entry of list.getEntries()) {
        const duration = entry.processingEnd - entry.startTime
        this.metrics.inp = Math.max(this.metrics.inp || 0, duration)
        this.sendMetric("inp", duration)
      }
    })

    observer.observe({ entryTypes: ["event"] })
  }

  sendMetric(name, value) {
    // Send to analytics service
    if ("sendBeacon" in navigator) {
      navigator.sendBeacon(
        "/analytics",
        JSON.stringify({
          metric: name,
          value: value,
          timestamp: Date.now(),
          url: window.location.href,
        }),
      )
    }
  }
}

// Initialize monitoring
new PerformanceMonitor()

2. Performance Budgets

// performance-budget.js
const performanceBudget = {
  // Size budgets
  maxBundleSize: 250000, // 250KB
  maxImageSize: 100000, // 100KB
  maxCSSSize: 50000, // 50KB

  // Timing budgets
  maxLCP: 2500, // 2.5s
  maxFID: 100, // 100ms
  maxCLS: 0.1, // 0.1

  // Resource budgets
  maxRequests: 50,
  maxDOMNodes: 1500,
}

// Budget enforcement in CI/CD
function checkPerformanceBudget(metrics) {
  const violations = []

  Object.keys(performanceBudget).forEach((key) => {
    if (metrics[key] > performanceBudget[key]) {
      violations.push({
        metric: key,
        actual: metrics[key],
        budget: performanceBudget[key],
        overage: metrics[key] - performanceBudget[key],
      })
    }
  })

  if (violations.length > 0) {
    console.error("Performance budget violations:", violations)
    process.exit(1)
  }
}

Framework-Specific Optimizations

React Performance Patterns

// ✅ Optimized React component patterns
import { memo, useMemo, useCallback, lazy, Suspense } from "react"

// Memoization for expensive calculations
const ExpensiveComponent = memo(({ data, filter }) => {
  const filteredData = useMemo(
    () => data.filter((item) => item.category === filter),
    [data, filter],
  )

  const handleClick = useCallback((id) => {
    // Handle click logic
  }, [])

  return (
    <div>
      {filteredData.map((item) => (
        <ItemCard key={item.id} item={item} onClick={handleClick} />
      ))}
    </div>
  )
})

// Lazy loading for route-based code splitting
const Dashboard = lazy(() => import("./Dashboard"))
const Profile = lazy(() => import("./Profile"))

function App() {
  return (
    <Suspense fallback={<LoadingSpinner />}>
      <Routes>
        <Route path="/dashboard" element={<Dashboard />} />
        <Route path="/profile" element={<Profile />} />
      </Routes>
    </Suspense>
  )
}

Vue.js Performance Optimizations

<template>
  <!-- Use v-show for frequently toggled elements -->
  <div v-show="isVisible" class="expensive-component">
    <!-- Use v-memo for expensive renders -->
    <div v-memo="[user.id, user.lastUpdated]">
      <UserProfile :user="user" />
    </div>
  </div>
</template>

<script setup>
import { ref, computed, defineAsyncComponent } from "vue"

// Async components for code splitting
const HeavyComponent = defineAsyncComponent(
  () => import("./HeavyComponent.vue"),
)

// Computed properties for expensive calculations
const expensiveValue = computed(() => {
  return heavyCalculation(props.data)
})
</script>

1. Edge Computing and CDN Optimization

// Cloudflare Workers example for edge optimization
addEventListener("fetch", (event) => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const url = new URL(request.url)

  // Edge-side includes for personalization
  if (url.pathname.startsWith("/api/personalized")) {
    return await handlePersonalizedContent(request)
  }

  // Static asset optimization
  if (url.pathname.match(/\.(jpg|jpeg|png|webp|avif)$/)) {
    return await optimizeImage(request)
  }

  return fetch(request)
}

2. AI-Powered Performance Optimization

// Predictive prefetching based on user behavior
class PredictivePrefetcher {
  constructor() {
    this.userBehavior = []
    this.mlModel = null
    this.init()
  }

  async init() {
    // Load pre-trained model for predicting user navigation
    this.mlModel = await tf.loadLayersModel("/models/navigation-predictor.json")
    this.observeUserBehavior()
  }

  observeUserBehavior() {
    // Track user interactions
    document.addEventListener("click", (e) => {
      this.userBehavior.push({
        element: e.target.tagName,
        timestamp: Date.now(),
        position: { x: e.clientX, y: e.clientY },
      })
    })

    // Predict and prefetch likely next pages
    setInterval(() => {
      this.predictAndPrefetch()
    }, 5000)
  }

  async predictAndPrefetch() {
    if (this.userBehavior.length < 5) return

    const prediction = await this.mlModel.predict(
      this.preprocessBehaviorData(this.userBehavior),
    )

    const likelyPages = this.interpretPrediction(prediction)
    likelyPages.forEach((page) => this.prefetchPage(page))
  }
}

Conclusion: Building for Performance in 2024

Web performance optimization in 2024 requires a holistic approach that combines:

  1. Core Web Vitals mastery - Understanding and optimizing LCP, INP, and CLS
  2. Modern loading strategies - Priority hints, resource hints, and smart bundling
  3. Advanced caching - Service workers, edge computing, and intelligent prefetching
  4. Continuous monitoring - Real user monitoring and performance budgets
  5. Framework optimization - Leveraging framework-specific performance features

The key to success is measuring everything, optimizing iteratively, and staying current with evolving web standards. Performance isn't a one-time task – it's an ongoing commitment to delivering exceptional user experiences.

Remember: a 1-second improvement in load time can increase conversions by up to 7%. In 2024, performance isn't just about user experience – it's about business success.

What performance challenges are you facing in your projects? Have you implemented any of these techniques? I'd love to hear about your experiences and help solve any performance bottlenecks you're encountering.

Full-stack engineer leading teams to build scalable systems & tools, with solid DevOps expertise.

Muhammad Ubaid R.

\n",[140,2419,2420,2425,2475,2514,2518,2523,2529,2542,2555,2568,2581,2585],{"__ignoreMap":138},[143,2421,2422],{"class":145,"line":146},[143,2423,2424],{"class":149},"\n",[143,2426,2427,2429,2431,2433,2435,2437,2439,2441,2443,2445,2447,2450,2452,2454,2456,2458,2460,2462,2465,2467,2469,2471,2473],{"class":145,"line":153},[143,2428,157],{"class":156},[143,2430,443],{"class":160},[143,2432,446],{"class":164},[143,2434,168],{"class":156},[143,2436,171],{"class":156},[143,2438,383],{"class":174},[143,2440,171],{"class":156},[143,2442,457],{"class":164},[143,2444,168],{"class":156},[143,2446,171],{"class":156},[143,2448,2449],{"class":174},"/critical.css",[143,2451,171],{"class":156},[143,2453,469],{"class":164},[143,2455,168],{"class":156},[143,2457,171],{"class":156},[143,2459,567],{"class":174},[143,2461,171],{"class":156},[143,2463,2464],{"class":164}," fetchpriority",[143,2466,168],{"class":156},[143,2468,171],{"class":156},[143,2470,318],{"class":174},[143,2472,171],{"class":156},[143,2474,192],{"class":156},[143,2476,2477,2479,2481,2483,2485,2487,2490,2492,2494,2496,2498,2500,2502,2504,2506,2508,2510,2512],{"class":145,"line":16},[143,2478,157],{"class":156},[143,2480,161],{"class":160},[143,2482,165],{"class":164},[143,2484,168],{"class":156},[143,2486,171],{"class":156},[143,2488,2489],{"class":174},"/hero.webp",[143,2491,171],{"class":156},[143,2493,2464],{"class":164},[143,2495,168],{"class":156},[143,2497,171],{"class":156},[143,2499,318],{"class":174},[143,2501,171],{"class":156},[143,2503,180],{"class":164},[143,2505,168],{"class":156},[143,2507,171],{"class":156},[143,2509,187],{"class":174},[143,2511,171],{"class":156},[143,2513,192],{"class":156},[143,2515,2516],{"class":145,"line":201},[143,2517,198],{"emptyLinePlaceholder":197},[143,2519,2520],{"class":145,"line":207},[143,2521,2522],{"class":149},"\n",[143,2524,2525,2527],{"class":145,"line":215},[143,2526,157],{"class":156},[143,2528,212],{"class":160},[143,2530,2531,2533,2535,2537,2540],{"class":145,"line":231},[143,2532,218],{"class":164},[143,2534,168],{"class":156},[143,2536,171],{"class":156},[143,2538,2539],{"class":174},"/footer-logo.webp",[143,2541,228],{"class":156},[143,2543,2544,2546,2548,2550,2553],{"class":145,"line":241},[143,2545,311],{"class":164},[143,2547,168],{"class":156},[143,2549,171],{"class":156},[143,2551,2552],{"class":174},"low",[143,2554,228],{"class":156},[143,2556,2557,2559,2561,2563,2566],{"class":145,"line":247},[143,2558,296],{"class":164},[143,2560,168],{"class":156},[143,2562,171],{"class":156},[143,2564,2565],{"class":174},"lazy",[143,2567,228],{"class":156},[143,2569,2570,2572,2574,2576,2579],{"class":145,"line":253},[143,2571,282],{"class":164},[143,2573,168],{"class":156},[143,2575,171],{"class":156},[143,2577,2578],{"class":174},"Footer logo",[143,2580,228],{"class":156},[143,2582,2583],{"class":145,"line":259},[143,2584,341],{"class":156},[143,2586,2587,2589,2592,2594,2596,2598,2601,2603,2605,2607,2609,2611,2613,2616,2619,2621],{"class":145,"line":265},[143,2588,157],{"class":156},[143,2590,2591],{"class":160},"script",[143,2593,165],{"class":164},[143,2595,168],{"class":156},[143,2597,171],{"class":156},[143,2599,2600],{"class":174},"/analytics.js",[143,2602,171],{"class":156},[143,2604,2464],{"class":164},[143,2606,168],{"class":156},[143,2608,171],{"class":156},[143,2610,2552],{"class":174},[143,2612,171],{"class":156},[143,2614,2615],{"class":164}," defer",[143,2617,2618],{"class":156},"> caches.match(request),\n\n // API calls - Network first with fallback\n api: async (request) => {\n try {\n const response = await fetch(request)\n const cache = await caches.open(DYNAMIC_CACHE)\n cache.put(request, response.clone())\n return response\n } catch (error) {\n return caches.match(request)\n }\n },\n\n // Images - Stale while revalidate\n images: async (request) => {\n const cache = await caches.open(STATIC_CACHE)\n const cached = await cache.match(request)\n\n const fetchPromise = fetch(request).then((response) => {\n cache.put(request, response.clone())\n return response\n })\n\n return cached || fetchPromise\n },\n}\n",[140,2632,2633,2638,2654,2670,2686,2690,2695,2706,2711,2740,2744,2749,2768,2775,2795,2820,2846,2854,2871,2887,2891,2895,2899,2904,2923,2947,2970,2974,3009,3032,3039,3046,3051,3065,3070],{"__ignoreMap":138},[143,2634,2635],{"class":145,"line":146},[143,2636,2637],{"class":149},"// sw.js - Advanced caching strategies\n",[143,2639,2640,2642,2645,2647,2649,2652],{"class":145,"line":153},[143,2641,937],{"class":164},[143,2643,2644],{"class":616}," CACHE_NAME ",[143,2646,168],{"class":156},[143,2648,878],{"class":156},[143,2650,2651],{"class":174},"app-v1",[143,2653,228],{"class":156},[143,2655,2656,2658,2661,2663,2665,2668],{"class":145,"line":16},[143,2657,937],{"class":164},[143,2659,2660],{"class":616}," STATIC_CACHE ",[143,2662,168],{"class":156},[143,2664,878],{"class":156},[143,2666,2667],{"class":174},"static-v1",[143,2669,228],{"class":156},[143,2671,2672,2674,2677,2679,2681,2684],{"class":145,"line":201},[143,2673,937],{"class":164},[143,2675,2676],{"class":616}," DYNAMIC_CACHE ",[143,2678,168],{"class":156},[143,2680,878],{"class":156},[143,2682,2683],{"class":174},"dynamic-v1",[143,2685,228],{"class":156},[143,2687,2688],{"class":145,"line":207},[143,2689,198],{"emptyLinePlaceholder":197},[143,2691,2692],{"class":145,"line":215},[143,2693,2694],{"class":149},"// Cache strategies for different resource types\n",[143,2696,2697,2699,2702,2704],{"class":145,"line":231},[143,2698,937],{"class":164},[143,2700,2701],{"class":616}," cacheStrategies ",[143,2703,168],{"class":156},[143,2705,587],{"class":156},[143,2707,2708],{"class":145,"line":241},[143,2709,2710],{"class":149}," // Static assets - Cache first\n",[143,2712,2713,2716,2718,2720,2723,2725,2727,2730,2732,2735,2738],{"class":145,"line":247},[143,2714,2715],{"class":599}," static",[143,2717,596],{"class":156},[143,2719,1124],{"class":156},[143,2721,2722],{"class":1311},"request",[143,2724,1315],{"class":156},[143,2726,951],{"class":164},[143,2728,2729],{"class":616}," caches",[143,2731,126],{"class":156},[143,2733,2734],{"class":599},"match",[143,2736,2737],{"class":616},"(request)",[143,2739,1105],{"class":156},[143,2741,2742],{"class":145,"line":253},[143,2743,198],{"emptyLinePlaceholder":197},[143,2745,2746],{"class":145,"line":259},[143,2747,2748],{"class":149}," // API calls - Network first with fallback\n",[143,2750,2751,2754,2756,2758,2760,2762,2764,2766],{"class":145,"line":265},[143,2752,2753],{"class":599}," api",[143,2755,596],{"class":156},[143,2757,945],{"class":164},[143,2759,1124],{"class":156},[143,2761,2722],{"class":1311},[143,2763,1315],{"class":156},[143,2765,951],{"class":164},[143,2767,587],{"class":156},[143,2769,2770,2773],{"class":145,"line":29},[143,2771,2772],{"class":862}," try",[143,2774,587],{"class":156},[143,2776,2777,2779,2782,2784,2786,2789,2791,2793],{"class":145,"line":293},[143,2778,1150],{"class":164},[143,2780,2781],{"class":616}," response",[143,2783,967],{"class":156},[143,2785,970],{"class":862},[143,2787,2788],{"class":599}," fetch",[143,2790,603],{"class":160},[143,2792,2722],{"class":616},[143,2794,984],{"class":160},[143,2796,2797,2799,2802,2804,2806,2808,2810,2813,2815,2818],{"class":145,"line":308},[143,2798,1150],{"class":164},[143,2800,2801],{"class":616}," cache",[143,2803,967],{"class":156},[143,2805,970],{"class":862},[143,2807,2729],{"class":616},[143,2809,126],{"class":156},[143,2811,2812],{"class":599},"open",[143,2814,603],{"class":160},[143,2816,2817],{"class":616},"DYNAMIC_CACHE",[143,2819,984],{"class":160},[143,2821,2822,2825,2827,2830,2832,2834,2836,2838,2840,2843],{"class":145,"line":323},[143,2823,2824],{"class":616}," cache",[143,2826,126],{"class":156},[143,2828,2829],{"class":599},"put",[143,2831,603],{"class":160},[143,2833,2722],{"class":616},[143,2835,610],{"class":156},[143,2837,2781],{"class":616},[143,2839,126],{"class":156},[143,2841,2842],{"class":599},"clone",[143,2844,2845],{"class":160},"())\n",[143,2847,2848,2851],{"class":145,"line":338},[143,2849,2850],{"class":862}," return",[143,2852,2853],{"class":616}," response\n",[143,2855,2856,2859,2862,2864,2867,2869],{"class":145,"line":753},[143,2857,2858],{"class":156}," }",[143,2860,2861],{"class":862}," catch",[143,2863,1124],{"class":160},[143,2865,2866],{"class":616},"error",[143,2868,1141],{"class":160},[143,2870,1144],{"class":156},[143,2872,2873,2875,2877,2879,2881,2883,2885],{"class":145,"line":766},[143,2874,2850],{"class":862},[143,2876,2729],{"class":616},[143,2878,126],{"class":156},[143,2880,2734],{"class":599},[143,2882,603],{"class":160},[143,2884,2722],{"class":616},[143,2886,984],{"class":160},[143,2888,2889],{"class":145,"line":780},[143,2890,1191],{"class":156},[143,2892,2893],{"class":145,"line":793},[143,2894,1197],{"class":156},[143,2896,2897],{"class":145,"line":822},[143,2898,198],{"emptyLinePlaceholder":197},[143,2900,2901],{"class":145,"line":1147},[143,2902,2903],{"class":149}," // Images - Stale while revalidate\n",[143,2905,2906,2909,2911,2913,2915,2917,2919,2921],{"class":145,"line":1175},[143,2907,2908],{"class":599}," images",[143,2910,596],{"class":156},[143,2912,945],{"class":164},[143,2914,1124],{"class":156},[143,2916,2722],{"class":1311},[143,2918,1315],{"class":156},[143,2920,951],{"class":164},[143,2922,587],{"class":156},[143,2924,2925,2928,2930,2932,2934,2936,2938,2940,2942,2945],{"class":145,"line":1188},[143,2926,2927],{"class":164}," const",[143,2929,2801],{"class":616},[143,2931,967],{"class":156},[143,2933,970],{"class":862},[143,2935,2729],{"class":616},[143,2937,126],{"class":156},[143,2939,2812],{"class":599},[143,2941,603],{"class":160},[143,2943,2944],{"class":616},"STATIC_CACHE",[143,2946,984],{"class":160},[143,2948,2949,2951,2954,2956,2958,2960,2962,2964,2966,2968],{"class":145,"line":1194},[143,2950,2927],{"class":164},[143,2952,2953],{"class":616}," cached",[143,2955,967],{"class":156},[143,2957,970],{"class":862},[143,2959,2801],{"class":616},[143,2961,126],{"class":156},[143,2963,2734],{"class":599},[143,2965,603],{"class":160},[143,2967,2722],{"class":616},[143,2969,984],{"class":160},[143,2971,2972],{"class":145,"line":1200},[143,2973,198],{"emptyLinePlaceholder":197},[143,2975,2976,2978,2981,2983,2985,2987,2989,2991,2993,2996,2998,3000,3003,3005,3007],{"class":145,"line":1218},[143,2977,2927],{"class":164},[143,2979,2980],{"class":616}," fetchPromise",[143,2982,967],{"class":156},[143,2984,2788],{"class":599},[143,2986,603],{"class":160},[143,2988,2722],{"class":616},[143,2990,1315],{"class":160},[143,2992,126],{"class":156},[143,2994,2995],{"class":599},"then",[143,2997,603],{"class":160},[143,2999,603],{"class":156},[143,3001,3002],{"class":1311},"response",[143,3004,1315],{"class":156},[143,3006,951],{"class":164},[143,3008,587],{"class":156},[143,3010,3012,3014,3016,3018,3020,3022,3024,3026,3028,3030],{"class":145,"line":3011},29,[143,3013,2824],{"class":616},[143,3015,126],{"class":156},[143,3017,2829],{"class":599},[143,3019,603],{"class":160},[143,3021,2722],{"class":616},[143,3023,610],{"class":156},[143,3025,2781],{"class":616},[143,3027,126],{"class":156},[143,3029,2842],{"class":599},[143,3031,2845],{"class":160},[143,3033,3035,3037],{"class":145,"line":3034},30,[143,3036,2850],{"class":862},[143,3038,2853],{"class":616},[143,3040,3042,3044],{"class":145,"line":3041},31,[143,3043,2858],{"class":156},[143,3045,984],{"class":160},[143,3047,3049],{"class":145,"line":3048},32,[143,3050,198],{"emptyLinePlaceholder":197},[143,3052,3054,3057,3059,3062],{"class":145,"line":3053},33,[143,3055,3056],{"class":862}," return",[143,3058,2953],{"class":616},[143,3060,3061],{"class":156}," ||",[143,3063,3064],{"class":616}," fetchPromise\n",[143,3066,3068],{"class":145,"line":3067},34,[143,3069,1197],{"class":156},[143,3071,3073],{"class":145,"line":3072},35,[143,3074,997],{"class":156},[115,3076,3078],{"id":3077},"_2-modern-image-optimization","2. Modern Image Optimization",[104,3080,3081],{},[123,3082,3083],{},"Next-gen Image Formats with Fallbacks",[133,3085,3087],{"className":135,"code":3086,"language":137,"meta":138,"style":138},"\n \n \n\n \n \n\n \n \"Description\"\n\n",[140,3088,3089,3098,3103,3137,3141,3146,3176,3180,3185,3237],{"__ignoreMap":138},[143,3090,3091,3093,3096],{"class":145,"line":146},[143,3092,157],{"class":156},[143,3094,3095],{"class":160},"picture",[143,3097,570],{"class":156},[143,3099,3100],{"class":145,"line":153},[143,3101,3102],{"class":149}," \n",[143,3104,3105,3108,3111,3114,3116,3118,3121,3123,3126,3128,3130,3133,3135],{"class":145,"line":16},[143,3106,3107],{"class":156}," <",[143,3109,3110],{"class":160},"source",[143,3112,3113],{"class":164}," srcset",[143,3115,168],{"class":156},[143,3117,171],{"class":156},[143,3119,3120],{"class":174},"/image.avif",[143,3122,171],{"class":156},[143,3124,3125],{"class":164}," type",[143,3127,168],{"class":156},[143,3129,171],{"class":156},[143,3131,3132],{"class":174},"image/avif",[143,3134,171],{"class":156},[143,3136,192],{"class":156},[143,3138,3139],{"class":145,"line":201},[143,3140,198],{"emptyLinePlaceholder":197},[143,3142,3143],{"class":145,"line":207},[143,3144,3145],{"class":149}," \n",[143,3147,3148,3150,3152,3154,3156,3158,3161,3163,3165,3167,3169,3172,3174],{"class":145,"line":215},[143,3149,3107],{"class":156},[143,3151,3110],{"class":160},[143,3153,3113],{"class":164},[143,3155,168],{"class":156},[143,3157,171],{"class":156},[143,3159,3160],{"class":174},"/image.webp",[143,3162,171],{"class":156},[143,3164,3125],{"class":164},[143,3166,168],{"class":156},[143,3168,171],{"class":156},[143,3170,3171],{"class":174},"image/webp",[143,3173,171],{"class":156},[143,3175,192],{"class":156},[143,3177,3178],{"class":145,"line":231},[143,3179,198],{"emptyLinePlaceholder":197},[143,3181,3182],{"class":145,"line":241},[143,3183,3184],{"class":149}," \n",[143,3186,3187,3189,3191,3193,3195,3197,3200,3202,3204,3206,3208,3211,3213,3216,3218,3220,3222,3224,3227,3229,3231,3233,3235],{"class":145,"line":247},[143,3188,3107],{"class":156},[143,3190,161],{"class":160},[143,3192,165],{"class":164},[143,3194,168],{"class":156},[143,3196,171],{"class":156},[143,3198,3199],{"class":174},"/image.jpg",[143,3201,171],{"class":156},[143,3203,180],{"class":164},[143,3205,168],{"class":156},[143,3207,171],{"class":156},[143,3209,3210],{"class":174},"Description",[143,3212,171],{"class":156},[143,3214,3215],{"class":164}," loading",[143,3217,168],{"class":156},[143,3219,171],{"class":156},[143,3221,2565],{"class":174},[143,3223,171],{"class":156},[143,3225,3226],{"class":164}," decoding",[143,3228,168],{"class":156},[143,3230,171],{"class":156},[143,3232,333],{"class":174},[143,3234,171],{"class":156},[143,3236,192],{"class":156},[143,3238,3239,3241,3243],{"class":145,"line":253},[143,3240,731],{"class":156},[143,3242,3095],{"class":160},[143,3244,570],{"class":156},[104,3246,3247],{},[123,3248,3249],{},"Responsive Images with Art Direction",[133,3251,3253],{"className":135,"code":3252,"language":137,"meta":138,"style":138},"\n \n \n\n \n \n\n \"Hero\n\n",[140,3254,3255,3263,3268,3275,3289,3303,3317,3322,3326,3331,3337,3350,3363,3376,3380,3384,3424],{"__ignoreMap":138},[143,3256,3257,3259,3261],{"class":145,"line":146},[143,3258,157],{"class":156},[143,3260,3095],{"class":160},[143,3262,570],{"class":156},[143,3264,3265],{"class":145,"line":153},[143,3266,3267],{"class":149}," \n",[143,3269,3270,3272],{"class":145,"line":16},[143,3271,3107],{"class":156},[143,3273,3274],{"class":160},"source\n",[143,3276,3277,3280,3282,3284,3287],{"class":145,"line":201},[143,3278,3279],{"class":164}," media",[143,3281,168],{"class":156},[143,3283,171],{"class":156},[143,3285,3286],{"class":174},"(max-width: 768px)",[143,3288,228],{"class":156},[143,3290,3291,3294,3296,3298,3301],{"class":145,"line":207},[143,3292,3293],{"class":164}," srcset",[143,3295,168],{"class":156},[143,3297,171],{"class":156},[143,3299,3300],{"class":174},"/hero-mobile-400w.webp 400w, /hero-mobile-800w.webp 800w",[143,3302,228],{"class":156},[143,3304,3305,3308,3310,3312,3315],{"class":145,"line":215},[143,3306,3307],{"class":164}," sizes",[143,3309,168],{"class":156},[143,3311,171],{"class":156},[143,3313,3314],{"class":174},"100vw",[143,3316,228],{"class":156},[143,3318,3319],{"class":145,"line":231},[143,3320,3321],{"class":156}," />\n",[143,3323,3324],{"class":145,"line":241},[143,3325,198],{"emptyLinePlaceholder":197},[143,3327,3328],{"class":145,"line":247},[143,3329,3330],{"class":149}," \n",[143,3332,3333,3335],{"class":145,"line":253},[143,3334,3107],{"class":156},[143,3336,3274],{"class":160},[143,3338,3339,3341,3343,3345,3348],{"class":145,"line":259},[143,3340,3279],{"class":164},[143,3342,168],{"class":156},[143,3344,171],{"class":156},[143,3346,3347],{"class":174},"(min-width: 769px)",[143,3349,228],{"class":156},[143,3351,3352,3354,3356,3358,3361],{"class":145,"line":265},[143,3353,3293],{"class":164},[143,3355,168],{"class":156},[143,3357,171],{"class":156},[143,3359,3360],{"class":174},"/hero-desktop-800w.webp 800w, /hero-desktop-1600w.webp 1600w",[143,3362,228],{"class":156},[143,3364,3365,3367,3369,3371,3374],{"class":145,"line":29},[143,3366,3307],{"class":164},[143,3368,168],{"class":156},[143,3370,171],{"class":156},[143,3372,3373],{"class":174},"50vw",[143,3375,228],{"class":156},[143,3377,3378],{"class":145,"line":293},[143,3379,3321],{"class":156},[143,3381,3382],{"class":145,"line":308},[143,3383,198],{"emptyLinePlaceholder":197},[143,3385,3386,3388,3390,3392,3394,3396,3399,3401,3403,3405,3407,3410,3412,3414,3416,3418,3420,3422],{"class":145,"line":323},[143,3387,3107],{"class":156},[143,3389,161],{"class":160},[143,3391,165],{"class":164},[143,3393,168],{"class":156},[143,3395,171],{"class":156},[143,3397,3398],{"class":174},"/hero-desktop-800w.webp",[143,3400,171],{"class":156},[143,3402,180],{"class":164},[143,3404,168],{"class":156},[143,3406,171],{"class":156},[143,3408,3409],{"class":174},"Hero image",[143,3411,171],{"class":156},[143,3413,3215],{"class":164},[143,3415,168],{"class":156},[143,3417,171],{"class":156},[143,3419,303],{"class":174},[143,3421,171],{"class":156},[143,3423,192],{"class":156},[143,3425,3426,3428,3430],{"class":145,"line":338},[143,3427,731],{"class":156},[143,3429,3095],{"class":160},[143,3431,570],{"class":156},[115,3433,3435],{"id":3434},"_3-css-performance-optimization","3. CSS Performance Optimization",[104,3437,3438],{},[123,3439,3440],{},"Critical CSS Extraction and Inlining",[133,3442,3444],{"className":848,"code":3443,"language":850,"meta":138,"style":138},"// Build-time critical CSS extraction\nconst critical = require(\"critical\")\n\ncritical.generate({\n inline: true,\n base: \"dist/\",\n src: \"index.html\",\n dest: \"index-critical.html\",\n width: 1300,\n height: 900,\n minify: true,\n extract: true, // Extract critical CSS to separate file\n ignore: [\"@font-face\", /url\\(/], // Ignore certain rules\n})\n",[140,3445,3446,3451,3474,3478,3491,3502,3518,3533,3549,3560,3570,3581,3595,3632],{"__ignoreMap":138},[143,3447,3448],{"class":145,"line":146},[143,3449,3450],{"class":149},"// Build-time critical CSS extraction\n",[143,3452,3453,3455,3458,3460,3463,3465,3467,3470,3472],{"class":145,"line":153},[143,3454,937],{"class":164},[143,3456,3457],{"class":616}," critical ",[143,3459,168],{"class":156},[143,3461,3462],{"class":599}," require",[143,3464,603],{"class":616},[143,3466,171],{"class":156},[143,3468,3469],{"class":174},"critical",[143,3471,171],{"class":156},[143,3473,984],{"class":616},[143,3475,3476],{"class":145,"line":16},[143,3477,198],{"emptyLinePlaceholder":197},[143,3479,3480,3482,3484,3487,3489],{"class":145,"line":201},[143,3481,3469],{"class":616},[143,3483,126],{"class":156},[143,3485,3486],{"class":599},"generate",[143,3488,603],{"class":616},[143,3490,1144],{"class":156},[143,3492,3493,3496,3498,3500],{"class":145,"line":207},[143,3494,3495],{"class":160}," inline",[143,3497,596],{"class":156},[143,3499,1212],{"class":1211},[143,3501,1105],{"class":156},[143,3503,3504,3507,3509,3511,3514,3516],{"class":145,"line":215},[143,3505,3506],{"class":160}," base",[143,3508,596],{"class":156},[143,3510,878],{"class":156},[143,3512,3513],{"class":174},"dist/",[143,3515,171],{"class":156},[143,3517,1105],{"class":156},[143,3519,3520,3522,3524,3526,3529,3531],{"class":145,"line":231},[143,3521,218],{"class":160},[143,3523,596],{"class":156},[143,3525,878],{"class":156},[143,3527,3528],{"class":174},"index.html",[143,3530,171],{"class":156},[143,3532,1105],{"class":156},[143,3534,3535,3538,3540,3542,3545,3547],{"class":145,"line":241},[143,3536,3537],{"class":160}," dest",[143,3539,596],{"class":156},[143,3541,878],{"class":156},[143,3543,3544],{"class":174},"index-critical.html",[143,3546,171],{"class":156},[143,3548,1105],{"class":156},[143,3550,3551,3553,3555,3558],{"class":145,"line":247},[143,3552,1773],{"class":160},[143,3554,596],{"class":156},[143,3556,3557],{"class":606}," 1300",[143,3559,1105],{"class":156},[143,3561,3562,3564,3566,3568],{"class":145,"line":253},[143,3563,1785],{"class":160},[143,3565,596],{"class":156},[143,3567,1998],{"class":606},[143,3569,1105],{"class":156},[143,3571,3572,3575,3577,3579],{"class":145,"line":259},[143,3573,3574],{"class":160}," minify",[143,3576,596],{"class":156},[143,3578,1212],{"class":1211},[143,3580,1105],{"class":156},[143,3582,3583,3586,3588,3590,3592],{"class":145,"line":265},[143,3584,3585],{"class":160}," extract",[143,3587,596],{"class":156},[143,3589,1212],{"class":1211},[143,3591,610],{"class":156},[143,3593,3594],{"class":149}," // Extract critical CSS to separate file\n",[143,3596,3597,3600,3602,3605,3607,3609,3611,3613,3616,3619,3622,3624,3627,3629],{"class":145,"line":29},[143,3598,3599],{"class":160}," ignore",[143,3601,596],{"class":156},[143,3603,3604],{"class":616}," [",[143,3606,171],{"class":156},[143,3608,1918],{"class":174},[143,3610,171],{"class":156},[143,3612,610],{"class":156},[143,3614,3615],{"class":156}," /",[143,3617,3618],{"class":174},"url",[143,3620,3621],{"class":616},"\\(",[143,3623,94],{"class":156},[143,3625,3626],{"class":616},"]",[143,3628,610],{"class":156},[143,3630,3631],{"class":149}," // Ignore certain rules\n",[143,3633,3634,3636],{"class":145,"line":293},[143,3635,1293],{"class":156},[143,3637,984],{"class":616},[104,3639,3640],{},[123,3641,3642],{},"CSS Containment for Performance",[133,3644,3646],{"className":1747,"code":3645,"language":1749,"meta":138,"style":138},"/* Isolate layout calculations */\n.card {\n contain: layout style paint;\n}\n\n/* Optimize for animations */\n.animated-element {\n contain: layout;\n will-change: transform;\n}\n\n/* Content containment for dynamic sections */\n.dynamic-content {\n contain: size layout style paint;\n}\n",[140,3647,3648,3653,3662,3674,3678,3682,3687,3696,3707,3719,3723,3727,3732,3741,3752],{"__ignoreMap":138},[143,3649,3650],{"class":145,"line":146},[143,3651,3652],{"class":149},"/* Isolate layout calculations */\n",[143,3654,3655,3657,3660],{"class":145,"line":153},[143,3656,126],{"class":156},[143,3658,3659],{"class":583},"card",[143,3661,587],{"class":156},[143,3663,3664,3667,3669,3672],{"class":145,"line":16},[143,3665,3666],{"class":592}," contain",[143,3668,596],{"class":156},[143,3670,3671],{"class":616}," layout style paint",[143,3673,646],{"class":156},[143,3675,3676],{"class":145,"line":201},[143,3677,997],{"class":156},[143,3679,3680],{"class":145,"line":207},[143,3681,198],{"emptyLinePlaceholder":197},[143,3683,3684],{"class":145,"line":215},[143,3685,3686],{"class":149},"/* Optimize for animations */\n",[143,3688,3689,3691,3694],{"class":145,"line":231},[143,3690,126],{"class":156},[143,3692,3693],{"class":583},"animated-element",[143,3695,587],{"class":156},[143,3697,3698,3700,3702,3705],{"class":145,"line":241},[143,3699,3666],{"class":592},[143,3701,596],{"class":156},[143,3703,3704],{"class":616}," layout",[143,3706,646],{"class":156},[143,3708,3709,3712,3714,3717],{"class":145,"line":247},[143,3710,3711],{"class":592}," will-change",[143,3713,596],{"class":156},[143,3715,3716],{"class":616}," transform",[143,3718,646],{"class":156},[143,3720,3721],{"class":145,"line":253},[143,3722,997],{"class":156},[143,3724,3725],{"class":145,"line":259},[143,3726,198],{"emptyLinePlaceholder":197},[143,3728,3729],{"class":145,"line":265},[143,3730,3731],{"class":149},"/* Content containment for dynamic sections */\n",[143,3733,3734,3736,3739],{"class":145,"line":29},[143,3735,126],{"class":156},[143,3737,3738],{"class":583},"dynamic-content",[143,3740,587],{"class":156},[143,3742,3743,3745,3747,3750],{"class":145,"line":293},[143,3744,3666],{"class":592},[143,3746,596],{"class":156},[143,3748,3749],{"class":616}," size layout style paint",[143,3751,646],{"class":156},[143,3753,3754],{"class":145,"line":308},[143,3755,997],{"class":156},[115,3757,3759],{"id":3758},"_4-javascript-bundle-optimization","4. JavaScript Bundle Optimization",[104,3761,3762],{},[123,3763,3764],{},"Tree Shaking and Dead Code Elimination",[133,3766,3768],{"className":848,"code":3767,"language":850,"meta":138,"style":138},"// ❌ Importing entire library\nimport _ from \"lodash\"\n\n// ✅ Import only what you need\nimport { debounce, throttle } from \"lodash-es\"\n\n// ✅ Even better: use native alternatives\nconst debounce = (func, wait) => {\n let timeout\n return function executedFunction(...args) {\n const later = () => {\n clearTimeout(timeout)\n func(...args)\n }\n clearTimeout(timeout)\n timeout = setTimeout(later, wait)\n }\n}\n",[140,3769,3770,3775,3792,3796,3801,3824,3828,3833,3858,3866,3885,3900,3912,3926,3930,3941,3962,3966],{"__ignoreMap":138},[143,3771,3772],{"class":145,"line":146},[143,3773,3774],{"class":149},"// ❌ Importing entire library\n",[143,3776,3777,3779,3782,3785,3787,3790],{"class":145,"line":153},[143,3778,863],{"class":862},[143,3780,3781],{"class":616}," _ ",[143,3783,3784],{"class":862},"from",[143,3786,878],{"class":156},[143,3788,3789],{"class":174},"lodash",[143,3791,228],{"class":156},[143,3793,3794],{"class":145,"line":16},[143,3795,198],{"emptyLinePlaceholder":197},[143,3797,3798],{"class":145,"line":201},[143,3799,3800],{"class":149},"// ✅ Import only what you need\n",[143,3802,3803,3805,3807,3810,3812,3814,3816,3818,3820,3822],{"class":145,"line":207},[143,3804,863],{"class":862},[143,3806,866],{"class":156},[143,3808,3809],{"class":616}," debounce",[143,3811,610],{"class":156},[143,3813,1591],{"class":616},[143,3815,872],{"class":156},[143,3817,875],{"class":862},[143,3819,878],{"class":156},[143,3821,1600],{"class":174},[143,3823,228],{"class":156},[143,3825,3826],{"class":145,"line":215},[143,3827,198],{"emptyLinePlaceholder":197},[143,3829,3830],{"class":145,"line":231},[143,3831,3832],{"class":149},"// ✅ Even better: use native alternatives\n",[143,3834,3835,3837,3840,3842,3844,3847,3849,3852,3854,3856],{"class":145,"line":241},[143,3836,937],{"class":164},[143,3838,3839],{"class":616}," debounce ",[143,3841,168],{"class":156},[143,3843,1124],{"class":156},[143,3845,3846],{"class":1311},"func",[143,3848,610],{"class":156},[143,3850,3851],{"class":1311}," wait",[143,3853,1315],{"class":156},[143,3855,951],{"class":164},[143,3857,587],{"class":156},[143,3859,3860,3863],{"class":145,"line":247},[143,3861,3862],{"class":164}," let",[143,3864,3865],{"class":616}," timeout\n",[143,3867,3868,3870,3872,3875,3878,3881,3883],{"class":145,"line":253},[143,3869,989],{"class":862},[143,3871,1375],{"class":164},[143,3873,3874],{"class":599}," executedFunction",[143,3876,3877],{"class":156},"(...",[143,3879,3880],{"class":1311},"args",[143,3882,1315],{"class":156},[143,3884,587],{"class":156},[143,3886,3887,3889,3892,3894,3896,3898],{"class":145,"line":259},[143,3888,2927],{"class":164},[143,3890,3891],{"class":616}," later",[143,3893,967],{"class":156},[143,3895,948],{"class":156},[143,3897,951],{"class":164},[143,3899,587],{"class":156},[143,3901,3902,3905,3907,3910],{"class":145,"line":265},[143,3903,3904],{"class":599}," clearTimeout",[143,3906,603],{"class":160},[143,3908,3909],{"class":616},"timeout",[143,3911,984],{"class":160},[143,3913,3914,3917,3919,3922,3924],{"class":145,"line":29},[143,3915,3916],{"class":599}," func",[143,3918,603],{"class":160},[143,3920,3921],{"class":156},"...",[143,3923,3880],{"class":616},[143,3925,984],{"class":160},[143,3927,3928],{"class":145,"line":293},[143,3929,1191],{"class":156},[143,3931,3932,3935,3937,3939],{"class":145,"line":308},[143,3933,3934],{"class":599}," clearTimeout",[143,3936,603],{"class":160},[143,3938,3909],{"class":616},[143,3940,984],{"class":160},[143,3942,3943,3946,3948,3951,3953,3956,3958,3960],{"class":145,"line":323},[143,3944,3945],{"class":616}," timeout",[143,3947,967],{"class":156},[143,3949,3950],{"class":599}," setTimeout",[143,3952,603],{"class":160},[143,3954,3955],{"class":616},"later",[143,3957,610],{"class":156},[143,3959,3851],{"class":616},[143,3961,984],{"class":160},[143,3963,3964],{"class":145,"line":338},[143,3965,675],{"class":156},[143,3967,3968],{"class":145,"line":753},[143,3969,997],{"class":156},[104,3971,3972],{},[123,3973,3974],{},"Module Federation for Micro-frontends",[133,3976,3978],{"className":848,"code":3977,"language":850,"meta":138,"style":138},"// webpack.config.js\nconst ModuleFederationPlugin = require(\"@module-federation/webpack\")\n\nmodule.exports = {\n plugins: [\n new ModuleFederationPlugin({\n name: \"shell\",\n remotes: {\n dashboard: \"dashboard@http://localhost:3001/remoteEntry.js\",\n profile: \"profile@http://localhost:3002/remoteEntry.js\",\n },\n shared: {\n react: { singleton: true },\n \"react-dom\": { singleton: true },\n },\n }),\n ],\n}\n",[140,3979,3980,3985,4007,4011,4020,4030,4042,4058,4067,4083,4099,4104,4113,4131,4153,4157,4165,4172],{"__ignoreMap":138},[143,3981,3982],{"class":145,"line":146},[143,3983,3984],{"class":149},"// webpack.config.js\n",[143,3986,3987,3989,3992,3994,3996,3998,4000,4003,4005],{"class":145,"line":153},[143,3988,937],{"class":164},[143,3990,3991],{"class":616}," ModuleFederationPlugin ",[143,3993,168],{"class":156},[143,3995,3462],{"class":599},[143,3997,603],{"class":616},[143,3999,171],{"class":156},[143,4001,4002],{"class":174},"@module-federation/webpack",[143,4004,171],{"class":156},[143,4006,984],{"class":616},[143,4008,4009],{"class":145,"line":16},[143,4010,198],{"emptyLinePlaceholder":197},[143,4012,4013,4016,4018],{"class":145,"line":201},[143,4014,4015],{"class":156},"module.exports",[143,4017,967],{"class":156},[143,4019,587],{"class":156},[143,4021,4022,4025,4027],{"class":145,"line":207},[143,4023,4024],{"class":160}," plugins",[143,4026,596],{"class":156},[143,4028,4029],{"class":616}," [\n",[143,4031,4032,4035,4038,4040],{"class":145,"line":215},[143,4033,4034],{"class":156}," new",[143,4036,4037],{"class":599}," ModuleFederationPlugin",[143,4039,603],{"class":616},[143,4041,1144],{"class":156},[143,4043,4044,4047,4049,4051,4054,4056],{"class":145,"line":231},[143,4045,4046],{"class":160}," name",[143,4048,596],{"class":156},[143,4050,878],{"class":156},[143,4052,4053],{"class":174},"shell",[143,4055,171],{"class":156},[143,4057,1105],{"class":156},[143,4059,4060,4063,4065],{"class":145,"line":241},[143,4061,4062],{"class":160}," remotes",[143,4064,596],{"class":156},[143,4066,587],{"class":156},[143,4068,4069,4072,4074,4076,4079,4081],{"class":145,"line":247},[143,4070,4071],{"class":160}," dashboard",[143,4073,596],{"class":156},[143,4075,878],{"class":156},[143,4077,4078],{"class":174},"dashboard@http://localhost:3001/remoteEntry.js",[143,4080,171],{"class":156},[143,4082,1105],{"class":156},[143,4084,4085,4088,4090,4092,4095,4097],{"class":145,"line":253},[143,4086,4087],{"class":160}," profile",[143,4089,596],{"class":156},[143,4091,878],{"class":156},[143,4093,4094],{"class":174},"profile@http://localhost:3002/remoteEntry.js",[143,4096,171],{"class":156},[143,4098,1105],{"class":156},[143,4100,4101],{"class":145,"line":259},[143,4102,4103],{"class":156}," },\n",[143,4105,4106,4109,4111],{"class":145,"line":265},[143,4107,4108],{"class":160}," shared",[143,4110,596],{"class":156},[143,4112,587],{"class":156},[143,4114,4115,4118,4120,4122,4125,4127,4129],{"class":145,"line":29},[143,4116,4117],{"class":160}," react",[143,4119,596],{"class":156},[143,4121,866],{"class":156},[143,4123,4124],{"class":160}," singleton",[143,4126,596],{"class":156},[143,4128,1212],{"class":1211},[143,4130,1215],{"class":156},[143,4132,4133,4136,4139,4141,4143,4145,4147,4149,4151],{"class":145,"line":293},[143,4134,4135],{"class":156}," \"",[143,4137,4138],{"class":160},"react-dom",[143,4140,171],{"class":156},[143,4142,596],{"class":156},[143,4144,866],{"class":156},[143,4146,4124],{"class":160},[143,4148,596],{"class":156},[143,4150,1212],{"class":1211},[143,4152,1215],{"class":156},[143,4154,4155],{"class":145,"line":308},[143,4156,4103],{"class":156},[143,4158,4159,4161,4163],{"class":145,"line":323},[143,4160,2858],{"class":156},[143,4162,1315],{"class":616},[143,4164,1105],{"class":156},[143,4166,4167,4170],{"class":145,"line":338},[143,4168,4169],{"class":616}," ]",[143,4171,1105],{"class":156},[143,4173,4174],{"class":145,"line":753},[143,4175,997],{"class":156},[99,4177,4179],{"id":4178},"performance-monitoring-and-measurement","Performance Monitoring and Measurement",[115,4181,4183],{"id":4182},"_1-real-user-monitoring-rum","1. Real User Monitoring (RUM)",[133,4185,4187],{"className":848,"code":4186,"language":850,"meta":138,"style":138},"// Custom performance monitoring\nclass PerformanceMonitor {\n constructor() {\n this.metrics = {}\n this.observer = null\n this.init()\n }\n\n init() {\n // Core Web Vitals monitoring\n this.observeCLS()\n this.observeLCP()\n this.observeFID()\n this.observeINP()\n }\n\n observeLCP() {\n const observer = new PerformanceObserver((list) => {\n const entries = list.getEntries()\n const lastEntry = entries[entries.length - 1]\n this.metrics.lcp = lastEntry.startTime\n this.sendMetric(\"lcp\", lastEntry.startTime)\n })\n\n observer.observe({ entryTypes: [\"largest-contentful-paint\"] })\n }\n\n observeCLS() {\n let clsValue = 0\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (!entry.hadRecentInput) {\n clsValue += entry.value\n }\n }\n this.metrics.cls = clsValue\n })\n\n observer.observe({ entryTypes: [\"layout-shift\"] })\n }\n\n observeINP() {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n const duration = entry.processingEnd - entry.startTime\n this.metrics.inp = Math.max(this.metrics.inp || 0, duration)\n this.sendMetric(\"inp\", duration)\n }\n })\n\n observer.observe({ entryTypes: [\"event\"] })\n }\n\n sendMetric(name, value) {\n // Send to analytics service\n if (\"sendBeacon\" in navigator) {\n navigator.sendBeacon(\n \"/analytics\",\n JSON.stringify({\n metric: name,\n value: value,\n timestamp: Date.now(),\n url: window.location.href,\n }),\n )\n }\n }\n}\n\n// Initialize monitoring\nnew PerformanceMonitor()\n",[140,4188,4189,4194,4204,4213,4226,4238,4246,4250,4254,4263,4268,4277,4286,4295,4304,4308,4312,4321,4348,4367,4398,4419,4445,4451,4455,4490,4494,4498,4507,4520,4544,4570,4592,4607,4612,4617,4634,4641,4646,4678,4683,4688,4698,4723,4746,4772,4817,4838,4843,4850,4855,4887,4892,4897,4917,4923,4947,4959,4971,4986,4999,5011,5031,5054,5064,5070,5075,5080,5085,5090,5096],{"__ignoreMap":138},[143,4190,4191],{"class":145,"line":146},[143,4192,4193],{"class":149},"// Custom performance monitoring\n",[143,4195,4196,4199,4202],{"class":145,"line":153},[143,4197,4198],{"class":164},"class",[143,4200,4201],{"class":583}," PerformanceMonitor",[143,4203,587],{"class":156},[143,4205,4206,4209,4211],{"class":145,"line":16},[143,4207,4208],{"class":164}," constructor",[143,4210,1622],{"class":156},[143,4212,587],{"class":156},[143,4214,4215,4218,4221,4223],{"class":145,"line":201},[143,4216,4217],{"class":156}," this.",[143,4219,4220],{"class":616},"metrics",[143,4222,967],{"class":156},[143,4224,4225],{"class":156}," {}\n",[143,4227,4228,4230,4233,4235],{"class":145,"line":207},[143,4229,4217],{"class":156},[143,4231,4232],{"class":616},"observer",[143,4234,967],{"class":156},[143,4236,4237],{"class":156}," null\n",[143,4239,4240,4242,4244],{"class":145,"line":215},[143,4241,4217],{"class":156},[143,4243,1057],{"class":599},[143,4245,1060],{"class":160},[143,4247,4248],{"class":145,"line":231},[143,4249,675],{"class":156},[143,4251,4252],{"class":145,"line":241},[143,4253,198],{"emptyLinePlaceholder":197},[143,4255,4256,4259,4261],{"class":145,"line":247},[143,4257,4258],{"class":160}," init",[143,4260,1622],{"class":156},[143,4262,587],{"class":156},[143,4264,4265],{"class":145,"line":253},[143,4266,4267],{"class":149}," // Core Web Vitals monitoring\n",[143,4269,4270,4272,4275],{"class":145,"line":259},[143,4271,4217],{"class":156},[143,4273,4274],{"class":599},"observeCLS",[143,4276,1060],{"class":160},[143,4278,4279,4281,4284],{"class":145,"line":265},[143,4280,4217],{"class":156},[143,4282,4283],{"class":599},"observeLCP",[143,4285,1060],{"class":160},[143,4287,4288,4290,4293],{"class":145,"line":29},[143,4289,4217],{"class":156},[143,4291,4292],{"class":599},"observeFID",[143,4294,1060],{"class":160},[143,4296,4297,4299,4302],{"class":145,"line":293},[143,4298,4217],{"class":156},[143,4300,4301],{"class":599},"observeINP",[143,4303,1060],{"class":160},[143,4305,4306],{"class":145,"line":308},[143,4307,675],{"class":156},[143,4309,4310],{"class":145,"line":323},[143,4311,198],{"emptyLinePlaceholder":197},[143,4313,4314,4317,4319],{"class":145,"line":338},[143,4315,4316],{"class":160}," observeLCP",[143,4318,1622],{"class":156},[143,4320,587],{"class":156},[143,4322,4323,4325,4328,4330,4332,4335,4337,4339,4342,4344,4346],{"class":145,"line":753},[143,4324,2927],{"class":164},[143,4326,4327],{"class":616}," observer",[143,4329,967],{"class":156},[143,4331,1249],{"class":156},[143,4333,4334],{"class":599}," PerformanceObserver",[143,4336,603],{"class":160},[143,4338,603],{"class":156},[143,4340,4341],{"class":1311},"list",[143,4343,1315],{"class":156},[143,4345,951],{"class":164},[143,4347,587],{"class":156},[143,4349,4350,4352,4355,4357,4360,4362,4365],{"class":145,"line":766},[143,4351,1150],{"class":164},[143,4353,4354],{"class":616}," entries",[143,4356,967],{"class":156},[143,4358,4359],{"class":616}," list",[143,4361,126],{"class":156},[143,4363,4364],{"class":599},"getEntries",[143,4366,1060],{"class":160},[143,4368,4369,4371,4374,4376,4378,4381,4384,4386,4389,4392,4395],{"class":145,"line":780},[143,4370,1150],{"class":164},[143,4372,4373],{"class":616}," lastEntry",[143,4375,967],{"class":156},[143,4377,4354],{"class":616},[143,4379,4380],{"class":160},"[",[143,4382,4383],{"class":616},"entries",[143,4385,126],{"class":156},[143,4387,4388],{"class":616},"length",[143,4390,4391],{"class":156}," -",[143,4393,4394],{"class":606}," 1",[143,4396,4397],{"class":160},"]\n",[143,4399,4400,4403,4405,4407,4410,4412,4414,4416],{"class":145,"line":793},[143,4401,4402],{"class":156}," this.",[143,4404,4220],{"class":616},[143,4406,126],{"class":156},[143,4408,4409],{"class":616},"lcp",[143,4411,967],{"class":156},[143,4413,4373],{"class":616},[143,4415,126],{"class":156},[143,4417,4418],{"class":616},"startTime\n",[143,4420,4421,4423,4426,4428,4430,4432,4434,4436,4438,4440,4443],{"class":145,"line":822},[143,4422,4402],{"class":156},[143,4424,4425],{"class":599},"sendMetric",[143,4427,603],{"class":160},[143,4429,171],{"class":156},[143,4431,4409],{"class":174},[143,4433,171],{"class":156},[143,4435,610],{"class":156},[143,4437,4373],{"class":616},[143,4439,126],{"class":156},[143,4441,4442],{"class":616},"startTime",[143,4444,984],{"class":160},[143,4446,4447,4449],{"class":145,"line":1147},[143,4448,2858],{"class":156},[143,4450,984],{"class":160},[143,4452,4453],{"class":145,"line":1175},[143,4454,198],{"emptyLinePlaceholder":197},[143,4456,4457,4460,4462,4465,4467,4469,4472,4474,4476,4478,4481,4483,4486,4488],{"class":145,"line":1188},[143,4458,4459],{"class":616}," observer",[143,4461,126],{"class":156},[143,4463,4464],{"class":599},"observe",[143,4466,603],{"class":160},[143,4468,1282],{"class":156},[143,4470,4471],{"class":160}," entryTypes",[143,4473,596],{"class":156},[143,4475,3604],{"class":160},[143,4477,171],{"class":156},[143,4479,4480],{"class":174},"largest-contentful-paint",[143,4482,171],{"class":156},[143,4484,4485],{"class":160},"] ",[143,4487,1293],{"class":156},[143,4489,984],{"class":160},[143,4491,4492],{"class":145,"line":1194},[143,4493,675],{"class":156},[143,4495,4496],{"class":145,"line":1200},[143,4497,198],{"emptyLinePlaceholder":197},[143,4499,4500,4503,4505],{"class":145,"line":1218},[143,4501,4502],{"class":160}," observeCLS",[143,4504,1622],{"class":156},[143,4506,587],{"class":156},[143,4508,4509,4512,4515,4517],{"class":145,"line":3011},[143,4510,4511],{"class":164}," let",[143,4513,4514],{"class":616}," clsValue",[143,4516,967],{"class":156},[143,4518,4519],{"class":606}," 0\n",[143,4521,4522,4524,4526,4528,4530,4532,4534,4536,4538,4540,4542],{"class":145,"line":3034},[143,4523,2927],{"class":164},[143,4525,4327],{"class":616},[143,4527,967],{"class":156},[143,4529,1249],{"class":156},[143,4531,4334],{"class":599},[143,4533,603],{"class":160},[143,4535,603],{"class":156},[143,4537,4341],{"class":1311},[143,4539,1315],{"class":156},[143,4541,951],{"class":164},[143,4543,587],{"class":156},[143,4545,4546,4549,4551,4553,4556,4559,4561,4563,4565,4568],{"class":145,"line":3041},[143,4547,4548],{"class":862}," for",[143,4550,1124],{"class":160},[143,4552,937],{"class":164},[143,4554,4555],{"class":616}," entry",[143,4557,4558],{"class":156}," of",[143,4560,4359],{"class":616},[143,4562,126],{"class":156},[143,4564,4364],{"class":599},[143,4566,4567],{"class":160},"()) ",[143,4569,1144],{"class":156},[143,4571,4572,4575,4577,4580,4583,4585,4588,4590],{"class":145,"line":3048},[143,4573,4574],{"class":862}," if",[143,4576,1124],{"class":160},[143,4578,4579],{"class":156},"!",[143,4581,4582],{"class":616},"entry",[143,4584,126],{"class":156},[143,4586,4587],{"class":616},"hadRecentInput",[143,4589,1141],{"class":160},[143,4591,1144],{"class":156},[143,4593,4594,4597,4600,4602,4604],{"class":145,"line":3053},[143,4595,4596],{"class":616}," clsValue",[143,4598,4599],{"class":156}," +=",[143,4601,4555],{"class":616},[143,4603,126],{"class":156},[143,4605,4606],{"class":616},"value\n",[143,4608,4609],{"class":145,"line":3067},[143,4610,4611],{"class":156}," }\n",[143,4613,4614],{"class":145,"line":3072},[143,4615,4616],{"class":156}," }\n",[143,4618,4620,4622,4624,4626,4629,4631],{"class":145,"line":4619},36,[143,4621,4402],{"class":156},[143,4623,4220],{"class":616},[143,4625,126],{"class":156},[143,4627,4628],{"class":616},"cls",[143,4630,967],{"class":156},[143,4632,4633],{"class":616}," clsValue\n",[143,4635,4637,4639],{"class":145,"line":4636},37,[143,4638,2858],{"class":156},[143,4640,984],{"class":160},[143,4642,4644],{"class":145,"line":4643},38,[143,4645,198],{"emptyLinePlaceholder":197},[143,4647,4649,4651,4653,4655,4657,4659,4661,4663,4665,4667,4670,4672,4674,4676],{"class":145,"line":4648},39,[143,4650,4459],{"class":616},[143,4652,126],{"class":156},[143,4654,4464],{"class":599},[143,4656,603],{"class":160},[143,4658,1282],{"class":156},[143,4660,4471],{"class":160},[143,4662,596],{"class":156},[143,4664,3604],{"class":160},[143,4666,171],{"class":156},[143,4668,4669],{"class":174},"layout-shift",[143,4671,171],{"class":156},[143,4673,4485],{"class":160},[143,4675,1293],{"class":156},[143,4677,984],{"class":160},[143,4679,4681],{"class":145,"line":4680},40,[143,4682,675],{"class":156},[143,4684,4686],{"class":145,"line":4685},41,[143,4687,198],{"emptyLinePlaceholder":197},[143,4689,4691,4694,4696],{"class":145,"line":4690},42,[143,4692,4693],{"class":160}," observeINP",[143,4695,1622],{"class":156},[143,4697,587],{"class":156},[143,4699,4701,4703,4705,4707,4709,4711,4713,4715,4717,4719,4721],{"class":145,"line":4700},43,[143,4702,2927],{"class":164},[143,4704,4327],{"class":616},[143,4706,967],{"class":156},[143,4708,1249],{"class":156},[143,4710,4334],{"class":599},[143,4712,603],{"class":160},[143,4714,603],{"class":156},[143,4716,4341],{"class":1311},[143,4718,1315],{"class":156},[143,4720,951],{"class":164},[143,4722,587],{"class":156},[143,4724,4726,4728,4730,4732,4734,4736,4738,4740,4742,4744],{"class":145,"line":4725},44,[143,4727,4548],{"class":862},[143,4729,1124],{"class":160},[143,4731,937],{"class":164},[143,4733,4555],{"class":616},[143,4735,4558],{"class":156},[143,4737,4359],{"class":616},[143,4739,126],{"class":156},[143,4741,4364],{"class":599},[143,4743,4567],{"class":160},[143,4745,1144],{"class":156},[143,4747,4749,4752,4755,4757,4759,4761,4764,4766,4768,4770],{"class":145,"line":4748},45,[143,4750,4751],{"class":164}," const",[143,4753,4754],{"class":616}," duration",[143,4756,967],{"class":156},[143,4758,4555],{"class":616},[143,4760,126],{"class":156},[143,4762,4763],{"class":616},"processingEnd",[143,4765,4391],{"class":156},[143,4767,4555],{"class":616},[143,4769,126],{"class":156},[143,4771,4418],{"class":616},[143,4773,4775,4778,4780,4782,4785,4787,4790,4792,4795,4797,4800,4802,4804,4806,4808,4811,4813,4815],{"class":145,"line":4774},46,[143,4776,4777],{"class":156}," this.",[143,4779,4220],{"class":616},[143,4781,126],{"class":156},[143,4783,4784],{"class":616},"inp",[143,4786,967],{"class":156},[143,4788,4789],{"class":616}," Math",[143,4791,126],{"class":156},[143,4793,4794],{"class":599},"max",[143,4796,603],{"class":160},[143,4798,4799],{"class":156},"this.",[143,4801,4220],{"class":616},[143,4803,126],{"class":156},[143,4805,4784],{"class":616},[143,4807,3061],{"class":156},[143,4809,4810],{"class":606}," 0",[143,4812,610],{"class":156},[143,4814,4754],{"class":616},[143,4816,984],{"class":160},[143,4818,4820,4822,4824,4826,4828,4830,4832,4834,4836],{"class":145,"line":4819},47,[143,4821,4777],{"class":156},[143,4823,4425],{"class":599},[143,4825,603],{"class":160},[143,4827,171],{"class":156},[143,4829,4784],{"class":174},[143,4831,171],{"class":156},[143,4833,610],{"class":156},[143,4835,4754],{"class":616},[143,4837,984],{"class":160},[143,4839,4841],{"class":145,"line":4840},48,[143,4842,4616],{"class":156},[143,4844,4846,4848],{"class":145,"line":4845},49,[143,4847,2858],{"class":156},[143,4849,984],{"class":160},[143,4851,4853],{"class":145,"line":4852},50,[143,4854,198],{"emptyLinePlaceholder":197},[143,4856,4858,4860,4862,4864,4866,4868,4870,4872,4874,4876,4879,4881,4883,4885],{"class":145,"line":4857},51,[143,4859,4459],{"class":616},[143,4861,126],{"class":156},[143,4863,4464],{"class":599},[143,4865,603],{"class":160},[143,4867,1282],{"class":156},[143,4869,4471],{"class":160},[143,4871,596],{"class":156},[143,4873,3604],{"class":160},[143,4875,171],{"class":156},[143,4877,4878],{"class":174},"event",[143,4880,171],{"class":156},[143,4882,4485],{"class":160},[143,4884,1293],{"class":156},[143,4886,984],{"class":160},[143,4888,4890],{"class":145,"line":4889},52,[143,4891,675],{"class":156},[143,4893,4895],{"class":145,"line":4894},53,[143,4896,198],{"emptyLinePlaceholder":197},[143,4898,4900,4903,4905,4908,4910,4913,4915],{"class":145,"line":4899},54,[143,4901,4902],{"class":160}," sendMetric",[143,4904,603],{"class":156},[143,4906,4907],{"class":1311},"name",[143,4909,610],{"class":156},[143,4911,4912],{"class":1311}," value",[143,4914,1315],{"class":156},[143,4916,587],{"class":156},[143,4918,4920],{"class":145,"line":4919},55,[143,4921,4922],{"class":149}," // Send to analytics service\n",[143,4924,4926,4928,4930,4932,4935,4937,4940,4943,4945],{"class":145,"line":4925},56,[143,4927,1121],{"class":862},[143,4929,1124],{"class":160},[143,4931,171],{"class":156},[143,4933,4934],{"class":174},"sendBeacon",[143,4936,171],{"class":156},[143,4938,4939],{"class":156}," in",[143,4941,4942],{"class":616}," navigator",[143,4944,1141],{"class":160},[143,4946,1144],{"class":156},[143,4948,4950,4953,4955,4957],{"class":145,"line":4949},57,[143,4951,4952],{"class":616}," navigator",[143,4954,126],{"class":156},[143,4956,4934],{"class":599},[143,4958,1092],{"class":160},[143,4960,4962,4964,4967,4969],{"class":145,"line":4961},58,[143,4963,4135],{"class":156},[143,4965,4966],{"class":174},"/analytics",[143,4968,171],{"class":156},[143,4970,1105],{"class":156},[143,4972,4974,4977,4979,4982,4984],{"class":145,"line":4973},59,[143,4975,4976],{"class":616}," JSON",[143,4978,126],{"class":156},[143,4980,4981],{"class":599},"stringify",[143,4983,603],{"class":160},[143,4985,1144],{"class":156},[143,4987,4989,4992,4994,4997],{"class":145,"line":4988},60,[143,4990,4991],{"class":160}," metric",[143,4993,596],{"class":156},[143,4995,4996],{"class":616}," name",[143,4998,1105],{"class":156},[143,5000,5002,5005,5007,5009],{"class":145,"line":5001},61,[143,5003,5004],{"class":160}," value",[143,5006,596],{"class":156},[143,5008,4912],{"class":616},[143,5010,1105],{"class":156},[143,5012,5014,5017,5019,5022,5024,5027,5029],{"class":145,"line":5013},62,[143,5015,5016],{"class":160}," timestamp",[143,5018,596],{"class":156},[143,5020,5021],{"class":616}," Date",[143,5023,126],{"class":156},[143,5025,5026],{"class":599},"now",[143,5028,1622],{"class":160},[143,5030,1105],{"class":156},[143,5032,5034,5037,5039,5042,5044,5047,5049,5052],{"class":145,"line":5033},63,[143,5035,5036],{"class":160}," url",[143,5038,596],{"class":156},[143,5040,5041],{"class":616}," window",[143,5043,126],{"class":156},[143,5045,5046],{"class":616},"location",[143,5048,126],{"class":156},[143,5050,5051],{"class":616},"href",[143,5053,1105],{"class":156},[143,5055,5057,5060,5062],{"class":145,"line":5056},64,[143,5058,5059],{"class":156}," }",[143,5061,1315],{"class":160},[143,5063,1105],{"class":156},[143,5065,5067],{"class":145,"line":5066},65,[143,5068,5069],{"class":160}," )\n",[143,5071,5073],{"class":145,"line":5072},66,[143,5074,1191],{"class":156},[143,5076,5078],{"class":145,"line":5077},67,[143,5079,675],{"class":156},[143,5081,5083],{"class":145,"line":5082},68,[143,5084,997],{"class":156},[143,5086,5088],{"class":145,"line":5087},69,[143,5089,198],{"emptyLinePlaceholder":197},[143,5091,5093],{"class":145,"line":5092},70,[143,5094,5095],{"class":149},"// Initialize monitoring\n",[143,5097,5099,5102,5104],{"class":145,"line":5098},71,[143,5100,5101],{"class":156},"new",[143,5103,4201],{"class":599},[143,5105,1060],{"class":616},[115,5107,5109],{"id":5108},"_2-performance-budgets","2. Performance Budgets",[133,5111,5113],{"className":848,"code":5112,"language":850,"meta":138,"style":138},"// performance-budget.js\nconst performanceBudget = {\n // Size budgets\n maxBundleSize: 250000, // 250KB\n maxImageSize: 100000, // 100KB\n maxCSSSize: 50000, // 50KB\n\n // Timing budgets\n maxLCP: 2500, // 2.5s\n maxFID: 100, // 100ms\n maxCLS: 0.1, // 0.1\n\n // Resource budgets\n maxRequests: 50,\n maxDOMNodes: 1500,\n}\n\n// Budget enforcement in CI/CD\nfunction checkPerformanceBudget(metrics) {\n const violations = []\n\n Object.keys(performanceBudget).forEach((key) => {\n if (metrics[key] > performanceBudget[key]) {\n violations.push({\n metric: key,\n actual: metrics[key],\n budget: performanceBudget[key],\n overage: metrics[key] - performanceBudget[key],\n })\n }\n })\n\n if (violations.length > 0) {\n console.error(\"Performance budget violations:\", violations)\n process.exit(1)\n }\n}\n",[140,5114,5115,5120,5131,5136,5151,5166,5181,5185,5190,5205,5219,5234,5238,5243,5255,5267,5271,5275,5280,5295,5307,5311,5346,5375,5389,5401,5419,5436,5464,5471,5475,5481,5485,5507,5531,5548,5552],{"__ignoreMap":138},[143,5116,5117],{"class":145,"line":146},[143,5118,5119],{"class":149},"// performance-budget.js\n",[143,5121,5122,5124,5127,5129],{"class":145,"line":153},[143,5123,937],{"class":164},[143,5125,5126],{"class":616}," performanceBudget ",[143,5128,168],{"class":156},[143,5130,587],{"class":156},[143,5132,5133],{"class":145,"line":16},[143,5134,5135],{"class":149}," // Size budgets\n",[143,5137,5138,5141,5143,5146,5148],{"class":145,"line":201},[143,5139,5140],{"class":160}," maxBundleSize",[143,5142,596],{"class":156},[143,5144,5145],{"class":606}," 250000",[143,5147,610],{"class":156},[143,5149,5150],{"class":149}," // 250KB\n",[143,5152,5153,5156,5158,5161,5163],{"class":145,"line":207},[143,5154,5155],{"class":160}," maxImageSize",[143,5157,596],{"class":156},[143,5159,5160],{"class":606}," 100000",[143,5162,610],{"class":156},[143,5164,5165],{"class":149}," // 100KB\n",[143,5167,5168,5171,5173,5176,5178],{"class":145,"line":215},[143,5169,5170],{"class":160}," maxCSSSize",[143,5172,596],{"class":156},[143,5174,5175],{"class":606}," 50000",[143,5177,610],{"class":156},[143,5179,5180],{"class":149}," // 50KB\n",[143,5182,5183],{"class":145,"line":231},[143,5184,198],{"emptyLinePlaceholder":197},[143,5186,5187],{"class":145,"line":241},[143,5188,5189],{"class":149}," // Timing budgets\n",[143,5191,5192,5195,5197,5200,5202],{"class":145,"line":247},[143,5193,5194],{"class":160}," maxLCP",[143,5196,596],{"class":156},[143,5198,5199],{"class":606}," 2500",[143,5201,610],{"class":156},[143,5203,5204],{"class":149}," // 2.5s\n",[143,5206,5207,5210,5212,5214,5216],{"class":145,"line":253},[143,5208,5209],{"class":160}," maxFID",[143,5211,596],{"class":156},[143,5213,1995],{"class":606},[143,5215,610],{"class":156},[143,5217,5218],{"class":149}," // 100ms\n",[143,5220,5221,5224,5226,5229,5231],{"class":145,"line":259},[143,5222,5223],{"class":160}," maxCLS",[143,5225,596],{"class":156},[143,5227,5228],{"class":606}," 0.1",[143,5230,610],{"class":156},[143,5232,5233],{"class":149}," // 0.1\n",[143,5235,5236],{"class":145,"line":265},[143,5237,198],{"emptyLinePlaceholder":197},[143,5239,5240],{"class":145,"line":29},[143,5241,5242],{"class":149}," // Resource budgets\n",[143,5244,5245,5248,5250,5253],{"class":145,"line":293},[143,5246,5247],{"class":160}," maxRequests",[143,5249,596],{"class":156},[143,5251,5252],{"class":606}," 50",[143,5254,1105],{"class":156},[143,5256,5257,5260,5262,5265],{"class":145,"line":308},[143,5258,5259],{"class":160}," maxDOMNodes",[143,5261,596],{"class":156},[143,5263,5264],{"class":606}," 1500",[143,5266,1105],{"class":156},[143,5268,5269],{"class":145,"line":323},[143,5270,997],{"class":156},[143,5272,5273],{"class":145,"line":338},[143,5274,198],{"emptyLinePlaceholder":197},[143,5276,5277],{"class":145,"line":753},[143,5278,5279],{"class":149},"// Budget enforcement in CI/CD\n",[143,5281,5282,5284,5287,5289,5291,5293],{"class":145,"line":766},[143,5283,2105],{"class":164},[143,5285,5286],{"class":599}," checkPerformanceBudget",[143,5288,603],{"class":156},[143,5290,4220],{"class":1311},[143,5292,1315],{"class":156},[143,5294,587],{"class":156},[143,5296,5297,5299,5302,5304],{"class":145,"line":780},[143,5298,958],{"class":164},[143,5300,5301],{"class":616}," violations",[143,5303,967],{"class":156},[143,5305,5306],{"class":160}," []\n",[143,5308,5309],{"class":145,"line":793},[143,5310,198],{"emptyLinePlaceholder":197},[143,5312,5313,5316,5318,5321,5323,5326,5328,5330,5333,5335,5337,5340,5342,5344],{"class":145,"line":822},[143,5314,5315],{"class":616}," Object",[143,5317,126],{"class":156},[143,5319,5320],{"class":599},"keys",[143,5322,603],{"class":160},[143,5324,5325],{"class":616},"performanceBudget",[143,5327,1315],{"class":160},[143,5329,126],{"class":156},[143,5331,5332],{"class":599},"forEach",[143,5334,603],{"class":160},[143,5336,603],{"class":156},[143,5338,5339],{"class":1311},"key",[143,5341,1315],{"class":156},[143,5343,951],{"class":164},[143,5345,587],{"class":156},[143,5347,5348,5350,5352,5354,5356,5358,5360,5363,5366,5368,5370,5373],{"class":145,"line":1147},[143,5349,1121],{"class":862},[143,5351,1124],{"class":160},[143,5353,4220],{"class":616},[143,5355,4380],{"class":160},[143,5357,5339],{"class":616},[143,5359,4485],{"class":160},[143,5361,5362],{"class":156},">",[143,5364,5365],{"class":616}," performanceBudget",[143,5367,4380],{"class":160},[143,5369,5339],{"class":616},[143,5371,5372],{"class":160},"]) ",[143,5374,1144],{"class":156},[143,5376,5377,5380,5382,5385,5387],{"class":145,"line":1175},[143,5378,5379],{"class":616}," violations",[143,5381,126],{"class":156},[143,5383,5384],{"class":599},"push",[143,5386,603],{"class":160},[143,5388,1144],{"class":156},[143,5390,5391,5394,5396,5399],{"class":145,"line":1188},[143,5392,5393],{"class":160}," metric",[143,5395,596],{"class":156},[143,5397,5398],{"class":616}," key",[143,5400,1105],{"class":156},[143,5402,5403,5406,5408,5411,5413,5415,5417],{"class":145,"line":1194},[143,5404,5405],{"class":160}," actual",[143,5407,596],{"class":156},[143,5409,5410],{"class":616}," metrics",[143,5412,4380],{"class":160},[143,5414,5339],{"class":616},[143,5416,3626],{"class":160},[143,5418,1105],{"class":156},[143,5420,5421,5424,5426,5428,5430,5432,5434],{"class":145,"line":1200},[143,5422,5423],{"class":160}," budget",[143,5425,596],{"class":156},[143,5427,5365],{"class":616},[143,5429,4380],{"class":160},[143,5431,5339],{"class":616},[143,5433,3626],{"class":160},[143,5435,1105],{"class":156},[143,5437,5438,5441,5443,5445,5447,5449,5451,5454,5456,5458,5460,5462],{"class":145,"line":1218},[143,5439,5440],{"class":160}," overage",[143,5442,596],{"class":156},[143,5444,5410],{"class":616},[143,5446,4380],{"class":160},[143,5448,5339],{"class":616},[143,5450,4485],{"class":160},[143,5452,5453],{"class":156},"-",[143,5455,5365],{"class":616},[143,5457,4380],{"class":160},[143,5459,5339],{"class":616},[143,5461,3626],{"class":160},[143,5463,1105],{"class":156},[143,5465,5466,5469],{"class":145,"line":3011},[143,5467,5468],{"class":156}," }",[143,5470,984],{"class":160},[143,5472,5473],{"class":145,"line":3034},[143,5474,1191],{"class":156},[143,5476,5477,5479],{"class":145,"line":3041},[143,5478,1473],{"class":156},[143,5480,984],{"class":160},[143,5482,5483],{"class":145,"line":3048},[143,5484,198],{"emptyLinePlaceholder":197},[143,5486,5487,5490,5492,5495,5497,5499,5501,5503,5505],{"class":145,"line":3053},[143,5488,5489],{"class":862}," if",[143,5491,1124],{"class":160},[143,5493,5494],{"class":616},"violations",[143,5496,126],{"class":156},[143,5498,4388],{"class":616},[143,5500,1135],{"class":156},[143,5502,4810],{"class":606},[143,5504,1141],{"class":160},[143,5506,1144],{"class":156},[143,5508,5509,5512,5514,5516,5518,5520,5523,5525,5527,5529],{"class":145,"line":3067},[143,5510,5511],{"class":616}," console",[143,5513,126],{"class":156},[143,5515,2866],{"class":599},[143,5517,603],{"class":160},[143,5519,171],{"class":156},[143,5521,5522],{"class":174},"Performance budget violations:",[143,5524,171],{"class":156},[143,5526,610],{"class":156},[143,5528,5301],{"class":616},[143,5530,984],{"class":160},[143,5532,5533,5536,5538,5541,5543,5546],{"class":145,"line":3072},[143,5534,5535],{"class":616}," process",[143,5537,126],{"class":156},[143,5539,5540],{"class":599},"exit",[143,5542,603],{"class":160},[143,5544,5545],{"class":606},"1",[143,5547,984],{"class":160},[143,5549,5550],{"class":145,"line":4619},[143,5551,675],{"class":156},[143,5553,5554],{"class":145,"line":4636},[143,5555,997],{"class":156},[99,5557,5559],{"id":5558},"framework-specific-optimizations","Framework-Specific Optimizations",[115,5561,5563],{"id":5562},"react-performance-patterns","React Performance Patterns",[133,5565,5567],{"className":2091,"code":5566,"language":2093,"meta":138,"style":138},"// ✅ Optimized React component patterns\nimport { memo, useMemo, useCallback, lazy, Suspense } from \"react\"\n\n// Memoization for expensive calculations\nconst ExpensiveComponent = memo(({ data, filter }) => {\n const filteredData = useMemo(\n () => data.filter((item) => item.category === filter),\n [data, filter],\n )\n\n const handleClick = useCallback((id) => {\n // Handle click logic\n }, [])\n\n return (\n
\n {filteredData.map((item) => (\n \n ))}\n
\n )\n})\n\n// Lazy loading for route-based code splitting\nconst Dashboard = lazy(() => import(\"./Dashboard\"))\nconst Profile = lazy(() => import(\"./Profile\"))\n\nfunction App() {\n return (\n }>\n \n } />\n } />\n \n \n )\n}\n",[140,5568,5569,5574,5614,5618,5623,5653,5666,5707,5723,5727,5731,5755,5760,5768,5772,5778,5786,5810,5851,5858,5866,5870,5876,5880,5885,5915,5945,5949,5960,5966,5985,5994,6024,6050,6059,6067,6071],{"__ignoreMap":138},[143,5570,5571],{"class":145,"line":146},[143,5572,5573],{"class":149},"// ✅ Optimized React component patterns\n",[143,5575,5576,5578,5580,5583,5585,5588,5590,5593,5595,5598,5600,5603,5605,5607,5609,5612],{"class":145,"line":153},[143,5577,863],{"class":862},[143,5579,866],{"class":156},[143,5581,5582],{"class":616}," memo",[143,5584,610],{"class":156},[143,5586,5587],{"class":616}," useMemo",[143,5589,610],{"class":156},[143,5591,5592],{"class":616}," useCallback",[143,5594,610],{"class":156},[143,5596,5597],{"class":616}," lazy",[143,5599,610],{"class":156},[143,5601,5602],{"class":616}," Suspense",[143,5604,872],{"class":156},[143,5606,875],{"class":862},[143,5608,878],{"class":156},[143,5610,5611],{"class":174},"react",[143,5613,228],{"class":156},[143,5615,5616],{"class":145,"line":16},[143,5617,198],{"emptyLinePlaceholder":197},[143,5619,5620],{"class":145,"line":201},[143,5621,5622],{"class":149},"// Memoization for expensive calculations\n",[143,5624,5625,5627,5630,5632,5634,5636,5639,5641,5643,5646,5649,5651],{"class":145,"line":207},[143,5626,937],{"class":164},[143,5628,5629],{"class":616}," ExpensiveComponent ",[143,5631,168],{"class":156},[143,5633,5582],{"class":599},[143,5635,603],{"class":616},[143,5637,5638],{"class":156},"({",[143,5640,1285],{"class":1311},[143,5642,610],{"class":156},[143,5644,5645],{"class":1311}," filter",[143,5647,5648],{"class":156}," })",[143,5650,951],{"class":164},[143,5652,587],{"class":156},[143,5654,5655,5657,5660,5662,5664],{"class":145,"line":215},[143,5656,958],{"class":164},[143,5658,5659],{"class":616}," filteredData",[143,5661,967],{"class":156},[143,5663,5587],{"class":599},[143,5665,1092],{"class":160},[143,5667,5668,5671,5673,5675,5677,5680,5682,5684,5686,5688,5690,5693,5695,5698,5701,5703,5705],{"class":145,"line":231},[143,5669,5670],{"class":156}," ()",[143,5672,951],{"class":164},[143,5674,1285],{"class":616},[143,5676,126],{"class":156},[143,5678,5679],{"class":599},"filter",[143,5681,603],{"class":160},[143,5683,603],{"class":156},[143,5685,1433],{"class":1311},[143,5687,1315],{"class":156},[143,5689,951],{"class":164},[143,5691,5692],{"class":616}," item",[143,5694,126],{"class":156},[143,5696,5697],{"class":616},"category",[143,5699,5700],{"class":156}," ===",[143,5702,5645],{"class":616},[143,5704,1315],{"class":160},[143,5706,1105],{"class":156},[143,5708,5709,5712,5715,5717,5719,5721],{"class":145,"line":241},[143,5710,5711],{"class":160}," [",[143,5713,5714],{"class":616},"data",[143,5716,610],{"class":156},[143,5718,5645],{"class":616},[143,5720,3626],{"class":160},[143,5722,1105],{"class":156},[143,5724,5725],{"class":145,"line":247},[143,5726,2397],{"class":160},[143,5728,5729],{"class":145,"line":253},[143,5730,198],{"emptyLinePlaceholder":197},[143,5732,5733,5735,5738,5740,5742,5744,5746,5749,5751,5753],{"class":145,"line":259},[143,5734,958],{"class":164},[143,5736,5737],{"class":616}," handleClick",[143,5739,967],{"class":156},[143,5741,5592],{"class":599},[143,5743,603],{"class":160},[143,5745,603],{"class":156},[143,5747,5748],{"class":1311},"id",[143,5750,1315],{"class":156},[143,5752,951],{"class":164},[143,5754,587],{"class":156},[143,5756,5757],{"class":145,"line":265},[143,5758,5759],{"class":149}," // Handle click logic\n",[143,5761,5762,5765],{"class":145,"line":29},[143,5763,5764],{"class":156}," },",[143,5766,5767],{"class":160}," [])\n",[143,5769,5770],{"class":145,"line":293},[143,5771,198],{"emptyLinePlaceholder":197},[143,5773,5774,5776],{"class":145,"line":308},[143,5775,989],{"class":862},[143,5777,2119],{"class":160},[143,5779,5780,5782,5784],{"class":145,"line":323},[143,5781,2124],{"class":156},[143,5783,2127],{"class":160},[143,5785,570],{"class":156},[143,5787,5788,5791,5794,5796,5798,5800,5802,5804,5806,5808],{"class":145,"line":338},[143,5789,5790],{"class":156}," {",[143,5792,5793],{"class":616},"filteredData",[143,5795,126],{"class":156},[143,5797,1426],{"class":599},[143,5799,603],{"class":616},[143,5801,603],{"class":156},[143,5803,1433],{"class":1311},[143,5805,1315],{"class":156},[143,5807,951],{"class":164},[143,5809,2119],{"class":616},[143,5811,5812,5815,5818,5820,5823,5825,5827,5829,5832,5834,5836,5838,5840,5843,5845,5848],{"class":145,"line":753},[143,5813,5814],{"class":156}," <",[143,5816,5817],{"class":583},"ItemCard",[143,5819,5398],{"class":164},[143,5821,5822],{"class":156},"={",[143,5824,1433],{"class":616},[143,5826,126],{"class":156},[143,5828,5748],{"class":616},[143,5830,5831],{"class":156},"} ",[143,5833,1433],{"class":164},[143,5835,5822],{"class":156},[143,5837,1433],{"class":616},[143,5839,5831],{"class":156},[143,5841,5842],{"class":164},"onClick",[143,5844,5822],{"class":156},[143,5846,5847],{"class":616},"handleClick",[143,5849,5850],{"class":156},"} />\n",[143,5852,5853,5856],{"class":145,"line":766},[143,5854,5855],{"class":616}," ))",[143,5857,997],{"class":156},[143,5859,5860,5862,5864],{"class":145,"line":780},[143,5861,2388],{"class":156},[143,5863,2127],{"class":160},[143,5865,570],{"class":156},[143,5867,5868],{"class":145,"line":793},[143,5869,2397],{"class":160},[143,5871,5872,5874],{"class":145,"line":822},[143,5873,1293],{"class":156},[143,5875,984],{"class":616},[143,5877,5878],{"class":145,"line":1147},[143,5879,198],{"emptyLinePlaceholder":197},[143,5881,5882],{"class":145,"line":1175},[143,5883,5884],{"class":149},"// Lazy loading for route-based code splitting\n",[143,5886,5887,5889,5892,5894,5896,5898,5900,5902,5904,5906,5908,5911,5913],{"class":145,"line":1188},[143,5888,937],{"class":164},[143,5890,5891],{"class":616}," Dashboard ",[143,5893,168],{"class":156},[143,5895,5597],{"class":599},[143,5897,603],{"class":616},[143,5899,1622],{"class":156},[143,5901,951],{"class":164},[143,5903,973],{"class":156},[143,5905,603],{"class":616},[143,5907,171],{"class":156},[143,5909,5910],{"class":174},"./Dashboard",[143,5912,171],{"class":156},[143,5914,1476],{"class":616},[143,5916,5917,5919,5922,5924,5926,5928,5930,5932,5934,5936,5938,5941,5943],{"class":145,"line":1194},[143,5918,937],{"class":164},[143,5920,5921],{"class":616}," Profile ",[143,5923,168],{"class":156},[143,5925,5597],{"class":599},[143,5927,603],{"class":616},[143,5929,1622],{"class":156},[143,5931,951],{"class":164},[143,5933,973],{"class":156},[143,5935,603],{"class":616},[143,5937,171],{"class":156},[143,5939,5940],{"class":174},"./Profile",[143,5942,171],{"class":156},[143,5944,1476],{"class":616},[143,5946,5947],{"class":145,"line":1200},[143,5948,198],{"emptyLinePlaceholder":197},[143,5950,5951,5953,5956,5958],{"class":145,"line":1218},[143,5952,2105],{"class":164},[143,5954,5955],{"class":599}," App",[143,5957,1622],{"class":156},[143,5959,587],{"class":156},[143,5961,5962,5964],{"class":145,"line":3011},[143,5963,989],{"class":862},[143,5965,2119],{"class":160},[143,5967,5968,5970,5973,5976,5979,5982],{"class":145,"line":3034},[143,5969,2124],{"class":156},[143,5971,5972],{"class":583},"Suspense",[143,5974,5975],{"class":164}," fallback",[143,5977,5978],{"class":156},"={<",[143,5980,5981],{"class":583},"LoadingSpinner",[143,5983,5984],{"class":156}," />}>\n",[143,5986,5987,5989,5992],{"class":145,"line":3041},[143,5988,2146],{"class":156},[143,5990,5991],{"class":583},"Routes",[143,5993,570],{"class":156},[143,5995,5996,5998,6001,6004,6006,6008,6011,6013,6016,6018,6021],{"class":145,"line":3048},[143,5997,5814],{"class":156},[143,5999,6000],{"class":583},"Route",[143,6002,6003],{"class":164}," path",[143,6005,168],{"class":156},[143,6007,171],{"class":156},[143,6009,6010],{"class":174},"/dashboard",[143,6012,171],{"class":156},[143,6014,6015],{"class":164}," element",[143,6017,5978],{"class":156},[143,6019,6020],{"class":583},"Dashboard",[143,6022,6023],{"class":156}," />} />\n",[143,6025,6026,6028,6030,6032,6034,6036,6039,6041,6043,6045,6048],{"class":145,"line":3053},[143,6027,5814],{"class":156},[143,6029,6000],{"class":583},[143,6031,6003],{"class":164},[143,6033,168],{"class":156},[143,6035,171],{"class":156},[143,6037,6038],{"class":174},"/profile",[143,6040,171],{"class":156},[143,6042,6015],{"class":164},[143,6044,5978],{"class":156},[143,6046,6047],{"class":583},"Profile",[143,6049,6023],{"class":156},[143,6051,6052,6055,6057],{"class":145,"line":3067},[143,6053,6054],{"class":156}," \n \n
\n \n
\n \n
\n
\n\n\n\n","vue",[140,6085,6086,6095,6100,6132,6137,6157,6178,6186,6195,6203,6207,6218,6247,6251,6256,6269,6291,6295,6299,6304,6323,6341,6347],{"__ignoreMap":138},[143,6087,6088,6090,6093],{"class":145,"line":146},[143,6089,157],{"class":156},[143,6091,6092],{"class":160},"template",[143,6094,570],{"class":156},[143,6096,6097],{"class":145,"line":153},[143,6098,6099],{"class":149}," \n",[143,6101,6102,6104,6106,6109,6111,6113,6116,6118,6121,6123,6125,6128,6130],{"class":145,"line":16},[143,6103,3107],{"class":156},[143,6105,2127],{"class":160},[143,6107,6108],{"class":164}," v-show",[143,6110,168],{"class":156},[143,6112,171],{"class":156},[143,6114,6115],{"class":174},"isVisible",[143,6117,171],{"class":156},[143,6119,6120],{"class":164}," class",[143,6122,168],{"class":156},[143,6124,171],{"class":156},[143,6126,6127],{"class":174},"expensive-component",[143,6129,171],{"class":156},[143,6131,570],{"class":156},[143,6133,6134],{"class":145,"line":201},[143,6135,6136],{"class":149}," \n",[143,6138,6139,6141,6143,6146,6148,6150,6153,6155],{"class":145,"line":207},[143,6140,2124],{"class":156},[143,6142,2127],{"class":160},[143,6144,6145],{"class":164}," v-memo",[143,6147,168],{"class":156},[143,6149,171],{"class":156},[143,6151,6152],{"class":174},"[user.id, user.lastUpdated]",[143,6154,171],{"class":156},[143,6156,570],{"class":156},[143,6158,6159,6161,6164,6167,6169,6171,6174,6176],{"class":145,"line":215},[143,6160,2146],{"class":156},[143,6162,6163],{"class":160},"UserProfile",[143,6165,6166],{"class":164}," :user",[143,6168,168],{"class":156},[143,6170,171],{"class":156},[143,6172,6173],{"class":174},"user",[143,6175,171],{"class":156},[143,6177,192],{"class":156},[143,6179,6180,6182,6184],{"class":145,"line":231},[143,6181,2388],{"class":156},[143,6183,2127],{"class":160},[143,6185,570],{"class":156},[143,6187,6188,6191,6193],{"class":145,"line":241},[143,6189,6190],{"class":156}," {\n event.respondWith(handleRequest(event.request))\n})\n\nasync function handleRequest(request) {\n const url = new URL(request.url)\n\n // Edge-side includes for personalization\n if (url.pathname.startsWith(\"/api/personalized\")) {\n return await handlePersonalizedContent(request)\n }\n\n // Static asset optimization\n if (url.pathname.match(/\\.(jpg|jpeg|png|webp|avif)$/)) {\n return await optimizeImage(request)\n }\n\n return fetch(request)\n}\n",[140,6367,6368,6373,6398,6423,6429,6433,6450,6473,6477,6482,6514,6529,6533,6537,6542,6602,6617,6621,6625,6637],{"__ignoreMap":138},[143,6369,6370],{"class":145,"line":146},[143,6371,6372],{"class":149},"// Cloudflare Workers example for edge optimization\n",[143,6374,6375,6377,6379,6381,6384,6386,6388,6390,6392,6394,6396],{"class":145,"line":153},[143,6376,1089],{"class":599},[143,6378,603],{"class":616},[143,6380,171],{"class":156},[143,6382,6383],{"class":174},"fetch",[143,6385,171],{"class":156},[143,6387,610],{"class":156},[143,6389,1124],{"class":156},[143,6391,4878],{"class":1311},[143,6393,1315],{"class":156},[143,6395,951],{"class":164},[143,6397,587],{"class":156},[143,6399,6400,6403,6405,6408,6410,6413,6415,6417,6419,6421],{"class":145,"line":16},[143,6401,6402],{"class":616}," event",[143,6404,126],{"class":156},[143,6406,6407],{"class":599},"respondWith",[143,6409,603],{"class":160},[143,6411,6412],{"class":599},"handleRequest",[143,6414,603],{"class":160},[143,6416,4878],{"class":616},[143,6418,126],{"class":156},[143,6420,2722],{"class":616},[143,6422,1476],{"class":160},[143,6424,6425,6427],{"class":145,"line":201},[143,6426,1293],{"class":156},[143,6428,984],{"class":616},[143,6430,6431],{"class":145,"line":207},[143,6432,198],{"emptyLinePlaceholder":197},[143,6434,6435,6437,6439,6442,6444,6446,6448],{"class":145,"line":215},[143,6436,333],{"class":164},[143,6438,1375],{"class":164},[143,6440,6441],{"class":599}," handleRequest",[143,6443,603],{"class":156},[143,6445,2722],{"class":1311},[143,6447,1315],{"class":156},[143,6449,587],{"class":156},[143,6451,6452,6454,6456,6458,6460,6463,6465,6467,6469,6471],{"class":145,"line":231},[143,6453,958],{"class":164},[143,6455,1945],{"class":616},[143,6457,967],{"class":156},[143,6459,1249],{"class":156},[143,6461,6462],{"class":599}," URL",[143,6464,603],{"class":160},[143,6466,2722],{"class":616},[143,6468,126],{"class":156},[143,6470,3618],{"class":616},[143,6472,984],{"class":160},[143,6474,6475],{"class":145,"line":241},[143,6476,198],{"emptyLinePlaceholder":197},[143,6478,6479],{"class":145,"line":247},[143,6480,6481],{"class":149}," // Edge-side includes for personalization\n",[143,6483,6484,6486,6488,6490,6492,6495,6497,6500,6502,6504,6507,6509,6512],{"class":145,"line":253},[143,6485,5489],{"class":862},[143,6487,1124],{"class":160},[143,6489,3618],{"class":616},[143,6491,126],{"class":156},[143,6493,6494],{"class":616},"pathname",[143,6496,126],{"class":156},[143,6498,6499],{"class":599},"startsWith",[143,6501,603],{"class":160},[143,6503,171],{"class":156},[143,6505,6506],{"class":174},"/api/personalized",[143,6508,171],{"class":156},[143,6510,6511],{"class":160},")) ",[143,6513,1144],{"class":156},[143,6515,6516,6518,6520,6523,6525,6527],{"class":145,"line":259},[143,6517,3056],{"class":862},[143,6519,970],{"class":862},[143,6521,6522],{"class":599}," handlePersonalizedContent",[143,6524,603],{"class":160},[143,6526,2722],{"class":616},[143,6528,984],{"class":160},[143,6530,6531],{"class":145,"line":265},[143,6532,675],{"class":156},[143,6534,6535],{"class":145,"line":29},[143,6536,198],{"emptyLinePlaceholder":197},[143,6538,6539],{"class":145,"line":293},[143,6540,6541],{"class":149}," // Static asset optimization\n",[143,6543,6544,6546,6548,6550,6552,6554,6556,6558,6560,6562,6565,6567,6570,6573,6576,6578,6581,6583,6586,6588,6591,6593,6596,6598,6600],{"class":145,"line":308},[143,6545,5489],{"class":862},[143,6547,1124],{"class":160},[143,6549,3618],{"class":616},[143,6551,126],{"class":156},[143,6553,6494],{"class":616},[143,6555,126],{"class":156},[143,6557,2734],{"class":599},[143,6559,603],{"class":160},[143,6561,94],{"class":156},[143,6563,6564],{"class":616},"\\.",[143,6566,603],{"class":156},[143,6568,6569],{"class":174},"jpg",[143,6571,6572],{"class":156},"|",[143,6574,6575],{"class":174},"jpeg",[143,6577,6572],{"class":156},[143,6579,6580],{"class":174},"png",[143,6582,6572],{"class":156},[143,6584,6585],{"class":174},"webp",[143,6587,6572],{"class":156},[143,6589,6590],{"class":174},"avif",[143,6592,1315],{"class":156},[143,6594,6595],{"class":862},"$",[143,6597,94],{"class":156},[143,6599,6511],{"class":160},[143,6601,1144],{"class":156},[143,6603,6604,6606,6608,6611,6613,6615],{"class":145,"line":323},[143,6605,3056],{"class":862},[143,6607,970],{"class":862},[143,6609,6610],{"class":599}," optimizeImage",[143,6612,603],{"class":160},[143,6614,2722],{"class":616},[143,6616,984],{"class":160},[143,6618,6619],{"class":145,"line":338},[143,6620,675],{"class":156},[143,6622,6623],{"class":145,"line":753},[143,6624,198],{"emptyLinePlaceholder":197},[143,6626,6627,6629,6631,6633,6635],{"class":145,"line":766},[143,6628,989],{"class":862},[143,6630,2788],{"class":599},[143,6632,603],{"class":160},[143,6634,2722],{"class":616},[143,6636,984],{"class":160},[143,6638,6639],{"class":145,"line":780},[143,6640,997],{"class":156},[115,6642,6644],{"id":6643},"_2-ai-powered-performance-optimization","2. AI-Powered Performance Optimization",[133,6646,6648],{"className":848,"code":6647,"language":850,"meta":138,"style":138},"// Predictive prefetching based on user behavior\nclass PredictivePrefetcher {\n constructor() {\n this.userBehavior = []\n this.mlModel = null\n this.init()\n }\n\n async init() {\n // Load pre-trained model for predicting user navigation\n this.mlModel = await tf.loadLayersModel(\"/models/navigation-predictor.json\")\n this.observeUserBehavior()\n }\n\n observeUserBehavior() {\n // Track user interactions\n document.addEventListener(\"click\", (e) => {\n this.userBehavior.push({\n element: e.target.tagName,\n timestamp: Date.now(),\n position: { x: e.clientX, y: e.clientY },\n })\n })\n\n // Predict and prefetch likely next pages\n setInterval(() => {\n this.predictAndPrefetch()\n }, 5000)\n }\n\n async predictAndPrefetch() {\n if (this.userBehavior.length < 5) return\n\n const prediction = await this.mlModel.predict(\n this.preprocessBehaviorData(this.userBehavior),\n )\n\n const likelyPages = this.interpretPrediction(prediction)\n likelyPages.forEach((page) => this.prefetchPage(page))\n }\n}\n",[140,6649,6650,6655,6664,6672,6683,6694,6702,6706,6710,6721,6726,6755,6764,6768,6772,6781,6786,6816,6830,6851,6868,6905,6911,6917,6921,6926,6939,6948,6958,6962,6966,6977,7002,7006,7029,7046,7051,7055,7076,7107,7111],{"__ignoreMap":138},[143,6651,6652],{"class":145,"line":146},[143,6653,6654],{"class":149},"// Predictive prefetching based on user behavior\n",[143,6656,6657,6659,6662],{"class":145,"line":153},[143,6658,4198],{"class":164},[143,6660,6661],{"class":583}," PredictivePrefetcher",[143,6663,587],{"class":156},[143,6665,6666,6668,6670],{"class":145,"line":16},[143,6667,4208],{"class":164},[143,6669,1622],{"class":156},[143,6671,587],{"class":156},[143,6673,6674,6676,6679,6681],{"class":145,"line":201},[143,6675,4217],{"class":156},[143,6677,6678],{"class":616},"userBehavior",[143,6680,967],{"class":156},[143,6682,5306],{"class":160},[143,6684,6685,6687,6690,6692],{"class":145,"line":207},[143,6686,4217],{"class":156},[143,6688,6689],{"class":616},"mlModel",[143,6691,967],{"class":156},[143,6693,4237],{"class":156},[143,6695,6696,6698,6700],{"class":145,"line":215},[143,6697,4217],{"class":156},[143,6699,1057],{"class":599},[143,6701,1060],{"class":160},[143,6703,6704],{"class":145,"line":231},[143,6705,675],{"class":156},[143,6707,6708],{"class":145,"line":241},[143,6709,198],{"emptyLinePlaceholder":197},[143,6711,6712,6714,6717,6719],{"class":145,"line":247},[143,6713,1110],{"class":164},[143,6715,6716],{"class":160}," init",[143,6718,1622],{"class":156},[143,6720,587],{"class":156},[143,6722,6723],{"class":145,"line":253},[143,6724,6725],{"class":149}," // Load pre-trained model for predicting user navigation\n",[143,6727,6728,6730,6732,6734,6736,6739,6741,6744,6746,6748,6751,6753],{"class":145,"line":259},[143,6729,4217],{"class":156},[143,6731,6689],{"class":616},[143,6733,967],{"class":156},[143,6735,970],{"class":862},[143,6737,6738],{"class":616}," tf",[143,6740,126],{"class":156},[143,6742,6743],{"class":599},"loadLayersModel",[143,6745,603],{"class":160},[143,6747,171],{"class":156},[143,6749,6750],{"class":174},"/models/navigation-predictor.json",[143,6752,171],{"class":156},[143,6754,984],{"class":160},[143,6756,6757,6759,6762],{"class":145,"line":265},[143,6758,4217],{"class":156},[143,6760,6761],{"class":599},"observeUserBehavior",[143,6763,1060],{"class":160},[143,6765,6766],{"class":145,"line":29},[143,6767,675],{"class":156},[143,6769,6770],{"class":145,"line":293},[143,6771,198],{"emptyLinePlaceholder":197},[143,6773,6774,6777,6779],{"class":145,"line":308},[143,6775,6776],{"class":160}," observeUserBehavior",[143,6778,1622],{"class":156},[143,6780,587],{"class":156},[143,6782,6783],{"class":145,"line":323},[143,6784,6785],{"class":149}," // Track user interactions\n",[143,6787,6788,6791,6793,6795,6797,6799,6802,6804,6806,6808,6810,6812,6814],{"class":145,"line":338},[143,6789,6790],{"class":616}," document",[143,6792,126],{"class":156},[143,6794,1089],{"class":599},[143,6796,603],{"class":160},[143,6798,171],{"class":156},[143,6800,6801],{"class":174},"click",[143,6803,171],{"class":156},[143,6805,610],{"class":156},[143,6807,1124],{"class":156},[143,6809,1312],{"class":1311},[143,6811,1315],{"class":156},[143,6813,951],{"class":164},[143,6815,587],{"class":156},[143,6817,6818,6820,6822,6824,6826,6828],{"class":145,"line":753},[143,6819,4402],{"class":156},[143,6821,6678],{"class":616},[143,6823,126],{"class":156},[143,6825,5384],{"class":599},[143,6827,603],{"class":160},[143,6829,1144],{"class":156},[143,6831,6832,6835,6837,6839,6841,6844,6846,6849],{"class":145,"line":766},[143,6833,6834],{"class":160}," element",[143,6836,596],{"class":156},[143,6838,1331],{"class":616},[143,6840,126],{"class":156},[143,6842,6843],{"class":616},"target",[143,6845,126],{"class":156},[143,6847,6848],{"class":616},"tagName",[143,6850,1105],{"class":156},[143,6852,6853,6856,6858,6860,6862,6864,6866],{"class":145,"line":780},[143,6854,6855],{"class":160}," timestamp",[143,6857,596],{"class":156},[143,6859,5021],{"class":616},[143,6861,126],{"class":156},[143,6863,5026],{"class":599},[143,6865,1622],{"class":160},[143,6867,1105],{"class":156},[143,6869,6870,6873,6875,6877,6880,6882,6884,6886,6889,6891,6894,6896,6898,6900,6903],{"class":145,"line":793},[143,6871,6872],{"class":160}," position",[143,6874,596],{"class":156},[143,6876,866],{"class":156},[143,6878,6879],{"class":160}," x",[143,6881,596],{"class":156},[143,6883,1331],{"class":616},[143,6885,126],{"class":156},[143,6887,6888],{"class":616},"clientX",[143,6890,610],{"class":156},[143,6892,6893],{"class":160}," y",[143,6895,596],{"class":156},[143,6897,1331],{"class":616},[143,6899,126],{"class":156},[143,6901,6902],{"class":616},"clientY",[143,6904,1215],{"class":156},[143,6906,6907,6909],{"class":145,"line":822},[143,6908,5468],{"class":156},[143,6910,984],{"class":160},[143,6912,6913,6915],{"class":145,"line":1147},[143,6914,2858],{"class":156},[143,6916,984],{"class":160},[143,6918,6919],{"class":145,"line":1175},[143,6920,198],{"emptyLinePlaceholder":197},[143,6922,6923],{"class":145,"line":1188},[143,6924,6925],{"class":149}," // Predict and prefetch likely next pages\n",[143,6927,6928,6931,6933,6935,6937],{"class":145,"line":1194},[143,6929,6930],{"class":599}," setInterval",[143,6932,603],{"class":160},[143,6934,1622],{"class":156},[143,6936,951],{"class":164},[143,6938,587],{"class":156},[143,6940,6941,6943,6946],{"class":145,"line":1200},[143,6942,4402],{"class":156},[143,6944,6945],{"class":599},"predictAndPrefetch",[143,6947,1060],{"class":160},[143,6949,6950,6953,6956],{"class":145,"line":1218},[143,6951,6952],{"class":156}," },",[143,6954,6955],{"class":606}," 5000",[143,6957,984],{"class":160},[143,6959,6960],{"class":145,"line":3011},[143,6961,675],{"class":156},[143,6963,6964],{"class":145,"line":3034},[143,6965,198],{"emptyLinePlaceholder":197},[143,6967,6968,6970,6973,6975],{"class":145,"line":3041},[143,6969,1110],{"class":164},[143,6971,6972],{"class":160}," predictAndPrefetch",[143,6974,1622],{"class":156},[143,6976,587],{"class":156},[143,6978,6979,6981,6983,6985,6987,6989,6991,6994,6997,6999],{"class":145,"line":3048},[143,6980,1121],{"class":862},[143,6982,1124],{"class":160},[143,6984,4799],{"class":156},[143,6986,6678],{"class":616},[143,6988,126],{"class":156},[143,6990,4388],{"class":616},[143,6992,6993],{"class":156}," <",[143,6995,6996],{"class":606}," 5",[143,6998,1141],{"class":160},[143,7000,7001],{"class":862},"return\n",[143,7003,7004],{"class":145,"line":3053},[143,7005,198],{"emptyLinePlaceholder":197},[143,7007,7008,7010,7013,7015,7017,7020,7022,7024,7027],{"class":145,"line":3067},[143,7009,2927],{"class":164},[143,7011,7012],{"class":616}," prediction",[143,7014,967],{"class":156},[143,7016,970],{"class":862},[143,7018,7019],{"class":156}," this.",[143,7021,6689],{"class":616},[143,7023,126],{"class":156},[143,7025,7026],{"class":599},"predict",[143,7028,1092],{"class":160},[143,7030,7031,7033,7036,7038,7040,7042,7044],{"class":145,"line":3072},[143,7032,4402],{"class":156},[143,7034,7035],{"class":599},"preprocessBehaviorData",[143,7037,603],{"class":160},[143,7039,4799],{"class":156},[143,7041,6678],{"class":616},[143,7043,1315],{"class":160},[143,7045,1105],{"class":156},[143,7047,7048],{"class":145,"line":4619},[143,7049,7050],{"class":160}," )\n",[143,7052,7053],{"class":145,"line":4636},[143,7054,198],{"emptyLinePlaceholder":197},[143,7056,7057,7059,7062,7064,7066,7069,7071,7074],{"class":145,"line":4643},[143,7058,2927],{"class":164},[143,7060,7061],{"class":616}," likelyPages",[143,7063,967],{"class":156},[143,7065,7019],{"class":156},[143,7067,7068],{"class":599},"interpretPrediction",[143,7070,603],{"class":160},[143,7072,7073],{"class":616},"prediction",[143,7075,984],{"class":160},[143,7077,7078,7081,7083,7085,7087,7089,7092,7094,7096,7098,7101,7103,7105],{"class":145,"line":4648},[143,7079,7080],{"class":616}," likelyPages",[143,7082,126],{"class":156},[143,7084,5332],{"class":599},[143,7086,603],{"class":160},[143,7088,603],{"class":156},[143,7090,7091],{"class":1311},"page",[143,7093,1315],{"class":156},[143,7095,951],{"class":164},[143,7097,7019],{"class":156},[143,7099,7100],{"class":599},"prefetchPage",[143,7102,603],{"class":160},[143,7104,7091],{"class":616},[143,7106,1476],{"class":160},[143,7108,7109],{"class":145,"line":4680},[143,7110,675],{"class":156},[143,7112,7113],{"class":145,"line":4685},[143,7114,997],{"class":156},[99,7116,7118],{"id":7117},"conclusion-building-for-performance-in-2024","Conclusion: Building for Performance in 2024",[104,7120,7121],{},"Web performance optimization in 2024 requires a holistic approach that combines:",[347,7123,7124,7130,7136,7142,7148],{},[350,7125,7126,7129],{},[123,7127,7128],{},"Core Web Vitals mastery"," - Understanding and optimizing LCP, INP, and CLS",[350,7131,7132,7135],{},[123,7133,7134],{},"Modern loading strategies"," - Priority hints, resource hints, and smart bundling",[350,7137,7138,7141],{},[123,7139,7140],{},"Advanced caching"," - Service workers, edge computing, and intelligent prefetching",[350,7143,7144,7147],{},[123,7145,7146],{},"Continuous monitoring"," - Real user monitoring and performance budgets",[350,7149,7150,7153],{},[123,7151,7152],{},"Framework optimization"," - Leveraging framework-specific performance features",[104,7155,7156],{},"The key to success is measuring everything, optimizing iteratively, and staying current with evolving web standards. Performance isn't a one-time task – it's an ongoing commitment to delivering exceptional user experiences.",[104,7158,7159],{},"Remember: a 1-second improvement in load time can increase conversions by up to 7%. In 2024, performance isn't just about user experience – it's about business success.",[104,7161,7162],{},"What performance challenges are you facing in your projects? Have you implemented any of these techniques? I'd love to hear about your experiences and help solve any performance bottlenecks you're encountering.",[567,7164,7165],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sqsOY, html code.shiki .sqsOY{--shiki-light:#8796B0;--shiki-default:#B2CCD6;--shiki-dark:#B2CCD6}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":138,"searchDepth":153,"depth":153,"links":7167},[7168,7169,7174,7180,7184,7188,7192],{"id":101,"depth":153,"text":102},{"id":109,"depth":153,"text":110,"children":7170},[7171,7172,7173],{"id":117,"depth":16,"text":118},{"id":827,"depth":16,"text":828},{"id":1726,"depth":16,"text":1727},{"id":2404,"depth":153,"text":2405,"children":7175},[7176,7177,7178,7179],{"id":2408,"depth":16,"text":2409},{"id":3077,"depth":16,"text":3078},{"id":3434,"depth":16,"text":3435},{"id":3758,"depth":16,"text":3759},{"id":4178,"depth":153,"text":4179,"children":7181},[7182,7183],{"id":4182,"depth":16,"text":4183},{"id":5108,"depth":16,"text":5109},{"id":5558,"depth":153,"text":5559,"children":7185},[7186,7187],{"id":5562,"depth":16,"text":5563},{"id":6077,"depth":16,"text":6078},{"id":6357,"depth":153,"text":6358,"children":7189},[7190,7191],{"id":6361,"depth":16,"text":6362},{"id":6643,"depth":16,"text":6644},{"id":7117,"depth":153,"text":7118},"2024-01-20","Master modern web performance optimization techniques, Core Web Vitals improvements, and advanced strategies for lightning-fast websites in 2024.",null,"md",false,"Ultimate Web Performance Guide 2024",{"readingTime":7200},"20 min read","/blog/9-web-performance-optimization-2024",{"title":91,"description":7194},{"src":7204,"mime":7205,"alt":7206,"width":7207,"height":7208},"/img/blog/9-web-performance-optimization-2024/banner.svg","svg","Web performance optimization metrics dashboard",1200,630,"blog/9-web-performance-optimization-2024",[7211,7212,7213],"Performance","Web Vitals","Optimization","ERWHzaMzWSb3psge0Mr7e0FlI0h1Tgs4nSDZYFw3R_I",[7216,8435,10107],{"id":7217,"title":7218,"abstract":7195,"author":7219,"authorUrl":7195,"body":7220,"date":8418,"dateUpdated":8418,"description":8419,"excerpt":7195,"extension":7196,"featured":197,"headline":7195,"image":7195,"meta":8420,"navigation":197,"ogImage":7195,"path":8422,"seo":8423,"series":8424,"seriesDescription":8425,"seriesOrder":146,"socialImage":8426,"stem":8429,"tags":8430,"__hash__":8434},"blog/blog/21-react-compiler-manual-memoization-end.md","React Compiler and the End of Manual Memoization","mubaidr",{"type":96,"value":7221,"toc":8376},[7222,7225,7240,7243,7247,7250,7271,7274,7278,7281,7285,7295,7299,7307,7311,7314,7318,7321,7325,7328,7342,7656,7659,7663,7666,7724,7728,7731,7815,7819,7822,7826,7829,7833,7836,7840,7843,7847,7850,7876,7880,7883,7887,7913,7917,7949,7953,7979,7983,7986,7990,7993,8202,8206,8209,8287,8291,8294,8298,8301,8305,8309,8318,8322,8325,8329,8332,8336,8339,8343,8346,8350,8353,8357,8360,8364,8367,8370,8373],[99,7223,7218],{"id":7224},"react-compiler-and-the-end-of-manual-memoization",[104,7226,7227,7228,7231,7232,7235,7236,7239],{},"The React development landscape changed forever with the stable release of the React Compiler in late 2025. Now in 2026, manually writing ",[140,7229,7230],{},"useMemo",", ",[140,7233,7234],{},"useCallback",", and ",[140,7237,7238],{},"React.memo"," has become legacy practice—like manually managing memory in languages with garbage collection. After migrating several large React and Next.js applications to use the React Compiler, I've witnessed dramatic improvements in both performance and code quality.",[104,7241,7242],{},"In this comprehensive guide, we'll explore how the React Compiler works, understand why manual memoization is now obsolete, and learn the new best practices for writing high-performance React applications in 2026. Whether you're building with React, Next.js, or React-based frameworks, understanding these changes is essential for modern development.",[99,7244,7246],{"id":7245},"the-problem-with-manual-memoization","The Problem with Manual Memoization",[104,7248,7249],{},"For years, React developers have been burdened with manual performance optimization. Every component required careful consideration of:",[7251,7252,7253,7258,7263,7268],"ul",{},[350,7254,7255,7256],{},"When to wrap functions in ",[140,7257,7234],{},[350,7259,7260,7261],{},"Which values to memoize with ",[140,7262,7230],{},[350,7264,7265,7266],{},"Which components should use ",[140,7267,7238],{},[350,7269,7270],{},"What dependencies to include in dependency arrays",[104,7272,7273],{},"This cognitive overhead led to several common problems:",[115,7275,7277],{"id":7276},"premature-optimization","Premature Optimization",[104,7279,7280],{},"Developers often added memoization everywhere \"just in case,\" resulting in code that was harder to read and maintain without meaningful performance benefits. This premature optimization wasted development time and added unnecessary complexity.",[115,7282,7284],{"id":7283},"missing-dependencies","Missing Dependencies",[104,7286,7287,7288,7291,7292,7294],{},"Incorrect dependency arrays in ",[140,7289,7290],{},"useEffect"," and ",[140,7293,7234],{}," caused subtle bugs where stale closures captured outdated values. These bugs were notoriously difficult to track down and fix.",[115,7296,7298],{"id":7297},"over-memoization","Over-Memoization",[104,7300,7301,7302,7291,7304,7306],{},"Excessive use of ",[140,7303,7230],{},[140,7305,7234],{}," created memory overhead and made code harder to understand. The performance cost of memoization itself sometimes outweighed the benefits.",[115,7308,7310],{"id":7309},"inconsistent-patterns","Inconsistent Patterns",[104,7312,7313],{},"Different team members had different opinions on when to memoize, leading to inconsistent codebases where some components were heavily optimized while others weren't optimized at all.",[99,7315,7317],{"id":7316},"how-the-react-compiler-works","How the React Compiler Works",[104,7319,7320],{},"The React Compiler uses sophisticated static analysis to automatically determine which components and values need memoization. It analyzes your code at build time and inserts optimal memoization automatically.",[115,7322,7324],{"id":7323},"automatic-memoization","Automatic Memoization",[104,7326,7327],{},"The compiler identifies:",[7251,7329,7330,7333,7336,7339],{},[350,7331,7332],{},"Components that should be memoized",[350,7334,7335],{},"Functions that should be wrapped in callbacks",[350,7337,7338],{},"Values that should be cached",[350,7340,7341],{},"Optimal dependency arrays based on actual usage",[133,7343,7347],{"className":7344,"code":7345,"language":7346,"meta":138,"style":138},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// Before React Compiler (manual memoization)\nfunction UserProfile({ userId }) {\n const fetchUser = useCallback(async () => {\n const response = await fetch(`/api/users/${userId}`)\n return response.json()\n }, [userId])\n\n const user = useMemo(() => {\n return transformUserData(rawUser)\n }, [rawUser])\n\n return
{user.name}
\n}\n\n// After React Compiler (automatic memoization)\nfunction UserProfile({ userId }) {\n const fetchUser = async () => {\n const response = await fetch(`/api/users/${userId}`)\n return response.json()\n }\n\n const user = transformUserData(rawUser)\n\n return
{user.name}
\n}\n","typescript",[140,7348,7349,7354,7370,7391,7422,7435,7446,7450,7469,7483,7493,7497,7521,7525,7529,7534,7548,7564,7590,7602,7606,7610,7626,7630,7652],{"__ignoreMap":138},[143,7350,7351],{"class":145,"line":146},[143,7352,7353],{"class":149},"// Before React Compiler (manual memoization)\n",[143,7355,7356,7358,7361,7363,7366,7368],{"class":145,"line":153},[143,7357,2105],{"class":164},[143,7359,7360],{"class":599}," UserProfile",[143,7362,5638],{"class":156},[143,7364,7365],{"class":1311}," userId",[143,7367,5648],{"class":156},[143,7369,587],{"class":156},[143,7371,7372,7374,7377,7379,7381,7383,7385,7387,7389],{"class":145,"line":16},[143,7373,958],{"class":164},[143,7375,7376],{"class":616}," fetchUser",[143,7378,967],{"class":156},[143,7380,5592],{"class":599},[143,7382,603],{"class":160},[143,7384,333],{"class":164},[143,7386,948],{"class":156},[143,7388,951],{"class":164},[143,7390,587],{"class":156},[143,7392,7393,7395,7397,7399,7401,7403,7405,7408,7411,7414,7417,7420],{"class":145,"line":201},[143,7394,2927],{"class":164},[143,7396,2781],{"class":616},[143,7398,967],{"class":156},[143,7400,970],{"class":862},[143,7402,2788],{"class":599},[143,7404,603],{"class":160},[143,7406,7407],{"class":156},"`",[143,7409,7410],{"class":174},"/api/users/",[143,7412,7413],{"class":156},"${",[143,7415,7416],{"class":616},"userId",[143,7418,7419],{"class":156},"}`",[143,7421,984],{"class":160},[143,7423,7424,7426,7428,7430,7433],{"class":145,"line":207},[143,7425,3056],{"class":862},[143,7427,2781],{"class":616},[143,7429,126],{"class":156},[143,7431,7432],{"class":599},"json",[143,7434,1060],{"class":160},[143,7436,7437,7439,7441,7443],{"class":145,"line":215},[143,7438,5764],{"class":156},[143,7440,3604],{"class":160},[143,7442,7416],{"class":616},[143,7444,7445],{"class":160},"])\n",[143,7447,7448],{"class":145,"line":231},[143,7449,198],{"emptyLinePlaceholder":197},[143,7451,7452,7454,7457,7459,7461,7463,7465,7467],{"class":145,"line":241},[143,7453,958],{"class":164},[143,7455,7456],{"class":616}," user",[143,7458,967],{"class":156},[143,7460,5587],{"class":599},[143,7462,603],{"class":160},[143,7464,1622],{"class":156},[143,7466,951],{"class":164},[143,7468,587],{"class":156},[143,7470,7471,7473,7476,7478,7481],{"class":145,"line":247},[143,7472,3056],{"class":862},[143,7474,7475],{"class":599}," transformUserData",[143,7477,603],{"class":160},[143,7479,7480],{"class":616},"rawUser",[143,7482,984],{"class":160},[143,7484,7485,7487,7489,7491],{"class":145,"line":253},[143,7486,5764],{"class":156},[143,7488,3604],{"class":160},[143,7490,7480],{"class":616},[143,7492,7445],{"class":160},[143,7494,7495],{"class":145,"line":259},[143,7496,198],{"emptyLinePlaceholder":197},[143,7498,7499,7501,7503,7505,7507,7509,7512,7514,7517,7519],{"class":145,"line":265},[143,7500,989],{"class":862},[143,7502,6993],{"class":160},[143,7504,2127],{"class":583},[143,7506,5362],{"class":160},[143,7508,1282],{"class":156},[143,7510,7511],{"class":160},"user.",[143,7513,4907],{"class":616},[143,7515,7516],{"class":156},"} {\n onAddToCart(product)\n trackEvent('add_to_cart', { productId: product.id })\n }\n\n return (\n
\n {products.map(product => (\n \n ))}\n
\n )\n}\n",[140,7997,7998,8003,8024,8044,8055,8090,8094,8098,8104,8112,8131,8138,8152,8163,8175,8180,8186,8194,8198],{"__ignoreMap":138},[143,7999,8000],{"class":145,"line":146},[143,8001,8002],{"class":149},"// Good: Clear, readable code\n",[143,8004,8005,8007,8010,8012,8015,8017,8020,8022],{"class":145,"line":153},[143,8006,2105],{"class":164},[143,8008,8009],{"class":599}," ProductList",[143,8011,5638],{"class":156},[143,8013,8014],{"class":1311}," products",[143,8016,610],{"class":156},[143,8018,8019],{"class":1311}," onAddToCart",[143,8021,5648],{"class":156},[143,8023,587],{"class":156},[143,8025,8026,8028,8031,8033,8035,8038,8040,8042],{"class":145,"line":16},[143,8027,958],{"class":164},[143,8029,8030],{"class":616}," handleAddToCart",[143,8032,967],{"class":156},[143,8034,1124],{"class":156},[143,8036,8037],{"class":1311},"product",[143,8039,1315],{"class":156},[143,8041,951],{"class":164},[143,8043,587],{"class":156},[143,8045,8046,8049,8051,8053],{"class":145,"line":201},[143,8047,8048],{"class":599}," onAddToCart",[143,8050,603],{"class":160},[143,8052,8037],{"class":616},[143,8054,984],{"class":160},[143,8056,8057,8060,8062,8065,8068,8070,8072,8074,8077,8079,8082,8084,8086,8088],{"class":145,"line":207},[143,8058,8059],{"class":599}," trackEvent",[143,8061,603],{"class":160},[143,8063,8064],{"class":156},"'",[143,8066,8067],{"class":174},"add_to_cart",[143,8069,8064],{"class":156},[143,8071,610],{"class":156},[143,8073,866],{"class":156},[143,8075,8076],{"class":160}," productId",[143,8078,596],{"class":156},[143,8080,8081],{"class":616}," product",[143,8083,126],{"class":156},[143,8085,5748],{"class":616},[143,8087,872],{"class":156},[143,8089,984],{"class":160},[143,8091,8092],{"class":145,"line":215},[143,8093,675],{"class":156},[143,8095,8096],{"class":145,"line":231},[143,8097,198],{"emptyLinePlaceholder":197},[143,8099,8100,8102],{"class":145,"line":241},[143,8101,989],{"class":862},[143,8103,2119],{"class":160},[143,8105,8106,8108,8110],{"class":145,"line":247},[143,8107,2124],{"class":160},[143,8109,2127],{"class":583},[143,8111,570],{"class":160},[143,8113,8114,8116,8119,8121,8123,8125,8127,8129],{"class":145,"line":253},[143,8115,5790],{"class":156},[143,8117,8118],{"class":1311},"products",[143,8120,126],{"class":160},[143,8122,1426],{"class":1311},[143,8124,603],{"class":160},[143,8126,8037],{"class":1311},[143,8128,951],{"class":156},[143,8130,2119],{"class":160},[143,8132,8133,8135],{"class":145,"line":259},[143,8134,5814],{"class":156},[143,8136,8137],{"class":1311},"ProductCard\n",[143,8139,8140,8143,8145,8148,8150],{"class":145,"line":265},[143,8141,8142],{"class":616}," key",[143,8144,5822],{"class":156},[143,8146,8147],{"class":160},"product.",[143,8149,5748],{"class":616},[143,8151,997],{"class":156},[143,8153,8154,8157,8159,8161],{"class":145,"line":29},[143,8155,8156],{"class":616}," product",[143,8158,5822],{"class":156},[143,8160,8037],{"class":616},[143,8162,997],{"class":156},[143,8164,8165,8168,8170,8173],{"class":145,"line":293},[143,8166,8167],{"class":616}," onAddToCart",[143,8169,5822],{"class":156},[143,8171,8172],{"class":616},"handleAddToCart",[143,8174,997],{"class":156},[143,8176,8177],{"class":145,"line":308},[143,8178,8179],{"class":156}," />\n",[143,8181,8182,8184],{"class":145,"line":323},[143,8183,5855],{"class":160},[143,8185,997],{"class":156},[143,8187,8188,8190,8192],{"class":145,"line":338},[143,8189,2388],{"class":156},[143,8191,2127],{"class":616},[143,8193,570],{"class":156},[143,8195,8196],{"class":145,"line":753},[143,8197,2397],{"class":160},[143,8199,8200],{"class":145,"line":766},[143,8201,997],{"class":156},[115,8203,8205],{"id":8204},"use-stable-identity-when-needed","Use Stable Identity When Needed",[104,8207,8208],{},"While the compiler handles most cases, some scenarios still benefit from stable identity:",[133,8210,8212],{"className":7344,"code":8211,"language":7346,"meta":138,"style":138},"// Use refs for values that change but shouldn't trigger re-renders\nconst renderCount = useRef(0)\nrenderCount.current++\n\n// Use state for values that should trigger re-renders\nconst [count, setCount] = useState(0)\n",[140,8213,8214,8219,8238,8251,8255,8260],{"__ignoreMap":138},[143,8215,8216],{"class":145,"line":146},[143,8217,8218],{"class":149},"// Use refs for values that change but shouldn't trigger re-renders\n",[143,8220,8221,8223,8226,8228,8231,8233,8236],{"class":145,"line":153},[143,8222,937],{"class":164},[143,8224,8225],{"class":616}," renderCount ",[143,8227,168],{"class":156},[143,8229,8230],{"class":599}," useRef",[143,8232,603],{"class":616},[143,8234,8235],{"class":606},"0",[143,8237,984],{"class":616},[143,8239,8240,8243,8245,8248],{"class":145,"line":16},[143,8241,8242],{"class":616},"renderCount",[143,8244,126],{"class":156},[143,8246,8247],{"class":616},"current",[143,8249,8250],{"class":156},"++\n",[143,8252,8253],{"class":145,"line":201},[143,8254,198],{"emptyLinePlaceholder":197},[143,8256,8257],{"class":145,"line":207},[143,8258,8259],{"class":149},"// Use state for values that should trigger re-renders\n",[143,8261,8262,8264,8266,8269,8271,8274,8276,8278,8281,8283,8285],{"class":145,"line":215},[143,8263,937],{"class":164},[143,8265,3604],{"class":156},[143,8267,8268],{"class":616},"count",[143,8270,610],{"class":156},[143,8272,8273],{"class":616}," setCount",[143,8275,3626],{"class":156},[143,8277,967],{"class":156},[143,8279,8280],{"class":599}," useState",[143,8282,603],{"class":616},[143,8284,8235],{"class":606},[143,8286,984],{"class":616},[115,8288,8290],{"id":8289},"profile-before-optimizing","Profile Before Optimizing",[104,8292,8293],{},"Use React DevTools Profiler to identify actual performance bottlenecks. Only add manual optimization if the compiler's automatic optimization isn't sufficient.",[115,8295,8297],{"id":8296},"keep-components-pure","Keep Components Pure",[104,8299,8300],{},"The compiler works best with pure components that follow React's rules. Avoid side effects in render functions and keep components predictable.",[99,8302,8304],{"id":8303},"common-pitfalls-and-solutions","Common Pitfalls and Solutions",[115,8306,8308],{"id":8307},"overriding-compiler-optimization","Overriding Compiler Optimization",[104,8310,8311,8312,8314,8315,8317],{},"Don't manually add ",[140,8313,7230],{}," or ",[140,8316,7234],{}," unless profiling shows a specific need. Manual memoization can interfere with the compiler's optimization strategy.",[115,8319,8321],{"id":8320},"misunderstanding-compiler-limitations","Misunderstanding Compiler Limitations",[104,8323,8324],{},"The compiler can't optimize everything. Dynamic patterns, certain higher-order components, and complex closures may still require manual attention.",[115,8326,8328],{"id":8327},"skipping-testing","Skipping Testing",[104,8330,8331],{},"Always test thoroughly after enabling the compiler. While it's generally safe, edge cases can occur in complex applications.",[99,8333,8335],{"id":8334},"the-future-of-react-performance","The Future of React Performance",[104,8337,8338],{},"The React Compiler represents a fundamental shift in how we think about React performance:",[115,8340,8342],{"id":8341},"declarative-performance","Declarative Performance",[104,8344,8345],{},"Just as React made UI development declarative, the compiler makes performance optimization declarative. You describe what you want, and the compiler figures out how to make it fast.",[115,8347,8349],{"id":8348},"focus-on-user-experience","Focus on User Experience",[104,8351,8352],{},"With optimization automated, developers can focus on what truly matters: building great user experiences rather than micro-optimizing component rendering.",[115,8354,8356],{"id":8355},"evolution-of-best-practices","Evolution of Best Practices",[104,8358,8359],{},"React best practices will continue to evolve. The patterns that were essential in 2024 are now legacy. Stay current with React's evolving recommendations.",[99,8361,8363],{"id":8362},"conclusion","Conclusion",[104,8365,8366],{},"The React Compiler marks the end of an era for manual memoization in React. By automating optimization, it frees developers to focus on building great user experiences while delivering better performance than manual optimization ever could.",[104,8368,8369],{},"If you haven't adopted the React Compiler yet, now is the time to start. The migration path is well-documented, the performance benefits are real, and the developer experience improvements are transformative. Manual memoization served us well, but it's time to embrace the future of automatic optimization.",[104,8371,8372],{},"The React of 2026 is faster, simpler, and more developer-friendly than ever before. The compiler handles the complexity, so you can focus on what you do best: building amazing applications.",[567,8374,8375],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":138,"searchDepth":153,"depth":153,"links":8377},[8378,8379,8385,8390,8396,8401,8407,8412,8417],{"id":7224,"depth":153,"text":7218},{"id":7245,"depth":153,"text":7246,"children":8380},[8381,8382,8383,8384],{"id":7276,"depth":16,"text":7277},{"id":7283,"depth":16,"text":7284},{"id":7297,"depth":16,"text":7298},{"id":7309,"depth":16,"text":7310},{"id":7316,"depth":153,"text":7317,"children":8386},[8387,8388,8389],{"id":7323,"depth":16,"text":7324},{"id":7661,"depth":16,"text":7662},{"id":7726,"depth":16,"text":7727},{"id":7817,"depth":153,"text":7818,"children":8391},[8392,8393,8394,8395],{"id":7824,"depth":16,"text":7825},{"id":7831,"depth":16,"text":7832},{"id":7838,"depth":16,"text":7839},{"id":7845,"depth":16,"text":7846},{"id":7878,"depth":153,"text":7879,"children":8397},[8398,8399,8400],{"id":7885,"depth":16,"text":7886},{"id":7915,"depth":16,"text":7916},{"id":7951,"depth":16,"text":7952},{"id":7981,"depth":153,"text":7982,"children":8402},[8403,8404,8405,8406],{"id":7988,"depth":16,"text":7989},{"id":8204,"depth":16,"text":8205},{"id":8289,"depth":16,"text":8290},{"id":8296,"depth":16,"text":8297},{"id":8303,"depth":153,"text":8304,"children":8408},[8409,8410,8411],{"id":8307,"depth":16,"text":8308},{"id":8320,"depth":16,"text":8321},{"id":8327,"depth":16,"text":8328},{"id":8334,"depth":153,"text":8335,"children":8413},[8414,8415,8416],{"id":8341,"depth":16,"text":8342},{"id":8348,"depth":16,"text":8349},{"id":8355,"depth":16,"text":8356},{"id":8362,"depth":153,"text":8363},"2026-03-13","Explore how the React Compiler is revolutionizing React development in 2026 by automating memoization, eliminating performance pitfalls, and changing best practices forever.",{"readingTime":8421},"10 min read","/blog/21-react-compiler-manual-memoization-end",{"title":7218,"description":8419},"React Deep Dive","Advanced React patterns, performance optimization, and modern best practices",{"src":8427,"mime":7205,"alt":8428,"width":7207,"height":7208},"/img/blog/21-react-compiler-manual-memoization-end/banner.svg","React Compiler End of Manual Memoization - React logo with automatic gear symbols and optimization icons on purple-blue gradient background","blog/21-react-compiler-manual-memoization-end",[8431,7211,8432,8433,7213],"React","Compiler","JavaScript","l4pX4wwK4ELNfvdV9QbWaqEmkPGJHGya3IJkdEH-iXM",{"id":8436,"title":8437,"abstract":7195,"author":7219,"authorUrl":7195,"body":8438,"date":10090,"dateUpdated":10090,"description":10091,"excerpt":7195,"extension":7196,"featured":197,"headline":7195,"image":7195,"meta":10092,"navigation":197,"ogImage":7195,"path":10094,"seo":10095,"series":10096,"seriesDescription":10097,"seriesOrder":146,"socialImage":10098,"stem":10101,"tags":10102,"__hash__":10106},"blog/blog/20-core-web-vitals-2026-optimization.md","Core Web Vitals 2026: Performance Optimization Strategies",{"type":96,"value":8439,"toc":10066},[8440,8443,8446,8449,8453,8456,8460,8463,8468,8479,8484,8514,8643,8647,8650,8655,8669,8673,8699,8792,8796,8799,8804,8818,8822,8847,8973,8977,8981,8984,9153,9157,9160,9186,9370,9374,9377,9484,9488,9492,9495,9681,9685,9688,9931,9935,9938,9942,9956,9960,9992,9996,10013,10017,10020,10052,10054,10057,10060,10063],[99,8441,8437],{"id":8442},"core-web-vitals-2026-performance-optimization-strategies",[104,8444,8445],{},"Web performance has always been critical, but in 2026, it's more important than ever. Google's Core Web Vitals have evolved into comprehensive metrics that directly impact search rankings, user experience, and conversion rates. After optimizing dozens of websites for peak performance, I've developed a systematic approach to achieving perfect Core Web Vitals scores.",[104,8447,8448],{},"In this comprehensive guide, we'll explore the latest Core Web Vitals metrics, understand how they're measured, and implement proven optimization strategies that deliver real-world results. Whether you're building a Nuxt application, a React site, or any modern web application, these techniques will help you deliver lightning-fast experiences that users and search engines love.",[99,8450,8452],{"id":8451},"understanding-core-web-vitals-in-2026","Understanding Core Web Vitals in 2026",[104,8454,8455],{},"Google has refined Core Web Vitals over the years, and 2026 brings updated thresholds and new metrics that better reflect modern web experiences. The three core metrics remain, but with stricter targets:",[115,8457,8459],{"id":8458},"largest-contentful-paint-lcp-20s-target","Largest Contentful Paint (LCP) - 2.0s Target",[104,8461,8462],{},"LCP measures loading performance by tracking when the largest content element becomes visible. The 2026 target is now 2.0 seconds (down from 2.5s), reflecting user expectations for faster loading.",[104,8464,8465],{},[123,8466,8467],{},"What counts as LCP:",[7251,8469,8470,8473,8476],{},[350,8471,8472],{},"Images and video thumbnails",[350,8474,8475],{},"Text blocks (headings, paragraphs)",[350,8477,8478],{},"Background images with significant content",[104,8480,8481],{},[123,8482,8483],{},"Optimization strategies:",[347,8485,8486,8492,8502,8508],{},[350,8487,8488,8491],{},[123,8489,8490],{},"Optimize Images",": Use modern formats (AVIF, WebP), implement responsive images, and lazy-load off-screen content",[350,8493,8494,8497,8498,8501],{},[123,8495,8496],{},"Preload Critical Resources",": Use ",[140,8499,8500],{},""," for LCP elements",[350,8503,8504,8507],{},[123,8505,8506],{},"Implement Streaming SSR",": Send HTML in chunks to start rendering sooner",[350,8509,8510,8513],{},[123,8511,8512],{},"Use Edge Caching",": Serve content from edge locations closer to users",[133,8515,8517],{"className":7344,"code":8516,"language":7346,"meta":138,"style":138},"// Nuxt 4: Preload LCP image\nuseHead({\n link: [\n {\n rel: \"preload\",\n as: \"image\",\n href: \"/img/hero-banner.avif\",\n imagesrcset:\n \"/img/hero-banner-480.avif 480w, /img/hero-banner-768.avif 768w\",\n imagesizes: \"100vw\",\n },\n ],\n})\n",[140,8518,8519,8524,8533,8542,8547,8562,8577,8593,8600,8611,8626,8631,8637],{"__ignoreMap":138},[143,8520,8521],{"class":145,"line":146},[143,8522,8523],{"class":149},"// Nuxt 4: Preload LCP image\n",[143,8525,8526,8529,8531],{"class":145,"line":153},[143,8527,8528],{"class":599},"useHead",[143,8530,603],{"class":616},[143,8532,1144],{"class":156},[143,8534,8535,8538,8540],{"class":145,"line":16},[143,8536,8537],{"class":160}," link",[143,8539,596],{"class":156},[143,8541,4029],{"class":616},[143,8543,8544],{"class":145,"line":201},[143,8545,8546],{"class":156}," {\n",[143,8548,8549,8552,8554,8556,8558,8560],{"class":145,"line":207},[143,8550,8551],{"class":160}," rel",[143,8553,596],{"class":156},[143,8555,878],{"class":156},[143,8557,383],{"class":174},[143,8559,171],{"class":156},[143,8561,1105],{"class":156},[143,8563,8564,8567,8569,8571,8573,8575],{"class":145,"line":215},[143,8565,8566],{"class":160}," as",[143,8568,596],{"class":156},[143,8570,878],{"class":156},[143,8572,476],{"class":174},[143,8574,171],{"class":156},[143,8576,1105],{"class":156},[143,8578,8579,8582,8584,8586,8589,8591],{"class":145,"line":231},[143,8580,8581],{"class":160}," href",[143,8583,596],{"class":156},[143,8585,878],{"class":156},[143,8587,8588],{"class":174},"/img/hero-banner.avif",[143,8590,171],{"class":156},[143,8592,1105],{"class":156},[143,8594,8595,8598],{"class":145,"line":241},[143,8596,8597],{"class":160}," imagesrcset",[143,8599,2027],{"class":156},[143,8601,8602,8604,8607,8609],{"class":145,"line":247},[143,8603,4135],{"class":156},[143,8605,8606],{"class":174},"/img/hero-banner-480.avif 480w, /img/hero-banner-768.avif 768w",[143,8608,171],{"class":156},[143,8610,1105],{"class":156},[143,8612,8613,8616,8618,8620,8622,8624],{"class":145,"line":253},[143,8614,8615],{"class":160}," imagesizes",[143,8617,596],{"class":156},[143,8619,878],{"class":156},[143,8621,3314],{"class":174},[143,8623,171],{"class":156},[143,8625,1105],{"class":156},[143,8627,8628],{"class":145,"line":259},[143,8629,8630],{"class":156}," },\n",[143,8632,8633,8635],{"class":145,"line":265},[143,8634,4169],{"class":616},[143,8636,1105],{"class":156},[143,8638,8639,8641],{"class":145,"line":29},[143,8640,1293],{"class":156},[143,8642,984],{"class":616},[115,8644,8646],{"id":8645},"interaction-to-next-paint-inp-150ms-target","Interaction to Next Paint (INP) - 150ms Target",[104,8648,8649],{},"INP replaced First Input Delay (FID) in 2024 and has become the primary responsiveness metric. It measures the latency of all user interactions during a page visit, not just the first one. The 2026 target is 150ms.",[104,8651,8652],{},[123,8653,8654],{},"What INP measures:",[7251,8656,8657,8660,8663,8666],{},[350,8658,8659],{},"Click events on buttons and links",[350,8661,8662],{},"Keyboard input in form fields",[350,8664,8665],{},"Touch interactions on mobile devices",[350,8667,8668],{},"Scroll interactions",[104,8670,8671],{},[123,8672,8483],{},[347,8674,8675,8681,8687,8693],{},[350,8676,8677,8680],{},[123,8678,8679],{},"Minimize JavaScript Execution",": Break up long tasks, use web workers for heavy computation",[350,8682,8683,8686],{},[123,8684,8685],{},"Optimize Event Handlers",": Debounce scroll events, use passive event listeners",[350,8688,8689,8692],{},[123,8690,8691],{},"Reduce Third-Party Impact",": Load analytics and ads asynchronously",[350,8694,8695,8698],{},[123,8696,8697],{},"Use View Transitions API",": Smooth page transitions without blocking interactions",[133,8700,8702],{"className":7344,"code":8701,"language":7346,"meta":138,"style":138},"// Optimize event handlers with passive listeners\nonMounted(() => {\n const element = document.querySelector(\".scroll-container\")\n element?.addEventListener(\"scroll\", handleScroll, { passive: true })\n})\n",[140,8703,8704,8709,8722,8749,8786],{"__ignoreMap":138},[143,8705,8706],{"class":145,"line":146},[143,8707,8708],{"class":149},"// Optimize event handlers with passive listeners\n",[143,8710,8711,8714,8716,8718,8720],{"class":145,"line":153},[143,8712,8713],{"class":599},"onMounted",[143,8715,603],{"class":616},[143,8717,1622],{"class":156},[143,8719,951],{"class":164},[143,8721,587],{"class":156},[143,8723,8724,8726,8728,8730,8733,8735,8738,8740,8742,8745,8747],{"class":145,"line":16},[143,8725,958],{"class":164},[143,8727,6015],{"class":616},[143,8729,967],{"class":156},[143,8731,8732],{"class":616}," document",[143,8734,126],{"class":156},[143,8736,8737],{"class":599},"querySelector",[143,8739,603],{"class":160},[143,8741,171],{"class":156},[143,8743,8744],{"class":174},".scroll-container",[143,8746,171],{"class":156},[143,8748,984],{"class":160},[143,8750,8751,8754,8757,8759,8761,8763,8765,8767,8769,8772,8774,8776,8778,8780,8782,8784],{"class":145,"line":201},[143,8752,8753],{"class":616}," element",[143,8755,8756],{"class":156},"?.",[143,8758,1089],{"class":599},[143,8760,603],{"class":160},[143,8762,171],{"class":156},[143,8764,1100],{"class":174},[143,8766,171],{"class":156},[143,8768,610],{"class":156},[143,8770,8771],{"class":616}," handleScroll",[143,8773,610],{"class":156},[143,8775,866],{"class":156},[143,8777,1715],{"class":160},[143,8779,596],{"class":156},[143,8781,1212],{"class":1211},[143,8783,872],{"class":156},[143,8785,984],{"class":160},[143,8787,8788,8790],{"class":145,"line":207},[143,8789,1293],{"class":156},[143,8791,984],{"class":616},[115,8793,8795],{"id":8794},"cumulative-layout-shift-cls-005-target","Cumulative Layout Shift (CLS) - 0.05 Target",[104,8797,8798],{},"CLS measures visual stability by tracking unexpected layout shifts. The target remains 0.05, but measurement has become more sophisticated, better accounting for user-initiated changes.",[104,8800,8801],{},[123,8802,8803],{},"Common causes of layout shift:",[7251,8805,8806,8809,8812,8815],{},[350,8807,8808],{},"Images without dimensions",[350,8810,8811],{},"Web fonts causing FOIT/FOUT",[350,8813,8814],{},"Dynamically injected content",[350,8816,8817],{},"Late-loading ads and embeds",[104,8819,8820],{},[123,8821,8483],{},[347,8823,8824,8830,8835,8841],{},[350,8825,8826,8829],{},[123,8827,8828],{},"Set Explicit Dimensions",": Always specify width and height for images and videos",[350,8831,8832,8834],{},[123,8833,1744],{},": Use CSS aspect-ratio and min-height",[350,8836,8837,8840],{},[123,8838,8839],{},"Optimize Font Loading",": Use font-display: optional or swap with size-adjust",[350,8842,8843,8846],{},[123,8844,8845],{},"Avoid Inserting Content Above Existing Content",": Load ads and embeds in reserved spaces",[133,8848,8850],{"className":1747,"code":8849,"language":1749,"meta":138,"style":138},"/* Reserve space for images */\n.img-container {\n aspect-ratio: 16 / 9;\n background: #f0f0f0;\n}\n\n/* Optimize font loading */\n@font-face {\n font-family: \"Inter\";\n src: url(\"/fonts/inter.woff2\") format(\"woff2\");\n font-display: swap;\n}\n",[140,8851,8852,8857,8866,8880,8894,8898,8902,8907,8913,8927,8958,8969],{"__ignoreMap":138},[143,8853,8854],{"class":145,"line":146},[143,8855,8856],{"class":149},"/* Reserve space for images */\n",[143,8858,8859,8861,8864],{"class":145,"line":153},[143,8860,126],{"class":156},[143,8862,8863],{"class":583},"img-container",[143,8865,587],{"class":156},[143,8867,8868,8870,8872,8874,8876,8878],{"class":145,"line":16},[143,8869,1818],{"class":592},[143,8871,596],{"class":156},[143,8873,1678],{"class":606},[143,8875,1825],{"class":616},[143,8877,1828],{"class":606},[143,8879,646],{"class":156},[143,8881,8882,8885,8887,8889,8892],{"class":145,"line":201},[143,8883,8884],{"class":592}," background",[143,8886,596],{"class":156},[143,8888,613],{"class":156},[143,8890,8891],{"class":616},"f0f0f0",[143,8893,646],{"class":156},[143,8895,8896],{"class":145,"line":207},[143,8897,997],{"class":156},[143,8899,8900],{"class":145,"line":215},[143,8901,198],{"emptyLinePlaceholder":197},[143,8903,8904],{"class":145,"line":231},[143,8905,8906],{"class":149},"/* Optimize font loading */\n",[143,8908,8909,8911],{"class":145,"line":241},[143,8910,1918],{"class":862},[143,8912,587],{"class":156},[143,8914,8915,8917,8919,8921,8923,8925],{"class":145,"line":247},[143,8916,1925],{"class":592},[143,8918,596],{"class":156},[143,8920,878],{"class":156},[143,8922,1932],{"class":174},[143,8924,171],{"class":156},[143,8926,646],{"class":156},[143,8928,8929,8931,8933,8935,8937,8939,8942,8944,8946,8948,8950,8952,8954,8956],{"class":145,"line":253},[143,8930,218],{"class":592},[143,8932,596],{"class":156},[143,8934,1945],{"class":599},[143,8936,603],{"class":156},[143,8938,171],{"class":156},[143,8940,8941],{"class":174},"/fonts/inter.woff2",[143,8943,171],{"class":156},[143,8945,1315],{"class":156},[143,8947,1958],{"class":599},[143,8949,603],{"class":156},[143,8951,171],{"class":156},[143,8953,1965],{"class":174},[143,8955,171],{"class":156},[143,8957,633],{"class":156},[143,8959,8960,8962,8964,8967],{"class":145,"line":259},[143,8961,1974],{"class":592},[143,8963,596],{"class":156},[143,8965,8966],{"class":616}," swap",[143,8968,646],{"class":156},[143,8970,8971],{"class":145,"line":265},[143,8972,997],{"class":156},[99,8974,8976],{"id":8975},"advanced-optimization-techniques","Advanced Optimization Techniques",[115,8978,8980],{"id":8979},"implementing-speculation-rules","Implementing Speculation Rules",[104,8982,8983],{},"Chrome's Speculation Rules API allows you to prefetch or prerender pages based on user behavior predictions. This can dramatically improve perceived performance for navigation.",[133,8985,8987],{"className":7344,"code":8986,"language":7346,"meta":138,"style":138},"// Nuxt 4: Enable speculation rules\nuseHead({\n script: [\n {\n type: \"speculationrules\",\n textContent: JSON.stringify({\n prefetch: [\n {\n source: \"document\",\n where: { href_matches: \"/blog/*\" },\n eagerness: \"moderate\",\n },\n ],\n }),\n },\n ],\n})\n",[140,8988,8989,8994,9002,9011,9015,9031,9049,9058,9063,9078,9101,9117,9122,9129,9137,9141,9147],{"__ignoreMap":138},[143,8990,8991],{"class":145,"line":146},[143,8992,8993],{"class":149},"// Nuxt 4: Enable speculation rules\n",[143,8995,8996,8998,9000],{"class":145,"line":153},[143,8997,8528],{"class":599},[143,8999,603],{"class":616},[143,9001,1144],{"class":156},[143,9003,9004,9007,9009],{"class":145,"line":16},[143,9005,9006],{"class":160}," script",[143,9008,596],{"class":156},[143,9010,4029],{"class":616},[143,9012,9013],{"class":145,"line":201},[143,9014,8546],{"class":156},[143,9016,9017,9020,9022,9024,9027,9029],{"class":145,"line":207},[143,9018,9019],{"class":160}," type",[143,9021,596],{"class":156},[143,9023,878],{"class":156},[143,9025,9026],{"class":174},"speculationrules",[143,9028,171],{"class":156},[143,9030,1105],{"class":156},[143,9032,9033,9036,9038,9041,9043,9045,9047],{"class":145,"line":215},[143,9034,9035],{"class":160}," textContent",[143,9037,596],{"class":156},[143,9039,9040],{"class":616}," JSON",[143,9042,126],{"class":156},[143,9044,4981],{"class":599},[143,9046,603],{"class":616},[143,9048,1144],{"class":156},[143,9050,9051,9054,9056],{"class":145,"line":231},[143,9052,9053],{"class":160}," prefetch",[143,9055,596],{"class":156},[143,9057,4029],{"class":616},[143,9059,9060],{"class":145,"line":241},[143,9061,9062],{"class":156}," {\n",[143,9064,9065,9068,9070,9072,9074,9076],{"class":145,"line":247},[143,9066,9067],{"class":160}," source",[143,9069,596],{"class":156},[143,9071,878],{"class":156},[143,9073,1084],{"class":174},[143,9075,171],{"class":156},[143,9077,1105],{"class":156},[143,9079,9080,9083,9085,9087,9090,9092,9094,9097,9099],{"class":145,"line":253},[143,9081,9082],{"class":160}," where",[143,9084,596],{"class":156},[143,9086,866],{"class":156},[143,9088,9089],{"class":160}," href_matches",[143,9091,596],{"class":156},[143,9093,878],{"class":156},[143,9095,9096],{"class":174},"/blog/*",[143,9098,171],{"class":156},[143,9100,1215],{"class":156},[143,9102,9103,9106,9108,9110,9113,9115],{"class":145,"line":259},[143,9104,9105],{"class":160}," eagerness",[143,9107,596],{"class":156},[143,9109,878],{"class":156},[143,9111,9112],{"class":174},"moderate",[143,9114,171],{"class":156},[143,9116,1105],{"class":156},[143,9118,9119],{"class":145,"line":265},[143,9120,9121],{"class":156}," },\n",[143,9123,9124,9127],{"class":145,"line":29},[143,9125,9126],{"class":616}," ]",[143,9128,1105],{"class":156},[143,9130,9131,9133,9135],{"class":145,"line":293},[143,9132,5468],{"class":156},[143,9134,1315],{"class":616},[143,9136,1105],{"class":156},[143,9138,9139],{"class":145,"line":308},[143,9140,8630],{"class":156},[143,9142,9143,9145],{"class":145,"line":323},[143,9144,4169],{"class":616},[143,9146,1105],{"class":156},[143,9148,9149,9151],{"class":145,"line":338},[143,9150,1293],{"class":156},[143,9152,984],{"class":616},[115,9154,9156],{"id":9155},"optimizing-third-party-scripts","Optimizing Third-Party Scripts",[104,9158,9159],{},"Third-party scripts are often the biggest performance bottleneck. Implement these strategies:",[347,9161,9162,9168,9174,9180],{},[350,9163,9164,9167],{},[123,9165,9166],{},"Load Non-Critical Scripts After Interaction",": Delay analytics until user engages",[350,9169,9170,9173],{},[123,9171,9172],{},"Use Partytown",": Run third-party scripts in a web worker",[350,9175,9176,9179],{},[123,9177,9178],{},"Implement Resource Hints",": Preconnect to third-party domains",[350,9181,9182,9185],{},[123,9183,9184],{},"Monitor Third-Party Impact",": Track performance impact of each script",[133,9187,9189],{"className":7344,"code":9188,"language":7346,"meta":138,"style":138},"// Load analytics after user interaction\nlet analyticsLoaded = false\n\nfunction loadAnalytics() {\n if (analyticsLoaded) return\n analyticsLoaded = true\n\n // Dynamically import analytics\n import(\"./analytics\").then(({ init }) => init())\n}\n\n// Load on first user interaction\ndocument.addEventListener(\"click\", loadAnalytics, { once: true })\ndocument.addEventListener(\"scroll\", loadAnalytics, { once: true })\n",[140,9190,9191,9196,9209,9213,9224,9237,9247,9251,9256,9289,9293,9297,9302,9336],{"__ignoreMap":138},[143,9192,9193],{"class":145,"line":146},[143,9194,9195],{"class":149},"// Load analytics after user interaction\n",[143,9197,9198,9201,9204,9206],{"class":145,"line":153},[143,9199,9200],{"class":164},"let",[143,9202,9203],{"class":616}," analyticsLoaded ",[143,9205,168],{"class":156},[143,9207,9208],{"class":1211}," false\n",[143,9210,9211],{"class":145,"line":16},[143,9212,198],{"emptyLinePlaceholder":197},[143,9214,9215,9217,9220,9222],{"class":145,"line":201},[143,9216,2105],{"class":164},[143,9218,9219],{"class":599}," loadAnalytics",[143,9221,1622],{"class":156},[143,9223,587],{"class":156},[143,9225,9226,9228,9230,9233,9235],{"class":145,"line":207},[143,9227,5489],{"class":862},[143,9229,1124],{"class":160},[143,9231,9232],{"class":616},"analyticsLoaded",[143,9234,1141],{"class":160},[143,9236,7001],{"class":862},[143,9238,9239,9242,9244],{"class":145,"line":215},[143,9240,9241],{"class":616}," analyticsLoaded",[143,9243,967],{"class":156},[143,9245,9246],{"class":1211}," true\n",[143,9248,9249],{"class":145,"line":231},[143,9250,198],{"emptyLinePlaceholder":197},[143,9252,9253],{"class":145,"line":241},[143,9254,9255],{"class":149}," // Dynamically import analytics\n",[143,9257,9258,9261,9263,9265,9267,9269,9271,9273,9275,9277,9279,9281,9283,9285,9287],{"class":145,"line":247},[143,9259,9260],{"class":156}," import",[143,9262,603],{"class":160},[143,9264,171],{"class":156},[143,9266,901],{"class":174},[143,9268,171],{"class":156},[143,9270,1315],{"class":160},[143,9272,126],{"class":156},[143,9274,2995],{"class":599},[143,9276,603],{"class":160},[143,9278,5638],{"class":156},[143,9280,6716],{"class":1311},[143,9282,5648],{"class":156},[143,9284,951],{"class":164},[143,9286,6716],{"class":599},[143,9288,2845],{"class":160},[143,9290,9291],{"class":145,"line":253},[143,9292,997],{"class":156},[143,9294,9295],{"class":145,"line":259},[143,9296,198],{"emptyLinePlaceholder":197},[143,9298,9299],{"class":145,"line":265},[143,9300,9301],{"class":149},"// Load on first user interaction\n",[143,9303,9304,9306,9308,9310,9312,9314,9316,9318,9320,9322,9324,9326,9328,9330,9332,9334],{"class":145,"line":29},[143,9305,1084],{"class":616},[143,9307,126],{"class":156},[143,9309,1089],{"class":599},[143,9311,603],{"class":616},[143,9313,171],{"class":156},[143,9315,6801],{"class":174},[143,9317,171],{"class":156},[143,9319,610],{"class":156},[143,9321,9219],{"class":616},[143,9323,610],{"class":156},[143,9325,866],{"class":156},[143,9327,1206],{"class":160},[143,9329,596],{"class":156},[143,9331,1212],{"class":1211},[143,9333,872],{"class":156},[143,9335,984],{"class":616},[143,9337,9338,9340,9342,9344,9346,9348,9350,9352,9354,9356,9358,9360,9362,9364,9366,9368],{"class":145,"line":293},[143,9339,1084],{"class":616},[143,9341,126],{"class":156},[143,9343,1089],{"class":599},[143,9345,603],{"class":616},[143,9347,171],{"class":156},[143,9349,1100],{"class":174},[143,9351,171],{"class":156},[143,9353,610],{"class":156},[143,9355,9219],{"class":616},[143,9357,610],{"class":156},[143,9359,866],{"class":156},[143,9361,1206],{"class":160},[143,9363,596],{"class":156},[143,9365,1212],{"class":1211},[143,9367,872],{"class":156},[143,9369,984],{"class":616},[115,9371,9373],{"id":9372},"implementing-progressive-hydration","Implementing Progressive Hydration",[104,9375,9376],{},"Full hydration of complex SPAs can block interactivity. Progressive hydration loads and hydrates components as they become visible or needed.",[133,9378,9380],{"className":7344,"code":9379,"language":7346,"meta":138,"style":138},"// Nuxt 4: Lazy hydrate components\n\n",[140,9381,9382,9387,9395,9404,9413,9421,9425,9433,9442,9451,9460,9468,9476],{"__ignoreMap":138},[143,9383,9384],{"class":145,"line":146},[143,9385,9386],{"class":149},"// Nuxt 4: Lazy hydrate components\n",[143,9388,9389,9391,9393],{"class":145,"line":153},[143,9390,157],{"class":616},[143,9392,6092],{"class":583},[143,9394,570],{"class":616},[143,9396,9397,9399,9402],{"class":145,"line":16},[143,9398,3107],{"class":616},[143,9400,9401],{"class":583},"ClientOnly",[143,9403,570],{"class":616},[143,9405,9406,9408,9411],{"class":145,"line":201},[143,9407,2124],{"class":156},[143,9409,9410],{"class":616},"LazyHeavyComponent ",[143,9412,341],{"class":156},[143,9414,9415,9417,9419],{"class":145,"line":207},[143,9416,6190],{"class":156},[143,9418,9401],{"class":616},[143,9420,570],{"class":156},[143,9422,9423],{"class":145,"line":215},[143,9424,198],{"emptyLinePlaceholder":197},[143,9426,9427,9429,9431],{"class":145,"line":231},[143,9428,3107],{"class":616},[143,9430,5972],{"class":583},[143,9432,570],{"class":616},[143,9434,9435,9437,9440],{"class":145,"line":241},[143,9436,2124],{"class":156},[143,9438,9439],{"class":616},"CriticalComponent ",[143,9441,341],{"class":156},[143,9443,9444,9446,9449],{"class":145,"line":247},[143,9445,2124],{"class":156},[143,9447,9448],{"class":616},"template #fallback",[143,9450,570],{"class":156},[143,9452,9453,9455,9458],{"class":145,"line":253},[143,9454,2146],{"class":156},[143,9456,9457],{"class":616},"LoadingSkeleton ",[143,9459,341],{"class":156},[143,9461,9462,9464,9466],{"class":145,"line":259},[143,9463,2388],{"class":156},[143,9465,6092],{"class":616},[143,9467,570],{"class":156},[143,9469,9470,9472,9474],{"class":145,"line":265},[143,9471,6190],{"class":156},[143,9473,5972],{"class":616},[143,9475,570],{"class":156},[143,9477,9478,9480,9482],{"class":145,"line":29},[143,9479,731],{"class":156},[143,9481,6092],{"class":616},[143,9483,570],{"class":156},[99,9485,9487],{"id":9486},"measuring-and-monitoring-performance","Measuring and Monitoring Performance",[115,9489,9491],{"id":9490},"real-user-monitoring-rum","Real User Monitoring (RUM)",[104,9493,9494],{},"Lab data from Lighthouse is valuable, but real user monitoring provides insights into actual user experiences. Implement RUM to track Core Web Vitals across your user base.",[133,9496,9498],{"className":7344,"code":9497,"language":7346,"meta":138,"style":138},"// Track Core Web Vitals with web-vitals library\nimport { onLCP, onINP, onCLS } from \"web-vitals\"\n\nonLCP((metric) => {\n // Send to analytics endpoint\n sendToAnalytics(\"LCP\", metric)\n})\n\nonINP((metric) => {\n sendToAnalytics(\"INP\", metric)\n})\n\nonCLS((metric) => {\n sendToAnalytics(\"CLS\", metric)\n})\n",[140,9499,9500,9505,9535,9539,9557,9562,9583,9589,9593,9610,9629,9635,9639,9656,9675],{"__ignoreMap":138},[143,9501,9502],{"class":145,"line":146},[143,9503,9504],{"class":149},"// Track Core Web Vitals with web-vitals library\n",[143,9506,9507,9509,9511,9514,9516,9519,9521,9524,9526,9528,9530,9533],{"class":145,"line":153},[143,9508,863],{"class":862},[143,9510,866],{"class":156},[143,9512,9513],{"class":616}," onLCP",[143,9515,610],{"class":156},[143,9517,9518],{"class":616}," onINP",[143,9520,610],{"class":156},[143,9522,9523],{"class":616}," onCLS",[143,9525,872],{"class":156},[143,9527,875],{"class":862},[143,9529,878],{"class":156},[143,9531,9532],{"class":174},"web-vitals",[143,9534,228],{"class":156},[143,9536,9537],{"class":145,"line":16},[143,9538,198],{"emptyLinePlaceholder":197},[143,9540,9541,9544,9546,9548,9551,9553,9555],{"class":145,"line":201},[143,9542,9543],{"class":599},"onLCP",[143,9545,603],{"class":616},[143,9547,603],{"class":156},[143,9549,9550],{"class":1311},"metric",[143,9552,1315],{"class":156},[143,9554,951],{"class":164},[143,9556,587],{"class":156},[143,9558,9559],{"class":145,"line":207},[143,9560,9561],{"class":149}," // Send to analytics endpoint\n",[143,9563,9564,9567,9569,9571,9574,9576,9578,9581],{"class":145,"line":215},[143,9565,9566],{"class":599}," sendToAnalytics",[143,9568,603],{"class":160},[143,9570,171],{"class":156},[143,9572,9573],{"class":174},"LCP",[143,9575,171],{"class":156},[143,9577,610],{"class":156},[143,9579,9580],{"class":616}," metric",[143,9582,984],{"class":160},[143,9584,9585,9587],{"class":145,"line":231},[143,9586,1293],{"class":156},[143,9588,984],{"class":616},[143,9590,9591],{"class":145,"line":241},[143,9592,198],{"emptyLinePlaceholder":197},[143,9594,9595,9598,9600,9602,9604,9606,9608],{"class":145,"line":247},[143,9596,9597],{"class":599},"onINP",[143,9599,603],{"class":616},[143,9601,603],{"class":156},[143,9603,9550],{"class":1311},[143,9605,1315],{"class":156},[143,9607,951],{"class":164},[143,9609,587],{"class":156},[143,9611,9612,9614,9616,9618,9621,9623,9625,9627],{"class":145,"line":253},[143,9613,9566],{"class":599},[143,9615,603],{"class":160},[143,9617,171],{"class":156},[143,9619,9620],{"class":174},"INP",[143,9622,171],{"class":156},[143,9624,610],{"class":156},[143,9626,9580],{"class":616},[143,9628,984],{"class":160},[143,9630,9631,9633],{"class":145,"line":259},[143,9632,1293],{"class":156},[143,9634,984],{"class":616},[143,9636,9637],{"class":145,"line":265},[143,9638,198],{"emptyLinePlaceholder":197},[143,9640,9641,9644,9646,9648,9650,9652,9654],{"class":145,"line":29},[143,9642,9643],{"class":599},"onCLS",[143,9645,603],{"class":616},[143,9647,603],{"class":156},[143,9649,9550],{"class":1311},[143,9651,1315],{"class":156},[143,9653,951],{"class":164},[143,9655,587],{"class":156},[143,9657,9658,9660,9662,9664,9667,9669,9671,9673],{"class":145,"line":293},[143,9659,9566],{"class":599},[143,9661,603],{"class":160},[143,9663,171],{"class":156},[143,9665,9666],{"class":174},"CLS",[143,9668,171],{"class":156},[143,9670,610],{"class":156},[143,9672,9580],{"class":616},[143,9674,984],{"class":160},[143,9676,9677,9679],{"class":145,"line":308},[143,9678,1293],{"class":156},[143,9680,984],{"class":616},[115,9682,9684],{"id":9683},"performance-budgets","Performance Budgets",[104,9686,9687],{},"Set performance budgets in your CI/CD pipeline to catch regressions before they reach production.",[133,9689,9692],{"className":9690,"code":9691,"language":7432,"meta":138,"style":138},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"performance\": {\n \"budgets\": [\n {\n \"path\": \"/*\",\n \"resourceSizes\": [\n { \"resourceType\": \"script\", \"budget\": 150 },\n { \"resourceType\": \"image\", \"budget\": 200 },\n { \"resourceType\": \"total\", \"budget\": 500 }\n ],\n \"resourceCounts\": [{ \"resourceType\": \"third-party\", \"budget\": 5 }]\n }\n ]\n }\n}\n",[140,9693,9694,9698,9711,9724,9728,9748,9761,9797,9830,9865,9870,9914,9918,9923,9927],{"__ignoreMap":138},[143,9695,9696],{"class":145,"line":146},[143,9697,1144],{"class":156},[143,9699,9700,9702,9705,9707,9709],{"class":145,"line":153},[143,9701,1097],{"class":156},[143,9703,9704],{"class":164},"performance",[143,9706,171],{"class":156},[143,9708,596],{"class":156},[143,9710,587],{"class":156},[143,9712,9713,9715,9718,9720,9722],{"class":145,"line":16},[143,9714,2032],{"class":156},[143,9716,9717],{"class":583},"budgets",[143,9719,171],{"class":156},[143,9721,596],{"class":156},[143,9723,4029],{"class":156},[143,9725,9726],{"class":145,"line":201},[143,9727,7700],{"class":156},[143,9729,9730,9732,9735,9737,9739,9741,9744,9746],{"class":145,"line":207},[143,9731,4135],{"class":156},[143,9733,9734],{"class":606},"path",[143,9736,171],{"class":156},[143,9738,596],{"class":156},[143,9740,878],{"class":156},[143,9742,9743],{"class":174},"/*",[143,9745,171],{"class":156},[143,9747,1105],{"class":156},[143,9749,9750,9752,9755,9757,9759],{"class":145,"line":215},[143,9751,4135],{"class":156},[143,9753,9754],{"class":606},"resourceSizes",[143,9756,171],{"class":156},[143,9758,596],{"class":156},[143,9760,4029],{"class":156},[143,9762,9763,9766,9768,9771,9773,9775,9777,9779,9781,9783,9785,9788,9790,9792,9795],{"class":145,"line":231},[143,9764,9765],{"class":156}," {",[143,9767,878],{"class":156},[143,9769,9770],{"class":160},"resourceType",[143,9772,171],{"class":156},[143,9774,596],{"class":156},[143,9776,878],{"class":156},[143,9778,2591],{"class":174},[143,9780,171],{"class":156},[143,9782,610],{"class":156},[143,9784,878],{"class":156},[143,9786,9787],{"class":160},"budget",[143,9789,171],{"class":156},[143,9791,596],{"class":156},[143,9793,9794],{"class":606}," 150",[143,9796,1215],{"class":156},[143,9798,9799,9801,9803,9805,9807,9809,9811,9813,9815,9817,9819,9821,9823,9825,9828],{"class":145,"line":241},[143,9800,9765],{"class":156},[143,9802,878],{"class":156},[143,9804,9770],{"class":160},[143,9806,171],{"class":156},[143,9808,596],{"class":156},[143,9810,878],{"class":156},[143,9812,476],{"class":174},[143,9814,171],{"class":156},[143,9816,610],{"class":156},[143,9818,878],{"class":156},[143,9820,9787],{"class":160},[143,9822,171],{"class":156},[143,9824,596],{"class":156},[143,9826,9827],{"class":606}," 200",[143,9829,1215],{"class":156},[143,9831,9832,9834,9836,9838,9840,9842,9844,9847,9849,9851,9853,9855,9857,9859,9862],{"class":145,"line":247},[143,9833,9765],{"class":156},[143,9835,878],{"class":156},[143,9837,9770],{"class":160},[143,9839,171],{"class":156},[143,9841,596],{"class":156},[143,9843,878],{"class":156},[143,9845,9846],{"class":174},"total",[143,9848,171],{"class":156},[143,9850,610],{"class":156},[143,9852,878],{"class":156},[143,9854,9787],{"class":160},[143,9856,171],{"class":156},[143,9858,596],{"class":156},[143,9860,9861],{"class":606}," 500",[143,9863,9864],{"class":156}," }\n",[143,9866,9867],{"class":145,"line":253},[143,9868,9869],{"class":156}," ],\n",[143,9871,9872,9874,9877,9879,9881,9884,9886,9888,9890,9892,9894,9897,9899,9901,9903,9905,9907,9909,9911],{"class":145,"line":259},[143,9873,4135],{"class":156},[143,9875,9876],{"class":606},"resourceCounts",[143,9878,171],{"class":156},[143,9880,596],{"class":156},[143,9882,9883],{"class":156}," [{",[143,9885,878],{"class":156},[143,9887,9770],{"class":160},[143,9889,171],{"class":156},[143,9891,596],{"class":156},[143,9893,878],{"class":156},[143,9895,9896],{"class":174},"third-party",[143,9898,171],{"class":156},[143,9900,610],{"class":156},[143,9902,878],{"class":156},[143,9904,9787],{"class":160},[143,9906,171],{"class":156},[143,9908,596],{"class":156},[143,9910,6996],{"class":606},[143,9912,9913],{"class":156}," }]\n",[143,9915,9916],{"class":145,"line":265},[143,9917,4616],{"class":156},[143,9919,9920],{"class":145,"line":29},[143,9921,9922],{"class":156}," ]\n",[143,9924,9925],{"class":145,"line":293},[143,9926,675],{"class":156},[143,9928,9929],{"class":145,"line":308},[143,9930,997],{"class":156},[99,9932,9934],{"id":9933},"case-study-e-commerce-performance-optimization","Case Study: E-commerce Performance Optimization",[104,9936,9937],{},"Let me share a real-world example of Core Web Vitals optimization for an e-commerce platform.",[115,9939,9941],{"id":9940},"initial-state","Initial State",[7251,9943,9944,9947,9950,9953],{},[350,9945,9946],{},"LCP: 4.2s (Poor)",[350,9948,9949],{},"INP: 280ms (Needs Improvement)",[350,9951,9952],{},"CLS: 0.18 (Needs Improvement)",[350,9954,9955],{},"Mobile conversion rate: 1.8%",[115,9957,9959],{"id":9958},"optimization-steps","Optimization Steps",[347,9961,9962,9968,9974,9980,9986],{},[350,9963,9964,9967],{},[123,9965,9966],{},"Image Optimization",": Converted all product images to AVIF, implemented lazy loading",[350,9969,9970,9973],{},[123,9971,9972],{},"Code Splitting",": Split vendor bundles, lazy-loaded non-critical components",[350,9975,9976,9979],{},[123,9977,9978],{},"Edge Caching",": Implemented ISR for product pages, edge caching for static assets",[350,9981,9982,9985],{},[123,9983,9984],{},"Font Optimization",": Switched to system fonts for body text, optimized heading fonts",[350,9987,9988,9991],{},[123,9989,9990],{},"Third-Party Audit",": Removed unused analytics scripts, deferred ad loading",[115,9993,9995],{"id":9994},"results-after-3-months","Results After 3 Months",[7251,9997,9998,10001,10004,10007,10010],{},[350,9999,10000],{},"LCP: 1.8s (Good) - 57% improvement",[350,10002,10003],{},"INP: 120ms (Good) - 57% improvement",[350,10005,10006],{},"CLS: 0.03 (Good) - 83% improvement",[350,10008,10009],{},"Mobile conversion rate: 2.6% - 44% increase",[350,10011,10012],{},"Organic traffic: +35%",[99,10014,10016],{"id":10015},"tools-and-resources","Tools and Resources",[104,10018,10019],{},"Essential tools for Core Web Vitals optimization:",[7251,10021,10022,10028,10034,10040,10046],{},[350,10023,10024,10027],{},[123,10025,10026],{},"PageSpeed Insights",": Lab and field data for any URL",[350,10029,10030,10033],{},[123,10031,10032],{},"Chrome DevTools",": Performance panel, Lighthouse audits",[350,10035,10036,10039],{},[123,10037,10038],{},"WebPageTest",": Advanced performance testing with custom configurations",[350,10041,10042,10045],{},[123,10043,10044],{},"CrUX Dashboard",": Real user data in Google Data Studio",[350,10047,10048,10051],{},[123,10049,10050],{},"SpeedCurve",": Continuous performance monitoring",[99,10053,8363],{"id":8362},[104,10055,10056],{},"Core Web Vitals are no longer optional—they're essential for search visibility, user experience, and business success. The optimization strategies outlined in this guide have proven effective across dozens of projects, delivering measurable improvements in performance metrics and business outcomes.",[104,10058,10059],{},"Start by measuring your current performance, identify the biggest opportunities, and implement optimizations incrementally. Focus on user-centric metrics rather than chasing perfect scores. Remember, performance optimization is an ongoing process, not a one-time fix.",[104,10061,10062],{},"The web is getting faster, and user expectations continue to rise. By mastering Core Web Vitals optimization, you'll deliver experiences that delight users and drive business results. The time to act is now—your users (and search rankings) will thank you.",[567,10064,10065],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sqsOY, html code.shiki .sqsOY{--shiki-light:#8796B0;--shiki-default:#B2CCD6;--shiki-dark:#B2CCD6}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":138,"searchDepth":153,"depth":153,"links":10067},[10068,10069,10074,10079,10083,10088,10089],{"id":8442,"depth":153,"text":8437},{"id":8451,"depth":153,"text":8452,"children":10070},[10071,10072,10073],{"id":8458,"depth":16,"text":8459},{"id":8645,"depth":16,"text":8646},{"id":8794,"depth":16,"text":8795},{"id":8975,"depth":153,"text":8976,"children":10075},[10076,10077,10078],{"id":8979,"depth":16,"text":8980},{"id":9155,"depth":16,"text":9156},{"id":9372,"depth":16,"text":9373},{"id":9486,"depth":153,"text":9487,"children":10080},[10081,10082],{"id":9490,"depth":16,"text":9491},{"id":9683,"depth":16,"text":9684},{"id":9933,"depth":153,"text":9934,"children":10084},[10085,10086,10087],{"id":9940,"depth":16,"text":9941},{"id":9958,"depth":16,"text":9959},{"id":9994,"depth":16,"text":9995},{"id":10015,"depth":153,"text":10016},{"id":8362,"depth":153,"text":8363},"2026-03-10","Master the latest Core Web Vitals metrics and learn proven optimization strategies to deliver lightning-fast web experiences that rank higher and convert better in 2026.",{"readingTime":10093},"12 min read","/blog/20-core-web-vitals-2026-optimization",{"title":8437,"description":10091},"Web Performance","Comprehensive guide to web performance optimization and monitoring",{"src":10099,"mime":7205,"alt":10100,"width":7207,"height":7208},"/img/blog/20-core-web-vitals-2026-optimization/banner.svg","Core Web Vitals 2026 Optimization - Speed metrics dashboard with green checkmarks and performance graphs on blue-green gradient background","blog/20-core-web-vitals-2026-optimization",[7211,10103,10104,10105,7213],"Core Web Vitals","SEO","Web Development","v-8qijFl74WKoVbUWXVZJt-dTLbphzXlyaiEHjs7wao",{"id":10108,"title":10109,"abstract":7195,"author":7219,"authorUrl":7195,"body":10110,"date":10889,"dateUpdated":10889,"description":10890,"excerpt":7195,"extension":7196,"featured":197,"headline":7195,"image":7195,"meta":10891,"navigation":197,"ogImage":7195,"path":10893,"seo":10894,"series":10895,"seriesDescription":10896,"seriesOrder":153,"socialImage":10897,"stem":10900,"tags":10901,"__hash__":10904},"blog/blog/25-webassembly-performance-revolution-2026.md","WebAssembly in 2026: The Performance Revolution",{"type":96,"value":10111,"toc":10862},[10112,10115,10118,10121,10125,10128,10160,10164,10168,10171,10249,10253,10256,10270,10274,10277,10303,10307,10311,10314,10350,10354,10357,10371,10375,10378,10392,10396,10399,10479,10483,10487,10490,10515,10519,10591,10595,10694,10698,10702,10713,10717,10728,10732,10809,10813,10816,10842,10844,10847,10850,10853,10859],[99,10113,10109],{"id":10114},"webassembly-in-2026-the-performance-revolution",[104,10116,10117],{},"WebAssembly (Wasm) has reached a tipping point in 2026. What started as a promise of near-native performance for the web has evolved into a mature technology that's reshaping how we build high-performance applications. From real-time video processing to complex data analysis in the browser, WebAssembly is enabling capabilities that were previously impossible.",[104,10119,10120],{},"In this guide, we'll explore the current state of WebAssembly, practical use cases, and how you can leverage this powerful technology in your projects.",[99,10122,10124],{"id":10123},"why-webassembly-matters-in-2026","Why WebAssembly Matters in 2026",[104,10126,10127],{},"WebAssembly provides several critical advantages:",[7251,10129,10130,10136,10142,10148,10154],{},[350,10131,10132,10135],{},[123,10133,10134],{},"Near-Native Performance",": Code runs at 70-90% of native speed",[350,10137,10138,10141],{},[123,10139,10140],{},"Cross-Platform Compatibility",": Runs consistently across all modern browsers",[350,10143,10144,10147],{},[123,10145,10146],{},"Language Flexibility",": Write code in C++, Rust, Go, and compile to Wasm",[350,10149,10150,10153],{},[123,10151,10152],{},"Security",": Sandboxed execution environment",[350,10155,10156,10159],{},[123,10157,10158],{},"Small Bundle Sizes",": Efficient binary format",[99,10161,10163],{"id":10162},"key-developments-in-2026","Key Developments in 2026",[115,10165,10167],{"id":10166},"_1-enhanced-javascript-interop","1. Enhanced JavaScript Interop",[104,10169,10170],{},"The JavaScript-WebAssembly interface has become significantly smoother:",[133,10172,10174],{"className":7344,"code":10173,"language":7346,"meta":138,"style":138},"// Seamless integration with modern JavaScript\nconst wasmModule = await WebAssembly.instantiateStreaming(fetch(\"/module.wasm\"))\n\n// Direct function calls with automatic type conversion\nconst result = wasmModule.exports.processData(dataArray)\n",[140,10175,10176,10181,10215,10219,10224],{"__ignoreMap":138},[143,10177,10178],{"class":145,"line":146},[143,10179,10180],{"class":149},"// Seamless integration with modern JavaScript\n",[143,10182,10183,10185,10188,10190,10192,10195,10197,10200,10202,10204,10206,10208,10211,10213],{"class":145,"line":153},[143,10184,937],{"class":164},[143,10186,10187],{"class":616}," wasmModule ",[143,10189,168],{"class":156},[143,10191,970],{"class":862},[143,10193,10194],{"class":616}," WebAssembly",[143,10196,126],{"class":156},[143,10198,10199],{"class":599},"instantiateStreaming",[143,10201,603],{"class":616},[143,10203,6383],{"class":599},[143,10205,603],{"class":616},[143,10207,171],{"class":156},[143,10209,10210],{"class":174},"/module.wasm",[143,10212,171],{"class":156},[143,10214,1476],{"class":616},[143,10216,10217],{"class":145,"line":16},[143,10218,198],{"emptyLinePlaceholder":197},[143,10220,10221],{"class":145,"line":201},[143,10222,10223],{"class":149},"// Direct function calls with automatic type conversion\n",[143,10225,10226,10228,10231,10233,10236,10238,10241,10243,10246],{"class":145,"line":207},[143,10227,937],{"class":164},[143,10229,10230],{"class":616}," result ",[143,10232,168],{"class":156},[143,10234,10235],{"class":616}," wasmModule",[143,10237,126],{"class":156},[143,10239,10240],{"class":616},"exports",[143,10242,126],{"class":156},[143,10244,10245],{"class":599},"processData",[143,10247,10248],{"class":616},"(dataArray)\n",[115,10250,10252],{"id":10251},"_2-multi-threading-support","2. Multi-Threading Support",[104,10254,10255],{},"WebAssembly threads are now widely supported, enabling:",[7251,10257,10258,10261,10264,10267],{},[350,10259,10260],{},"Parallel processing of large datasets",[350,10262,10263],{},"Real-time video encoding/decoding",[350,10265,10266],{},"Complex simulations and calculations",[350,10268,10269],{},"Game physics engines",[115,10271,10273],{"id":10272},"_3-improved-tooling","3. Improved Tooling",[104,10275,10276],{},"The ecosystem has matured with better tools:",[7251,10278,10279,10285,10291,10297],{},[350,10280,10281,10284],{},[123,10282,10283],{},"wasm-pack",": Streamlined Rust to Wasm compilation",[350,10286,10287,10290],{},[123,10288,10289],{},"AssemblyScript",": TypeScript-like language for Wasm",[350,10292,10293,10296],{},[123,10294,10295],{},"Emscripten",": C/C++ to Wasm toolchain",[350,10298,10299,10302],{},[123,10300,10301],{},"Wasmtime",": Standalone Wasm runtime",[99,10304,10306],{"id":10305},"real-world-use-cases","Real-World Use Cases",[115,10308,10310],{"id":10309},"_1-image-and-video-processing","1. Image and Video Processing",[104,10312,10313],{},"WebAssembly excels at computationally intensive tasks:",[133,10315,10319],{"className":10316,"code":10317,"language":10318,"meta":138,"style":138},"language-rust shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// Rust code compiled to WebAssembly\n#[wasm_bindgen]\npub fn apply_filter(image_data: &[u8], filter_type: &str) -> Vec {\n // High-performance image processing\n // Runs 10-50x faster than JavaScript\n}\n","rust",[140,10320,10321,10326,10331,10336,10341,10346],{"__ignoreMap":138},[143,10322,10323],{"class":145,"line":146},[143,10324,10325],{},"// Rust code compiled to WebAssembly\n",[143,10327,10328],{"class":145,"line":153},[143,10329,10330],{},"#[wasm_bindgen]\n",[143,10332,10333],{"class":145,"line":16},[143,10334,10335],{},"pub fn apply_filter(image_data: &[u8], filter_type: &str) -> Vec {\n",[143,10337,10338],{"class":145,"line":201},[143,10339,10340],{}," // High-performance image processing\n",[143,10342,10343],{"class":145,"line":207},[143,10344,10345],{}," // Runs 10-50x faster than JavaScript\n",[143,10347,10348],{"class":145,"line":215},[143,10349,997],{},[115,10351,10353],{"id":10352},"_2-data-analysis-and-visualization","2. Data Analysis and Visualization",[104,10355,10356],{},"Process large datasets directly in the browser:",[7251,10358,10359,10362,10365,10368],{},[350,10360,10361],{},"Financial modeling and analysis",[350,10363,10364],{},"Scientific data visualization",[350,10366,10367],{},"Real-time analytics dashboards",[350,10369,10370],{},"Machine learning inference",[115,10372,10374],{"id":10373},"_3-gaming","3. Gaming",[104,10376,10377],{},"Game developers are leveraging WebAssembly for:",[7251,10379,10380,10383,10386,10389],{},[350,10381,10382],{},"Physics engines",[350,10384,10385],{},"AI behavior calculations",[350,10387,10388],{},"3D rendering optimizations",[350,10390,10391],{},"Audio processing",[99,10393,10395],{"id":10394},"performance-benchmarks","Performance Benchmarks",[104,10397,10398],{},"Recent benchmarks show impressive results:",[10400,10401,10402,10420],"table",{},[10403,10404,10405],"thead",{},[10406,10407,10408,10412,10414,10417],"tr",{},[10409,10410,10411],"th",{},"Task",[10409,10413,8433],{},[10409,10415,10416],{},"WebAssembly",[10409,10418,10419],{},"Speedup",[10421,10422,10423,10438,10452,10466],"tbody",{},[10406,10424,10425,10429,10432,10435],{},[10426,10427,10428],"td",{},"Image Filter",[10426,10430,10431],{},"150ms",[10426,10433,10434],{},"15ms",[10426,10436,10437],{},"10x",[10406,10439,10440,10443,10446,10449],{},[10426,10441,10442],{},"Data Sorting (1M items)",[10426,10444,10445],{},"800ms",[10426,10447,10448],{},"120ms",[10426,10450,10451],{},"6.7x",[10406,10453,10454,10457,10460,10463],{},[10426,10455,10456],{},"Encryption",[10426,10458,10459],{},"200ms",[10426,10461,10462],{},"25ms",[10426,10464,10465],{},"8x",[10406,10467,10468,10471,10474,10477],{},[10426,10469,10470],{},"Video Encoding",[10426,10472,10473],{},"2000ms",[10426,10475,10476],{},"250ms",[10426,10478,10465],{},[99,10480,10482],{"id":10481},"getting-started-with-webassembly","Getting Started with WebAssembly",[115,10484,10486],{"id":10485},"step-1-choose-your-language","Step 1: Choose Your Language",[104,10488,10489],{},"Popular options include:",[7251,10491,10492,10498,10504,10510],{},[350,10493,10494,10497],{},[123,10495,10496],{},"Rust",": Best ecosystem support, memory safety",[350,10499,10500,10503],{},[123,10501,10502],{},"C/C++",": Mature tooling, maximum performance",[350,10505,10506,10509],{},[123,10507,10508],{},"Go",": Easy to learn, good standard library",[350,10511,10512,10514],{},[123,10513,10289],{},": TypeScript-like syntax",[115,10516,10518],{"id":10517},"step-2-set-up-your-development-environment","Step 2: Set Up Your Development Environment",[133,10520,10524],{"className":10521,"code":10522,"language":10523,"meta":138,"style":138},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Install Rust and wasm-pack\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | run_in_terminal\ncargo install wasm-pack\n\n# Create a new Wasm project\nwasm-pack new my-wasm-module\n","bash",[140,10525,10526,10531,10562,10573,10577,10582],{"__ignoreMap":138},[143,10527,10528],{"class":145,"line":146},[143,10529,10530],{"class":149},"# Install Rust and wasm-pack\n",[143,10532,10533,10536,10539,10542,10545,10547,10550,10553,10556,10559],{"class":145,"line":153},[143,10534,10535],{"class":583},"curl",[143,10537,10538],{"class":174}," --proto",[143,10540,10541],{"class":156}," '",[143,10543,10544],{"class":174},"=https",[143,10546,8064],{"class":156},[143,10548,10549],{"class":174}," --tlsv1.2",[143,10551,10552],{"class":174}," -sSf",[143,10554,10555],{"class":174}," https://sh.rustup.rs",[143,10557,10558],{"class":156}," |",[143,10560,10561],{"class":583}," run_in_terminal\n",[143,10563,10564,10567,10570],{"class":145,"line":16},[143,10565,10566],{"class":583},"cargo",[143,10568,10569],{"class":174}," install",[143,10571,10572],{"class":174}," wasm-pack\n",[143,10574,10575],{"class":145,"line":201},[143,10576,198],{"emptyLinePlaceholder":197},[143,10578,10579],{"class":145,"line":207},[143,10580,10581],{"class":149},"# Create a new Wasm project\n",[143,10583,10584,10586,10588],{"class":145,"line":215},[143,10585,10283],{"class":583},[143,10587,1249],{"class":174},[143,10589,10590],{"class":174}," my-wasm-module\n",[115,10592,10594],{"id":10593},"step-3-build-and-integrate","Step 3: Build and Integrate",[133,10596,10598],{"className":7344,"code":10597,"language":7346,"meta":138,"style":138},"// Import and use in your JavaScript/TypeScript code\nimport init, { process_data } from \"./pkg/my_wasm_module.js\"\n\nasync function run() {\n await init()\n const result = process_data(inputData)\n console.log(result)\n}\n",[140,10599,10600,10605,10629,10633,10646,10655,10673,10690],{"__ignoreMap":138},[143,10601,10602],{"class":145,"line":146},[143,10603,10604],{"class":149},"// Import and use in your JavaScript/TypeScript code\n",[143,10606,10607,10609,10611,10613,10615,10618,10620,10622,10624,10627],{"class":145,"line":153},[143,10608,863],{"class":862},[143,10610,6716],{"class":616},[143,10612,610],{"class":156},[143,10614,866],{"class":156},[143,10616,10617],{"class":616}," process_data",[143,10619,872],{"class":156},[143,10621,875],{"class":862},[143,10623,878],{"class":156},[143,10625,10626],{"class":174},"./pkg/my_wasm_module.js",[143,10628,228],{"class":156},[143,10630,10631],{"class":145,"line":16},[143,10632,198],{"emptyLinePlaceholder":197},[143,10634,10635,10637,10639,10642,10644],{"class":145,"line":201},[143,10636,333],{"class":164},[143,10638,1375],{"class":164},[143,10640,10641],{"class":599}," run",[143,10643,1622],{"class":156},[143,10645,587],{"class":156},[143,10647,10648,10651,10653],{"class":145,"line":207},[143,10649,10650],{"class":862}," await",[143,10652,6716],{"class":599},[143,10654,1060],{"class":160},[143,10656,10657,10659,10662,10664,10666,10668,10671],{"class":145,"line":215},[143,10658,958],{"class":164},[143,10660,10661],{"class":616}," result",[143,10663,967],{"class":156},[143,10665,10617],{"class":599},[143,10667,603],{"class":160},[143,10669,10670],{"class":616},"inputData",[143,10672,984],{"class":160},[143,10674,10675,10678,10680,10683,10685,10688],{"class":145,"line":231},[143,10676,10677],{"class":616}," console",[143,10679,126],{"class":156},[143,10681,10682],{"class":599},"log",[143,10684,603],{"class":160},[143,10686,10687],{"class":616},"result",[143,10689,984],{"class":160},[143,10691,10692],{"class":145,"line":241},[143,10693,997],{"class":156},[99,10695,10697],{"id":10696},"best-practices","Best Practices",[115,10699,10701],{"id":10700},"_1-optimize-for-size","1. Optimize for Size",[7251,10703,10704,10707,10710],{},[350,10705,10706],{},"Use tree-shaking to remove unused code",[350,10708,10709],{},"Enable compression (gzip/brotli)",[350,10711,10712],{},"Consider lazy loading for large modules",[115,10714,10716],{"id":10715},"_2-manage-memory-carefully","2. Manage Memory Carefully",[7251,10718,10719,10722,10725],{},[350,10720,10721],{},"Free memory explicitly when done",[350,10723,10724],{},"Avoid unnecessary data copying",[350,10726,10727],{},"Use efficient data structures",[115,10729,10731],{"id":10730},"_3-handle-errors-gracefully","3. Handle Errors Gracefully",[133,10733,10735],{"className":7344,"code":10734,"language":7346,"meta":138,"style":138},"try {\n const result = wasmModule.exports.riskyOperation()\n} catch (error) {\n // Handle Wasm errors appropriately\n console.error(\"Wasm operation failed:\", error)\n}\n",[140,10736,10737,10744,10765,10776,10781,10805],{"__ignoreMap":138},[143,10738,10739,10742],{"class":145,"line":146},[143,10740,10741],{"class":862},"try",[143,10743,587],{"class":156},[143,10745,10746,10748,10750,10752,10754,10756,10758,10760,10763],{"class":145,"line":153},[143,10747,958],{"class":164},[143,10749,10661],{"class":616},[143,10751,967],{"class":156},[143,10753,10235],{"class":616},[143,10755,126],{"class":156},[143,10757,10240],{"class":616},[143,10759,126],{"class":156},[143,10761,10762],{"class":599},"riskyOperation",[143,10764,1060],{"class":160},[143,10766,10767,10769,10771,10774],{"class":145,"line":16},[143,10768,1293],{"class":156},[143,10770,2861],{"class":862},[143,10772,10773],{"class":616}," (error) ",[143,10775,1144],{"class":156},[143,10777,10778],{"class":145,"line":201},[143,10779,10780],{"class":149}," // Handle Wasm errors appropriately\n",[143,10782,10783,10785,10787,10789,10791,10793,10796,10798,10800,10803],{"class":145,"line":207},[143,10784,10677],{"class":616},[143,10786,126],{"class":156},[143,10788,2866],{"class":599},[143,10790,603],{"class":160},[143,10792,171],{"class":156},[143,10794,10795],{"class":174},"Wasm operation failed:",[143,10797,171],{"class":156},[143,10799,610],{"class":156},[143,10801,10802],{"class":616}," error",[143,10804,984],{"class":160},[143,10806,10807],{"class":145,"line":215},[143,10808,997],{"class":156},[99,10810,10812],{"id":10811},"the-future-of-webassembly","The Future of WebAssembly",[104,10814,10815],{},"Looking ahead, we can expect:",[347,10817,10818,10824,10830,10836],{},[350,10819,10820,10823],{},[123,10821,10822],{},"WASM 2.0",": New features and optimizations",[350,10825,10826,10829],{},[123,10827,10828],{},"Better Debugging",": Improved debugging tools and source maps",[350,10831,10832,10835],{},[123,10833,10834],{},"Server-Side Wasm",": More serverless platforms supporting Wasm",[350,10837,10838,10841],{},[123,10839,10840],{},"AI/ML Integration",": Native support for machine learning models",[99,10843,8363],{"id":8362},[104,10845,10846],{},"WebAssembly in 2026 is no longer experimental—it's a production-ready technology that can dramatically improve your application's performance. Whether you're building a data-intensive dashboard, a media processing tool, or a game, WebAssembly offers the performance boost you need.",[104,10848,10849],{},"Start small by identifying performance bottlenecks in your application, and consider whether WebAssembly could help. The investment in learning this technology will pay dividends in user experience and capabilities.",[10851,10852],"hr",{},[104,10854,10855,10858],{},[123,10856,10857],{},"Ready to try WebAssembly?"," Start with a simple computation-heavy function and measure the performance difference. You might be surprised by the results.",[567,10860,10861],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":138,"searchDepth":153,"depth":153,"links":10863},[10864,10865,10866,10871,10876,10877,10882,10887,10888],{"id":10114,"depth":153,"text":10109},{"id":10123,"depth":153,"text":10124},{"id":10162,"depth":153,"text":10163,"children":10867},[10868,10869,10870],{"id":10166,"depth":16,"text":10167},{"id":10251,"depth":16,"text":10252},{"id":10272,"depth":16,"text":10273},{"id":10305,"depth":153,"text":10306,"children":10872},[10873,10874,10875],{"id":10309,"depth":16,"text":10310},{"id":10352,"depth":16,"text":10353},{"id":10373,"depth":16,"text":10374},{"id":10394,"depth":153,"text":10395},{"id":10481,"depth":153,"text":10482,"children":10878},[10879,10880,10881],{"id":10485,"depth":16,"text":10486},{"id":10517,"depth":16,"text":10518},{"id":10593,"depth":16,"text":10594},{"id":10696,"depth":153,"text":10697,"children":10883},[10884,10885,10886],{"id":10700,"depth":16,"text":10701},{"id":10715,"depth":16,"text":10716},{"id":10730,"depth":16,"text":10731},{"id":10811,"depth":153,"text":10812},{"id":8362,"depth":153,"text":8363},"2026-02-24","Explore how WebAssembly is revolutionizing web performance in 2026, enabling near-native speed for web applications and opening new possibilities.",{"readingTime":10892},"9 min read","/blog/25-webassembly-performance-revolution-2026",{"title":10109,"description":10890},"Performance Optimization","Deep dive into modern web performance techniques",{"src":10898,"mime":7205,"alt":10899,"width":7207,"height":7208},"/img/blog/25-webassembly-performance-revolution-2026/banner.svg","WebAssembly 2026 Performance - Speed and performance visualization with Wasm logo on purple gradient","blog/25-webassembly-performance-revolution-2026",[10416,7211,10902,7213,10903],"Web Technologies","Wasm","42gZ8gxKaKNhUuGXUCW2sx2RLKzzF5bLf96W11FtVT4",["Reactive",10906],{"$scolor-mode":10907,"$snuxt-seo-utils:routeRules":10909,"$stoasts":10910,"$ssite-config":10911},{"preference":10908,"value":10908,"unknown":197,"forced":7197},"system",{"head":-1,"seoMeta":-1},[],{"_priority":10912,"defaultLocale":10915,"description":10916,"env":10917,"indexable":197,"name":10918,"url":10919},{"env":10913,"indexable":10914,"url":10914,"name":10914,"description":10914,"defaultLocale":10914},-15,-3,"en","Senior Software Engineer specializing in modern web technologies. Crafting scalable web applications and browser extensions for startups and founders.","production","Muhammad Ubaid Raza - Full Stack Engineer","https://mubaidr.js.org",["Set"],["ShallowReactive",10922],{"blog-post-/blog/9-web-performance-optimization-2024":-1,"profile-data":-1,"related-posts-/blog/9-web-performance-optimization-2024":-1}]