You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何从Google PageSpeed Insights API提取加载体验时序与占比数据?

Google PageSpeed Insights在线工具中的FCP/FID时序和百分比值如何从API响应生成?

我正在开发一款基于Google PageSpeed Insights API的应用,通过curl https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=目标URL调用API获取JSON响应,也用Java代码实现了程序化调用:

String pythonScript = "import os\n" + "os.system(\"curl https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url= "+pageSpeedMetrics.getCompanyUrl()+" > "+PYTHON_FILE_LOCATION+fileName+"\")";
BufferedWriter out = new BufferedWriter(new FileWriter(PYTHON_FILE_LOCATION.concat(PAGESPEEDINSIGHT_PYTHON_FILE_NAME)));
out.write(pythonScript);
out.close();
System.out.println(pythonScript);
Process p = r.exec("python "+PYTHON_FILE_LOCATION.concat(PAGESPEEDINSIGHT_PYTHON_FILE_NAME)+"");
p.waitFor();
JSONObject json = new JSONObject();
json.put("crux_loading_experience", jsonPagespeedInsight.getJSONObject("loadingExperience"));
json.put("crux_origin_loading_experience", jsonPagespeedInsight.getJSONObject("originLoadingExperience"));

但我发现,在PageSpeed Insights在线工具里能看到FCP(First Contentful Paint)和FID(First Input Delay)的时序图表及对应的百分比值,可API返回的JSON里并没有直接给出这些可视化的数值。想请教这些值是如何从API响应数据生成的?


解答:

其实这些可视化数据的核心来源就是API响应里的distributions字段,在线工具只是把这些原始数据做了可视化转换:

  • 核心数据来源:distributions数组
    每个性能指标(比如FIRST_CONTENTFUL_PAINT_MSFIRST_INPUT_DELAY_MS)的metrics对象里,都包含一个distributions数组。这个数组里的每一项代表一个延迟区间,包含三个关键值:

    • min:区间的最小延迟(毫秒)
    • max:区间的最大延迟(毫秒,最后一项可能没有,代表大于等于min的所有情况)
    • proportion:该区间内用户的占比(小数形式,比如0.5647代表56.47%)
  • 百分比值的生成
    在线工具里显示的百分比,就是把proportion值乘以100得到的。比如你提供的示例响应中:

    • FCP的0-1000ms区间占比是0.5647 → 转换成56.47%
    • 1000-2500ms区间占比0.3140 → 31.40%
    • 2500ms+区间占比0.1213 → 12.13%
      这些就是在线工具里展示的百分比数值。
  • 时序图表的生成
    时序图表是按延迟区间的时间顺序(从短到长)来排列这些区间,用柱状图或折线图的形式呈现每个区间的用户占比。比如横轴是延迟区间(0-1s、1-2.5s、2.5s+),纵轴是对应的用户百分比,这样就能直观展示不同加载速度下的用户分布情况。

  • 额外的参考值:percentile字段
    另外API返回的percentile值(比如FID的98分位是98ms),会被在线工具突出显示,作为该指标的关键参考——代表98%的用户的延迟都低于这个数值。

如果你想在自己的应用里实现类似的展示,只需要解析distributions数组,提取每个区间的范围和占比,转换成百分比后,就可以用前端图表库来生成对应的时序可视化了。


内容的提问来源于stack exchange,提问作者Mithun Manohar

火山引擎 最新活动