Lighthouse Node API运行后性能评分一直是undefined怎么办?
我在用Lighthouse Node API跑性能测试时,获取的performance评分总是undefined,但其他指标正常。代码是这样写的:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
async function run() {
const chrome = await chromeLauncher.launch({chromeFlags: []});
const opts = {chromeSocketPath: chrome.runtimeConfig.socketPath};
const results = await lighthouse('https://example.com', opts);
console.log(results.categories.performance); // 这里显示undefined
await chrome.kill();
}
run();
我已经试过更新到最新版本,并检查了所有配置项,但问题依旧。用同样的代码测试其他站点时,这个评分项有时会出现数字,有时又变undefined,这是什么情况?
首先,
results.categories.performance是undefined的情况,通常是Lighthouse没有成功生成完整的报告。可能的原因有几个:一是目标站点加载不完全,导致性能审计失败;二是Chrome实例的配置不够完善,导致某些功能不可用。你的代码里有几个地方可以优化。第一,
chromeFlags是空数组,这可能会导致Chrome启动时缺少必要的参数。建议加上一些常用的标志位,比如--headless和--no-sandbox,确保Chrome能正常运行。第二,opts的配置太简单了,Lighthouse需要更多的参数来正确执行审计。以下是修改后的代码:
几个关键点:
1. 我在
chromeFlags里加了--headless和--no-sandbox,这是为了让Chrome更稳定地运行。2. 把
opts的配置补全了,尤其是port和logLevel,这样可以确保Lighthouse连接到正确的Chrome实例。3. 输出结果的时候改成了
results.lhr.categories.performance.score,因为Lighthouse返回的结果结构里,lhr才是实际的报告数据。如果问题还是存在,可能是目标站点本身的问题。比如有些站点会检测Headless模式并阻止加载,或者页面内容动态加载不完整。这种情况下可以尝试去掉
--headless参数,看看是不是站点对Headless模式做了限制。最后,记得检查一下你的Node.js版本和依赖是否匹配,Lighthouse对环境要求还挺高的。如果还有问题,可以试着跑一个本地的简单HTML页面,确认是不是目标站点的问题。