Einführung
Dieses Dokument richtet sich an Entwickler, die Anwendungen erstellen möchten, die mit der PageSpeed Insights API interagieren können.
PageSpeed Insights ist ein Tool, mit dem Sie die tatsächliche Leistung einer Seite für Mobilgeräte und Computer abrufen können. Außerdem erhalten Sie Vorschläge zur Verbesserung der Seite, um Entwickler bei der Optimierung ihrer Webseiten zu unterstützen. Mit der PageSpeed Insights API kannst du programmatisch den PageSpeed-Geschwindigkeitswert, den Optimierungsfaktor und Vorschläge generieren.
Vorbereitung
Erstellen Sie sich ein Google-Konto
Sie benötigen ein Google-Konto, um einen API-Schlüssel abzurufen und Ihre Anwendung gegenüber Google zu identifizieren. Siehe dazu unten.
Mache dich mit PageSpeed vertraut.
Wenn Sie mit PageSpeed nicht vertraut sind, lesen Sie die Best Practices für die Webleistung von PageSpeed.
So identifizieren Sie Ihre Anwendung bei Google
Ihre Anwendung muss sich jedes Mal identifizieren, wenn sie eine Anfrage an die PageSpeed Insights API sendet. Dazu muss für jede Anfrage ein API-Schlüssel eingefügt werden.
API-Schlüssel erhalten und nutzen
Schlüssel anfordernAlternativ können Sie auf der Seite "Anmeldedaten" einen Schlüssel erstellen.
Nachdem Sie einen API-Schlüssel haben, kann Ihre Anwendung den Abfrageparameter key=yourAPIKey
an alle Anfrage-URLs anhängen.
Der API-Schlüssel lässt sich sicher in URLs einbetten. Eine Codierung ist nicht notwendig.
Hintergrund der PageSpeed Insights API
Die von der PageSpeed Insights API zurückgegebenen Ergebnisse enthalten die folgenden Informationen:
- Wird geladen
- Der Bereich „Ladeerfahrung“ enthält eine Kategorie für die allgemeine Geschwindigkeit (SCHNELL, MITTELWERT oder LANGSAM) und Kategorieverteilungen.
- Seitenstatistiken
- Der Abschnitt „Seitenstatistiken“ enthält einige nützliche statistische Ergebnisse wie die erforderlichen Umläufe und die insgesamt genutzten Byte. Es zeigt an, dass die Seite möglicherweise schneller ist, wenn das Aussehen und die Funktionalität geändert werden.
- Optimierungsfaktor
- Der PageSpeed-Optimierungsfaktor (0–100) gibt an, wie gut eine Seite optimiert ist. Ein hoher Wert deutet auf wenig Verbesserungspotenzial hin, während ein niedriger Wert auf mehr Verbesserungspotenzial hinweist.
- Regel
- PageSpeed analysiert Webseiten anhand von Regeln. Jede PageSpeed-Regel basiert auf allgemeinen Prinzipien der Webseitenleistung wie Ressourcen-Caching, Daten-Upload- und -Downloadgröße und Client-Server-Umlaufzeiten. PageSpeed-Regeln generieren Regelergebnisse und Regelauswirkungen, wie unten beschrieben.
- Regelergebnis
- Ein Regelergebnis ist ein Vorschlag, der durch eine Regel generiert wird, die bei ihrer Implementierung die Seite beschleunigen und den PageSpeed-Wert für diese Seite erhöhen würde. Wenn beispielsweise eine komprimierbare Ressource unkomprimiert bereitgestellt wird, würde die PageSpeed-Regel Komprimierung aktivieren ein Ergebnis generieren, das dem Entwickler empfohlen, die Komprimierung für diese Ressource zu aktivieren.
- Auswirkung der Regel
- Jede PageSpeed-Regel generiert eine Auswirkungszahl (einen unbegrenzten Gleitkommawert), der die Wichtigkeit oder Priorität der Implementierung der Vorschläge der Regelergebnisse für die Regel im Verhältnis zu anderen Regeln angibt. Wenn beispielsweise durch die Aktivierung der Komprimierung 1 MB eingespart und durch die Optimierung der Bilder 500 KB eingespart würden, hat die Regel zum Aktivieren der Komprimierung einen doppelten Wert. Eine Auswirkung von null bedeutet, dass es keine Verbesserungsvorschläge für diese Regel gibt.
API aufrufen
Rufen Sie zum Aufrufen der API die Methode runPagespeed
auf und geben Sie die URL, den API-Schlüssel und andere Parameter im Abfragestring an. Weitere Informationen finden Sie in der API-Referenz.
Beispiele für API-Aufrufe
Über die Befehlszeile
Sie können die PageSpeed Insights API über die Linux/UNIX-Befehlszeile mit einem Programm wie curl
aufrufen.
Im folgenden Beispiel werden anhand dieses Ansatzes mobile PageSpeed-Ergebnisse für die URL https://developers.google.com/speed/pagespeed/insights/ abgerufen. Der PageSpeed-Wert, die Seitenstatistiken und die Ergebnisse im PageSpeed-Format werden im JSON-Datenformat zurückgegeben.
Formatierte Ergebnisse werden anhand von Regelkennungen wie AvoidBadRequests
oder MinifyJavaScript
verschlüsselt und enthalten den Wert und die Auswirkung für diese Regel sowie die Vorschläge, die von der Regel generiert werden und die bei ihrer Implementierung dazu führen, dass die Seite schneller geladen wird. Weitere Informationen zu den Feldern in der JSON-Antwort finden Sie in der PageSpeed Insights API-Referenz.
Anfrage
$ curl 'https://www.googleapis.com/pagespeedonline/v4/runPagespeed?url=https://developers.google.com/speed/pagespeed/insights/&strategy=mobile&key=yourAPIKey'
Antwort
{ "captchaResult": "CAPTCHA_NOT_NEEDED", "kind": "pagespeedonline#result", "id": "https://developers.google.com/speed/pagespeed/insights/", "responseCode": 200, "title": "PageSpeed Insights", "ruleGroups": { "SPEED": { "score": 99 } }, "loadingExperience": { "id": "https://developers.google.com/speed/pagespeed/insights/", "metrics": { "FIRST_CONTENTFUL_PAINT_MS": { "median": 678, "distributions": [ { "min": 0, "max": 1567, "proportion": 0.8726942914078067 }, { "min": 1567, "max": 2963, "proportion": 0.07357226585394444 }, { "min": 2963, "proportion": 0.053733442738248746 } ], "category": "FAST" }, "DOM_CONTENT_LOADED_EVENT_FIRED_MS": { "median": 559, "distributions": [ { "min": 0, "max": 2120, "proportion": 0.9287991742172268 }, { "min": 2120, "max": 4226, "proportion": 0.035877050120426655 }, { "min": 4226, "proportion": 0.0353237756623466 } ], "category": "FAST" } }, "overall_category": "FAST", "initial_url": "https://developers.google.com/speed/pagespeed/insights/" }, "pageStats": { "numberResources": 11, "numberHosts": 6, "totalRequestBytes": "1874", "numberStaticResources": 6, "htmlResponseBytes": "72494", "overTheWireResponseBytes": "324002", "cssResponseBytes": "8467", "imageResponseBytes": "5363", "javascriptResponseBytes": "841488", "otherResponseBytes": "14548", "numberJsResources": 4, "numberCssResources": 1, "numTotalRoundTrips": 13, "numRenderBlockingRoundTrips": 0 }, "formattedResults": { "locale": "en_US", "ruleResults": { "AvoidLandingPageRedirects": { "localizedRuleName": "Avoid landing page redirects", "ruleImpact": 0.0, "groups": [ "SPEED" ], "summary": { "format": "Your page has no redirects. Learn more about {{BEGIN_LINK}}avoiding landing page redirects{{END_LINK}}.", "args": [ { "type": "HYPERLINK", "key": "LINK", "value": "https://developers.google.com/speed/docs/insights/AvoidRedirects" } ] } }, "EnableGzipCompression": { "localizedRuleName": "Enable compression", "ruleImpact": 0.0, "groups": [ "SPEED" ], "summary": { "format": "You have compression enabled. Learn more about {{BEGIN_LINK}}enabling compression{{END_LINK}}.", "args": [ { "type": "HYPERLINK", "key": "LINK", "value": "https://developers.google.com/speed/docs/insights/EnableCompression" } ] } }, ... "PrioritizeVisibleContent": { "localizedRuleName": "Prioritize visible content", "ruleImpact": 0.0, "groups": [ "SPEED" ], "summary": { "format": "You have the above-the-fold content properly prioritized. Learn more about {{BEGIN_LINK}}prioritizing visible content{{END_LINK}}.", "args": [ { "type": "HYPERLINK", "key": "LINK", "value": "https://developers.google.com/speed/docs/insights/PrioritizeVisibleContent" } ] } } } }, "version": { "major": 1, "minor": 15 } }
Aus JavaScript
Sie können die PageSpeed Insights API über JavaScript im Browser aufrufen, indem Sie den Abfrageparameter callback
und eine Callback-Funktion verwenden, um JSON-P-Ergebnisse zu generieren. Auf diese Weise können Sie umfangreiche Anwendungen schreiben, die PageSpeed-Daten anzeigen, ohne serverseitigen Code schreiben zu müssen.
Im folgenden Beispiel werden PageSpeed-Ergebnisse und andere Informationen für die URL https://developers.google.com/speed/pagespeed/insights/ so dargestellt. In diesem Beispiel werden auch die Google-Diagrammtools verwendet, um die von der PageSpeed Insights API generierten Informationen zu visualisieren.
Geben Sie zuerst Ihren Google API-Schlüssel an (weitere Informationen zu API-Schlüsseln):
<script>
// Specify your actual API key here:
var API_KEY = 'yourAPIKey';
// Specify the URL you want PageSpeed results for here:
var URL_TO_GET_RESULTS_FOR = 'https://developers.google.com/speed/pagespeed/insights/';
</script>
Rufen Sie als Nächstes die PageSpeed-Ergebnisse von der PageSpeed Insights API ab:
<script>
var API_URL = 'https://www.googleapis.com/pagespeedonline/v4/runPagespeed?';
var CHART_API_URL = 'http://chart.apis.google.com/chart?';
// Object that will hold the callbacks that process results from the
// PageSpeed Insights API.
var callbacks = {}
// Invokes the PageSpeed Insights API. The response will contain
// JavaScript that invokes our callback with the PageSpeed results.
function runPagespeed() {
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
var query = [
'url=' + URL_TO_GET_RESULTS_FOR,
'callback=runPagespeedCallbacks',
'key=' + API_KEY,
].join('&');
s.src = API_URL + query;
document.head.insertBefore(s, null);
}
// Our JSONP callback. Checks for errors, then invokes our callback handlers.
function runPagespeedCallbacks(result) {
if (result.error) {
var errors = result.error.errors;
for (var i = 0, len = errors.length; i < len; ++i) {
if (errors[i].reason == 'badRequest' && API_KEY == 'yourAPIKey') {
alert('Please specify your Google API key in the API_KEY variable.');
} else {
// NOTE: your real production app should use a better
// mechanism than alert() to communicate the error to the user.
alert(errors[i].message);
}
}
return;
}
// Dispatch to each function on the callbacks object.
for (var fn in callbacks) {
var f = callbacks[fn];
if (typeof f == 'function') {
callbacks[fn](result);
}
}
}
// Invoke the callback that fetches results. Async here so we're sure
// to discover any callbacks registered below, but this can be
// synchronous in your code.
setTimeout(runPagespeed, 0);
</script>
Mithilfe des obigen Codes zum Abrufen von Ergebnissen aus der PageSpeed Insights API können wir nun mithilfe der folgenden Beispiele interessante Informationen im Browser des Nutzers anzeigen.
Beispiel 1: Top-PageSpeed-Vorschläge anzeigen
In diesem Beispiel werden die Namen der besten PageSpeed-Vorschläge für die zu analysierende Seite als ungeordnete Liste angezeigt. Beispiel:
- Browser-Caching nutzen
- JavaScript später parsen
- HTML reduzieren
- JavaScript minimieren
Hinweis: Die zur Anzeige der vollständigen PageSpeed-Ergebnisse erforderlichen Daten werden von der PageSpeed Insights API bereitgestellt. Um das Beispiel einfach zu halten, werden hier jedoch nicht alle Daten verwendet.
<script> callbacks.displayTopPageSpeedSuggestions = function(result) { var results = []; var ruleResults = result.formattedResults.ruleResults; for (var i in ruleResults) { var ruleResult = ruleResults[i]; // Don't display lower-impact suggestions. if (ruleResult.ruleImpact < 3.0) continue; results.push({name: ruleResult.localizedRuleName, impact: ruleResult.ruleImpact}); } results.sort(sortByImpact); var ul = document.createElement('ul'); for (var i = 0, len = results.length; i < len; ++i) { var r = document.createElement('li'); r.innerHTML = results[i].name; ul.insertBefore(r, null); } if (ul.hasChildNodes()) { document.body.insertBefore(ul, null); } else { var div = document.createElement('div'); div.innerHTML = 'No high impact suggestions. Good job!'; document.body.insertBefore(div, null); } }; // Helper function that sorts results in order of impact. function sortByImpact(a, b) { return b.impact - a.impact; } </script>
Beispiel 2: Kreisdiagramm der Aufschlüsselung der Ressourcengröße anzeigen
Dieses Beispiel zeigt ein Kreisdiagramm, das die Aufschlüsselung der Ressourcengröße der analysierten Seite zeigt. Beispiel:
<script> var RESOURCE_TYPE_INFO = [ {label: 'JavaScript', field: 'javascriptResponseBytes', color: 'e2192c'}, {label: 'Images', field: 'imageResponseBytes', color: 'f3ed4a'}, {label: 'CSS', field: 'cssResponseBytes', color: 'ff7008'}, {label: 'HTML', field: 'htmlResponseBytes', color: '43c121'}, {label: 'Flash', field: 'flashResponseBytes', color: 'f8ce44'}, {label: 'Text', field: 'textResponseBytes', color: 'ad6bc5'}, {label: 'Other', field: 'otherResponseBytes', color: '1051e8'}, ]; callbacks.displayResourceSizeBreakdown = function(result) { var stats = result.pageStats; var labels = []; var data = []; var colors = []; var totalBytes = 0; var largestSingleCategory = 0; for (var i = 0, len = RESOURCE_TYPE_INFO.length; i < len; ++i) { var label = RESOURCE_TYPE_INFO[i].label; var field = RESOURCE_TYPE_INFO[i].field; var color = RESOURCE_TYPE_INFO[i].color; if (field in stats) { var val = Number(stats[field]); totalBytes += val; if (val > largestSingleCategory) largestSingleCategory = val; labels.push(label); data.push(val); colors.push(color); } } // Construct the query to send to the Google Chart Tools. var query = [ 'chs=300x140', 'cht=p3', 'chts=' + ['000000', 16].join(','), 'chco=' + colors.join('|'), 'chd=t:' + data.join(','), 'chdl=' + labels.join('|'), 'chdls=000000,14', 'chp=1.6', 'chds=0,' + largestSingleCategory, ].join('&'); var i = document.createElement('img'); i.src = 'http://chart.apis.google.com/chart?' + query; document.body.insertBefore(i, null); }; </script>
Demovideo
PageSpeed Insights API-Demo auf dem Google I/O BootCamp 2011.