37 lines
1.6 KiB
JavaScript
37 lines
1.6 KiB
JavaScript
const fs = require('fs');
|
|
const { execSync } = require('child_process');
|
|
|
|
console.log("Running Lighthouse...");
|
|
try {
|
|
execSync('npx lighthouse "https://e-tib.com/de/standorte?v=2" --chrome-flags="--headless --no-sandbox" --output json --output-path ./lh-report.json', { stdio: 'inherit' });
|
|
} catch(e) {
|
|
console.log("Lighthouse run failed", e.message);
|
|
}
|
|
|
|
const data = JSON.parse(fs.readFileSync('./lh-report.json', 'utf8'));
|
|
const score = data.categories.performance.score * 100;
|
|
console.log("\n==================================");
|
|
console.log(`PERFORMANCE SCORE: ${score}`);
|
|
console.log("==================================\n");
|
|
|
|
console.log("FAILING METRICS (Score < 1.0):");
|
|
Object.values(data.audits).filter(a => a.score !== null && a.score < 1).forEach(a => {
|
|
console.log(`- ${a.id}: ${a.score} (${a.displayValue || 'No display value'})`);
|
|
if (a.details && a.details.items && a.details.items.length > 0) {
|
|
if (a.id === 'image-delivery-insight' || a.id === 'unused-javascript' || a.id === 'modern-image-formats' || a.id === 'uses-responsive-images') {
|
|
console.log(" Items:");
|
|
a.details.items.forEach(item => {
|
|
console.log(` URL: ${item.url || item.node?.nodeLabel || 'unknown'}`);
|
|
if (item.wastedBytes) console.log(` Wasted KB: ${(item.wastedBytes / 1024).toFixed(2)}`);
|
|
if (item.wastedMs) console.log(` Wasted Ms: ${item.wastedMs}`);
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
console.log("\nLCP BREAKDOWN:");
|
|
const lcpElement = data.audits['largest-contentful-paint-element'];
|
|
if (lcpElement && lcpElement.details && lcpElement.details.items) {
|
|
console.log("LCP Element:", lcpElement.details.items[0].node.snippet);
|
|
}
|