AMP Performance Dashboard
Instructions: Upload a CSV file with web performance data. Required columns:
page_type ("AMP" or "Standard"), date, load_time_ms, lcp_ms, cls, bounce_rate_percent, conversion_rate_percent.
Please upload a CSV file to begin analysis.
Performance Comparison
Not enough data for comparison in the selected date range. Please ensure both 'AMP' and 'Standard' page types exist.
`; elements.placeholder.style.display = 'block'; elements.dashboardContent.style.display = 'none'; elements.pdfBtn.style.display = 'none'; return; } elements.placeholder.style.display = 'none'; elements.dashboardContent.style.display = 'block'; elements.pdfBtn.style.display = 'block'; renderKPIs(); renderAllCharts(); } function calculateAverages(dataArray) { if (dataArray.length === 0) return {}; const sum = (key) => dataArray.reduce((acc, row) => acc + (row[key] || 0), 0); const count = dataArray.length; return { load_time: sum('load_time_ms') / count, lcp: sum('lcp_ms') / count, cls: sum('cls') / count, bounce: sum('bounce_rate_percent') / count, conversion: sum('conversion_rate_percent') / count, }; } function renderKPIs() { const ampAvgs = calculateAverages(ampData); const stdAvgs = calculateAverages(standardData); const kpiConfigs = [ { title: 'Avg. Page Load Time', key: 'load_time', unit: 'ms', smallerIsBetter: true }, { title: 'Avg. LCP', key: 'lcp', unit: 'ms', smallerIsBetter: true }, { title: 'Avg. Bounce Rate', key: 'bounce', unit: '%', smallerIsBetter: true }, { title: 'Avg. Conversion Rate', key: 'conversion', unit: '%', smallerIsBetter: false } ]; elements.kpiContainer.innerHTML = kpiConfigs.map(k => { const ampVal = ampAvgs[k.key]; const stdVal = stdAvgs[k.key]; const improvement = 100 * ((stdVal - ampVal) / stdVal); const displayImprovement = k.smallerIsBetter ? improvement : -improvement; return `${k.title}
${ampVal.toFixed(k.unit === '%' ? 1 : 0)}${k.unit}
AMP
${stdVal.toFixed(k.unit === '%' ? 1 : 0)}${k.unit}
Standard
${displayImprovement > 0 ? '▲' : '▼'} ${Math.abs(displayImprovement).toFixed(1)}%
