【问题标题】:What is the average mobile rating on Google PageSpeed Insights?Google PageSpeed Insights 上的平均移动评分是多少?
【发布时间】:2021-03-03 06:54:40
【问题描述】:

我们使用 Google PageSpeed Insights 作为营销工具来比较我们与竞争对手的网站的下载速度。但是这么多移动网站的评级都在 30 年代,想知道这是否就是平均移动评级。有人知道吗?谢谢

【问题讨论】:

    标签: lighthouse pagespeed-insights google-pagespeed-insights-api


    【解决方案1】:

    简答

    平均移动评分为 31。

    长答案。

    我在写完下面的文章后发现了一篇回答问题的文章

    这个article from tunetheweb实际上已经在这里为我们完成了艰苦的工作,并从httparchive收集了数据。 (阅读这篇文章,它有很多有趣的信息!)

    从那篇文章中摘取的下表涵盖了您的问题(性能指标第 50 个百分位的答案是 31)

    Percentile    Performance    Accessibility    Best Practices    SEO    PWA
    10            8              56               64                69     14
    25            16             69               64                80     25
    50            31             80               71                86     29
    75            55             88               79                92     36
    90            80             95               86                99     54
    95            93             97               93                100    54
    99            99             100              93                100    64
    


    我保留了以下信息,因为这些信息可能对某人有用,但上面的信息更好地回答了这个问题。至少我对 35 的猜测与实际答案相距几百万英里。呵呵。

    我原来的答案

    您会认为平均分是 50 分吧?不!

    Lighthouse 使用对数正态曲线来创建指示分数的曲线。

    该曲线上的两个关键控制点是中位数的第 25 个百分位(50 分意味着您有效地处于前 25%)和 90 分的第 8 个百分位。

    用于确定这些点的数字来自http archive 数据。

    您可以以the curve used for Time To Interactive scoring here 为例进行探索。

    现在我确信数学比我好得多的人可以使用该数据来计算网站的平均分数,但我估计移动网站的平均分数约为 35,这非常接近于你已经观察到了。

    我可以做的一件事是根据这些控制点提供评分的工作原理,以便您可以查看每个指标的各种截止点等。

    以下内容来自https://github.com/paulirish/lh-scorecalc/tree/190bed715a3589601f314b3c8a50fb0fb147c121的数学模块

    我还在scoring 变量中包含了当前在此计算中使用的中值和衰减值。

    要使用它,请使用 VALUE_AT_QUANTILE 函数来获取达到某个百分比所需的值(因此要查看 Time To Interactive 的第 90 个百分位数的值,您将使用 VALUE_AT_QUANTILE(7300, 2900, 0.9);(取中位数(7300 ) 并在 scoring 变量中从 TTI 衰减 (2900),然后输入所需的百分位数作为小数 (90 -> 0.9))。

    QUANTILE_AT_VALUE 函数类似,它执行相反的操作(显示特定值将落在的百分位数)。例如。如果您想查看第一个 CPU 空闲时间 3200 的百分位数,您可以使用QUANTILE_AT_VALUE(6500, 2900, 3200)

    无论如何,我已经有点偏离了切线,但希望上面和下面的内容能让比我更聪明的人提供解决问题所需的信息(我已经在weights 变量中包含了每个项目的权重)。

    const scoring = {
      FCP: {median: 4000, falloff: 2000, name: 'First Contentful Paint'},
      FMP: {median: 4000, falloff: 2000, name: 'First Meaningful Paint'},
      SI: {median: 5800, falloff: 2900, name: 'Speed Index'},
      TTI: {median: 7300, falloff: 2900, name: 'Time to Interactive'},
      FCI: {median: 6500, falloff: 2900, name: 'First CPU Idle'},
      TBT: {median: 600, falloff: 200, name: 'Total Blocking Time'}, // mostly uncalibrated
      LCP: {median: 4000, falloff: 2000, name: 'Largest Contentful Paint'},
      CLS: {median: 0.25, falloff: 0.054, name: 'Cumulative Layout Shift', units: 'unitless'},
    };
    
    const weights = {
    FCP: 0.15,
    SI:  0.15,
    LCP: 0.25,
    TTI: 0.15,
    TBT: 0.25,
    CLS: 0.05
    };
    
    
    
    function internalErf_(x) {
      // erf(-x) = -erf(x);
      var sign = x < 0 ? -1 : 1;
      x = Math.abs(x);
    
      var a1 = 0.254829592;
      var a2 = -0.284496736;
      var a3 = 1.421413741;
      var a4 = -1.453152027;
      var a5 = 1.061405429;
      var p = 0.3275911;
      var t = 1 / (1 + p * x);
      var y = t * (a1 + t * (a2 + t * (a3 + t * (a4 + t * a5))));
      return sign * (1 - y * Math.exp(-x * x));
    }
    
    function internalErfInv_(x) {
      // erfinv(-x) = -erfinv(x);
      var sign = x < 0 ? -1 : 1;
      var a = 0.147;
    
      var log1x = Math.log(1 - x*x);
      var p1 = 2 / (Math.PI * a) + log1x / 2;
      var sqrtP1Log = Math.sqrt(p1 * p1 - (log1x / a));
      return sign * Math.sqrt(sqrtP1Log - p1);
    }
    
    function VALUE_AT_QUANTILE(median, falloff, quantile) {
      var location = Math.log(median);
      var logRatio = Math.log(falloff / median);
      var shape = Math.sqrt(1 - 3 * logRatio - Math.sqrt((logRatio - 3) * (logRatio - 3) - 8)) / 2;
    
      return Math.exp(location + shape * Math.SQRT2 * internalErfInv_(1 - 2 * quantile));
    }
    
    
    function QUANTILE_AT_VALUE(median, falloff, value) {
      var location = Math.log(median);
    
      var logRatio = Math.log(falloff / median);
      var shape = Math.sqrt(1 - 3 * logRatio - Math.sqrt((logRatio - 3) * (logRatio - 3) - 8)) / 2;
    
      var standardizedX = (Math.log(value) - location) / (Math.SQRT2 * shape);
      return (1 - internalErf_(standardizedX)) / 2;
    }
    
    console.log("Time To Interactive (TTI) 90th Percentile Time:", VALUE_AT_QUANTILE(7300, 2900, 0.9).toFixed(0));
    console.log("First CPU Idle time of 3200 score / percentile:", (QUANTILE_AT_VALUE(6500, 2900, 3200).toFixed(3)) * 100);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 2020-09-09
      • 2016-12-24
      • 2019-07-09
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多