'use client'; import { useState, useEffect } from 'react'; import { PerformanceMonitor } from '@/lib/performance'; interface PerformanceMetrics { [key: string]: { avg: number; min: number; max: number; count: number; } | null; } export default function PerformanceDashboard() { const [metrics, setMetrics] = useState({}); const [isVisible, setIsVisible] = useState(false); useEffect(() => { if (!isVisible) return; const updateMetrics = () => { setMetrics(PerformanceMonitor.getAllMetrics()); }; // Update metrics every 2 seconds when dashboard is visible updateMetrics(); const interval = setInterval(updateMetrics, 2000); return () => clearInterval(interval); }, [isVisible]); // Only show in development mode if (process.env.NODE_ENV !== 'development') { return null; } return ( <> {!isVisible && (
)} {isVisible && (

Performance Metrics

{Object.keys(metrics).length === 0 ? (

No metrics collected yet.

) : (
{Object.entries(metrics).map(([label, metric]) => { if (!metric) return null; return (

{label.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase())}

Avg:{' '} {metric.avg.toFixed(2)}ms
Count:{' '} {metric.count}
Min:{' '} {metric.min.toFixed(2)}ms
Max:{' '} 100 ? 'text-red' : 'text-yellow'}> {metric.max.toFixed(2)}ms
{/* Performance indicator */}
{metric.avg < 50 ? 'Excellent' : metric.avg < 100 ? 'Good' : 'Needs Optimization'}
); })} {/* Performance tips */}

💡 Performance Tips

  • • Keep API calls under 100ms for optimal UX
  • • Monitor fetchData and setActive timings
  • • High max values indicate performance spikes
  • • Consider caching for frequently called APIs
)}
)} ); }