Wprowadzenie
Ten dokument jest przeznaczony dla programistów, którzy chcą pisać aplikacje, które mogą współpracować z interfejsem PageSpeed Insights API.
PageSpeed Insights to narzędzie, które raportuje rzeczywistą wydajność strony na urządzeniach mobilnych i komputerach oraz sugeruje, jak można ją ulepszyć, aby pomóc deweloperom w optymalizacji stron internetowych. Do automatycznego generowania wyniku szybkości, wyniku optymalizacji i sugestii PageSpeed możesz użyć interfejsu PageSpeed Insights API.
Zanim rozpoczniesz
Załóż konto Google
Musisz mieć konto Google i uzyskać klucz interfejsu API, który umożliwi Google identyfikację Twojej aplikacji. (Patrz niżej).
Zapoznaj się z PageSpeed
Jeśli nie znasz PageSpeed, zapoznaj się ze sprawdzonymi metodami dotyczącymi wydajności witryny.
Dowiedz się, jak zidentyfikować aplikację w Google
Aplikacja musi się identyfikować za każdym razem, gdy wysyła żądanie do interfejsu PageSpeed Insights API, dołączając do każdego żądania klucz interfejsu API.
Uzyskiwanie i używanie klucza interfejsu API
Kup kluczMożesz też utworzyć konto na stronie Dane logowania.
Gdy uzyskasz klucz interfejsu API, aplikacja może dołączać parametr zapytania
key=yourAPIKey
do wszystkich adresów URL żądań.
Klucz interfejsu API można bezpiecznie umieszczać w adresach URL, więc nie trzeba go kodować.
Informacje ogólne o interfejsie PageSpeed Insights API
Wyniki zwracane przez interfejs PageSpeed Insights API zawierają następujące typy informacji:
- Wczytywanie
- Sekcja Sposób ładowania zawiera ogólną kategorię szybkości (SZYBKA, ŚREDNIA lub POWOLNA) oraz rozkłady kategorii.
- Statystyki strony
- Sekcja Statystyki strony zawiera przydatne wyniki statystyczne, takie jak wymagana liczba cykli wymiany danych i łączna liczba bajtów. Informuje, jeśli strona może przyspieszyć działanie po zmianie wyglądu i funkcji.
- Wynik optymalizacji
- Wynik optymalizacji PageSpeed (0–100) wskazuje, jak dobrze zoptymalizowana jest strona. Wysoki wynik oznacza, że niewiele można poprawić, a niski wynik oznacza, że można jeszcze poprawić.
- Reguła
- PageSpeed analizuje strony internetowe za pomocą reguł. Każda reguła PageSpeed jest oparta na ogólnych zasadach dotyczących wydajności stron internetowych, takich jak buforowanie zasobów, rozmiar przesyłanych i pobieranych danych oraz czas obiegu serwera klienta. Reguły PageSpeed generują wyniki i wpływ reguł, co opisano poniżej.
- Wynik reguły
- Wynik reguły to sugestia generowana przez regułę, która – po zaimplementowaniu – przyspieszy działanie strony i zwiększy jej wynik w PageSpeed. Jeśli na przykład zasób skompresowany jest udostępniany bez kompresji, reguła Włącz kompresję PageSpeed wygeneruje wynik sugerujący, że programista powinien włączyć kompresję tego zasobu.
- Wpływ reguły
- Każda reguła PageSpeed generuje liczbę wpływu (nieograniczoną wartość zmiennoprzecinkową), która wskazuje na wagę lub priorytet wdrożenia sugestii dotyczących reguły w porównaniu z innymi regułami. Jeśli na przykład włączenie kompresji pozwoli zaoszczędzić 1 MB, podczas gdy optymalizacja obrazów pozwoli zaoszczędzić 500 KB, reguła „Włącz kompresję” będzie miała dwukrotnie większy wpływ niż reguła „Optymalizuj obrazy”. Wpływ równy 0 oznacza, że nie ma żadnych sugestii dotyczących poprawy danej reguły.
Wywoływanie interfejsu API
Aby wywołać interfejs API, wywołaj metodę runPagespeed
, podając w ciągu zapytania adres URL, klucz API i inne parametry. Więcej informacji znajdziesz w dokumentach Dokumentacja interfejsu API.
Przykładowe wywołania interfejsu API
Z poziomu wiersza poleceń
Interfejs PageSpeed Insights API możesz wywołać z poziomu wiersza poleceń systemu Linux/UNIX za pomocą programu takiego jak curl
.
W tym przykładzie korzystamy z tego podejścia, aby pobrać wyniki PageSpeed dla adresu URL https://developers.google.com/speed/pagespeed/insights/. Wynik PageSpeed, statystyki strony i wyniki sformatowane przez PageSpeed są zwracane w formacie danych JSON.
Sformatowane wyniki są powiązane z identyfikatorami reguł (np. AvoidBadRequests
lub MinifyJavaScript
) i zawierają wynik oraz wpływ tej reguły, a także sugestie wygenerowane przez regułę, które po wprowadzeniu przyspieszą wczytywanie strony. Więcej informacji o polach odpowiedzi JSON znajdziesz w dokumentacji interfejsu PageSpeed Insights API.
Prośba:
$ curl 'https://www.googleapis.com/pagespeedonline/v4/runPagespeed?url=https://developers.google.com/speed/pagespeed/insights/&strategy=mobile&key=yourAPIKey'
Odpowiedź:
{ "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 } }
Z JavaScriptu
Interfejs API PageSpeed Insights możesz wywoływać z JavaScriptu w przeglądarce, używając parametru zapytania callback
i funkcji wywołania zwrotnego, aby generować wyniki w formacie JSON-P. Dzięki temu możesz pisać rozbudowane aplikacje wyświetlające dane PageSpeed bez konieczności pisania kodu po stronie serwera.
W tym przykładzie zastosowano to podejście do wyświetlania wyników PageSpeed i innych informacji dotyczących adresu URL https://developers.google.com/speed/pagespeed/insights/. W tym przykładzie wykorzystano też Google Chart Tools do wizualizacji informacji generowanych przez interfejs PageSpeed Insights API.
Najpierw podaj klucz interfejsu API Google (dowiedz się więcej o kluczach interfejsu API):
<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>
Następnie pobierz wyniki PageSpeed z interfejsu PageSpeed Insights API:
<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>
Używając powyższego kodu do pobierania wyników z interfejsu PageSpeed Insights API, możemy teraz wyświetlać w przeglądarce użytkownika interesujące informacje zgodnie z poniższymi przykładami.
Przykład 1. Wyświetlanie najważniejszych sugestii PageSpeed
W tym przykładzie wyświetlane są nazwy najważniejszych sugestii PageSpeed dotyczących analizowanej strony w postaci nieuporządkowanej listy. Na przykład:
- Wykorzystaj pamięć podręczną przeglądarki
- Wstrzymaj analizowanie kodu JavaScript
- Zmniejsz HTML
- Zmniejsz JavaScript
Uwaga: dane potrzebne do wyświetlenia pełnych wyników w PageSpeed są dostarczane przez interfejs PageSpeed Insights API, ale aby zachować prostotę, nie wykorzystaliśmy tu wszystkich danych.
<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>
Przykład 2. Wyświetlanie wykresu kołowego z podziałem rozmiaru zasobów
Ten przykład przedstawia wykres kołowy przedstawiający podział rozmiaru zasobów na stronie analizowanej. Na przykład:
<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>
Film demonstracyjny
Prezentacja PageSpeed Insights API na konferencji Google I/O BootCamp 2011.