Lighthouse报告的0-100分值对应JSON结果中的哪个字段?
你要的HTML报告上的0-100评分,无需自行复杂换算,Lighthouse返回的JSON结果(LHR)中已经预置了完全对应的计算结果,也可以手动按规则复现计算逻辑:
方法1:直接取预置评分(推荐,最精准)
LHR的categories字段下已经预存了五大核心维度的最终得分,取值规则:
- 每个维度的评分存储在
lhr.categories.[维度ID].score,返回值为01之间的小数,乘以100就是HTML报告中显示的0100整数评分 - 常用维度ID对应:
- 性能评分(也就是PageSpeed Insights展示的核心综合评分):
performance - 可访问性评分:
accessibility - 最佳实践评分:
best-practices - SEO评分:
seo - PWA评分:
pwa
- 性能评分(也就是PageSpeed Insights展示的核心综合评分):
这个字段是Lighthouse官方计算后直接写入JSON的,和HTML报告渲染的评分100%一致,无需额外处理,适合绝大多数监控场景直接使用。
方法2:手动实现评分计算逻辑
如果需要自定义权重或者验证计算逻辑,可以按Lighthouse官方的加权平均规则自行计算:
- 每个维度下的所有审计项,在
auditRefs字段中都标注了对应的权重weight - 将每个审计项的得分
lhr.audits[审计ID].score(0~1之间)乘以对应权重,求和得到加权总分 - 将加权总分除以该维度所有审计项的权重总和,得到01的维度得分,乘以100就是最终0100评分
示例代码(JavaScript):
// lhr为Lighthouse返回的JSON结果对象 function calcCategoryScore(lhr, categoryId) { const category = lhr.categories[categoryId]; let weightedSum = 0; let totalWeight = 0; category.auditRefs.forEach(ref => { const audit = lhr.audits[ref.id]; // 跳过未参与计分的审计项 if (audit.score === null || ref.weight === 0) return; weightedSum += audit.score * ref.weight; totalWeight += ref.weight; }); // 返回四舍五入后的0~100整数评分 return Math.round((weightedSum / totalWeight) * 100); } // 调用示例:计算性能评分 const perfScore = calcCategoryScore(lhr, 'performance');
注意:不同版本的Lighthouse审计项权重可能会调整,直接使用预置的
categories下的score字段可以自动适配版本差异,无需手动维护权重规则。
内容的提问来源于stack exchange,提问作者Lasse
相关产品推荐
相关产品推荐

