【问题标题】:PageSpeed Insights API V5PageSpeed Insights API V5
【发布时间】:2019-05-07 06:48:25
【问题描述】:

我想将 Google 移动友好和桌面友好 API 与 PageSpeed Insights API V5 集成。但我无法区分审计部分。我也尝试过不同的场景,但我做不到。

如何区分 PageSpeed Insights API V5 中的通过审核诊断机会

【问题讨论】:

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


    【解决方案1】:

    以下是 GoogleChrome lighthouse 用于区分机会、诊断和通过审核的代码,您可以在下面的 github 链接中找到这些代码。

    // Opportunities
    const opportunityAudits = category.auditRefs
            .filter(audit => audit.group === 'load-opportunities' && !Util.showAsPassed(audit.result))
            .sort((auditA, auditB) => this._getWastedMs(auditB) - this._getWastedMs(auditA));
    
    // Diagnostics
    const diagnosticAudits = category.auditRefs
            .filter(audit => audit.group === 'diagnostics' && !Util.showAsPassed(audit.result))
            .sort((a, b) => {
              const scoreA = a.result.scoreDisplayMode === 'informative' ? 100 : Number(a.result.score);
              const scoreB = b.result.scoreDisplayMode === 'informative' ? 100 : Number(b.result.score);
              return scoreA - scoreB;
            });
    
    // Passed audits
    const passedAudits = category.auditRefs
            .filter(audit => (audit.group === 'load-opportunities' || audit.group === 'diagnostics') &&
                Util.showAsPassed(audit.result));
    

    参考:https://github.com/GoogleChrome/lighthouse/blob/master/lighthouse-core/report/html/renderer/performance-category-renderer.js

    在上面的代码中,Util.showAsPassed() 方法被指定如下。

    const PASS_THRESHOLD = 0.9;
    const RATINGS = {
      PASS: {label: 'pass', minScore: PASS_THRESHOLD},
      AVERAGE: {label: 'average', minScore: 0.5},
      FAIL: {label: 'fail'},
      ERROR: {label: 'error'},
    };
    
    static showAsPassed(audit) {
        switch (audit.scoreDisplayMode) {
          case 'manual':
          case 'notApplicable':
            return true;
          case 'error':
          case 'informative':
            return false;
          case 'numeric':
          case 'binary':
          default:
            return Number(audit.score) >= RATINGS.PASS.minScore;
        }
      }
    

    参考:https://github.com/GoogleChrome/lighthouse/blob/master/lighthouse-core/report/html/renderer/util.js

    谢谢

    【讨论】:

      【解决方案2】:

      ** 机会:** 响应中没有已编译的机会集,但我们可以循环通过 lighthouseResult 和对于 lighthouseReslt 中的每个 json,取出 type=opportunity 的结果,它还应该有详细信息。

      response = requests.get('https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url='+<url>+'&strategy='+<desktop or mobile>+'&key='+<api_key>)
      js = response.json()
      
      print ("Score: ",js['lighthouseResult']['categories']['performance']['score']*100)
      
      k = []
      
      for m in js['lighthouseResult'] :
      
          try :
              for i in js['lighthouseResult'][m] :
                  k.append([js['lighthouseResult'][m][i]['details'],js['lighthouseResult'][m][i]['title']])
          except :
              pass
      
      final_opportunities = []
      
      print (len(k))
      for i in k :
          if 'overallSavingsMs' in list(i[0].keys()) :
      
              print (i[1],i[0]['overallSavingsMs'])
              final_opportunities.append([i[1] , i[0]['overallSavingsMs']])
      

      审核结果可在以下位置找到: lighthouseResult.audits

      综合性能得分:response.lighthouseResult.categories.performance.score

      对于 python 实现,您可以参考以下 github repo: https://github.com/amartya-dev/PageSpeedAPI

      【讨论】:

      • 非常感谢。在使用其他逻辑之前我已经完成了。我只是尝试上面的解决方案,它也对我有用。
      猜你喜欢
      • 1970-01-01
      • 2019-04-16
      • 2016-09-04
      • 2016-12-24
      • 2019-07-09
      • 2023-02-09
      • 2015-03-20
      • 1970-01-01
      • 2019-11-17
      相关资源
      最近更新 更多