"use client"; import React, { useState, useEffect, useRef } from 'react'; import { ComponentShareButton } from '../ComponentShareButton'; import { Reveal } from '../Reveal'; import { RotateCcw } from 'lucide-react'; export function LoadTimeSimulator({ className = '' }: { className?: string }) { const [isRunning, setIsRunning] = useState(false); const [timeElapsed, setTimeElapsed] = useState(0); const [legacyState, setLegacyState] = useState(0); const [hasAutoStarted, setHasAutoStarted] = useState(false); const containerRef = useRef(null); const [mintelState, setMintelState] = useState(0); useEffect(() => { let interval: NodeJS.Timeout; if (isRunning && timeElapsed < 7500) { interval = setInterval(() => { setTimeElapsed(prev => { const next = prev + 50; // Legacy Loading Logic (stuttering, slow, layout shifts) if (next >= 1200 && next < 3000) setLegacyState(1); // Header only else if (next >= 3000 && next < 5500) setLegacyState(2); // Text appears else if (next >= 5500 && next < 7000) setLegacyState(3); // Image loads (CLS) else if (next >= 7000) setLegacyState(4); // Finally interactive // Mintel Loading Logic (Instant Edge Delivery) if (next >= 350) setMintelState(1); // Fully loaded instantly return next; }); }, 50); } else if (timeElapsed >= 7500) { setIsRunning(false); } return () => clearInterval(interval); }, [isRunning, timeElapsed]); // Auto-start the race when scrolled into viewport useEffect(() => { if (hasAutoStarted) return; const el = containerRef.current; if (!el) return; const observer = new IntersectionObserver( ([entry]) => { if (entry.isIntersecting) { setHasAutoStarted(true); setIsRunning(true); observer.disconnect(); } }, { threshold: 0.4 } ); observer.observe(el); return () => observer.disconnect(); }, [hasAutoStarted]); const startRace = () => { setTimeElapsed(0); setLegacyState(0); setMintelState(0); setIsRunning(true); }; return (
🏎️

Architektur-Rennen: Legacy CMS vs. Mintel Stack

Simulieren Sie den Unterschied zwischen dynamischem Server-Rendering (PHP/MySQL) und statischer Edge-Auslieferung (TTV < 500ms).

{timeElapsed > 0 && !isRunning && ( )}
{/* LEGACY LANE */}
Legacy Monolith {legacyState === 4 ? "7.00s" : (timeElapsed / 1000).toFixed(2) + "s"}
{/* Browser Mockup */}
{/* Spinner */} {legacyState === 0 && (
TTFB Waiting...
)} {/* Content that shuffles around to simulate CLS */}
= 1 ? 'opacity-100' : 'opacity-0'}`}>
{/* Header */}
{/* Simulate Layout Shift: Text loads first (state 2), then at state 3 an image drops in above it, pushing the text down. */}
{legacyState >= 3 && (
🖼️
)}
= 2 ? 'opacity-100' : 'opacity-0'} ${legacyState === 3 ? 'translate-y-2' : ''}`}>
{legacyState === 4 && (
Interaktiv (Hydrated)
)}
{legacyState === 0 && timeElapsed > 0 && Waiting for Server...} {legacyState === 1 && Parsing HTML...} {legacyState === 2 && Downloading Assets...} {legacyState === 3 && Layout Shift Detected!} {legacyState === 4 && Finished in 7.0s}
{/* MINTEL LANE */}
Mintel Stack (Edge) {mintelState === 1 ? "0.35s" : (timeElapsed / 1000).toFixed(2) + "s"}
{/* Browser Mockup */}
{mintelState === 0 && (
CDN Hit...
)} {/* Instant Load: Everything drops in perfectly immediately */}
🚀
Instant Interactive
{mintelState === 0 && timeElapsed > 0 && Routing to Edge...} {mintelState === 1 && Loaded & Ready in 350ms}
); }