CINXE.COM
About PageSpeed Insights | Google for Developers
<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="Google for Developers"> <meta property="og:type" content="website"><meta name="theme-color" content="#1a73e8"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/developers/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined&display=block"><link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/css/app.css"> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/favicon-new.png"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/touchicon-180-new.png"><link rel="canonical" href="https://developers.google.com/speed/docs/insights/v5/about"><link rel="search" type="application/opensearchdescription+xml" title="Google for Developers" href="https://developers.google.com/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://developers.google.com/speed/docs/insights/v5/about" /><link rel="alternate" hreflang="x-default" href="https://developers.google.com/speed/docs/insights/v5/about" /><link rel="alternate" hreflang="ar" href="https://developers.google.com/speed/docs/insights/v5/about?hl=ar" /><link rel="alternate" hreflang="bn" href="https://developers.google.com/speed/docs/insights/v5/about?hl=bn" /><link rel="alternate" hreflang="zh-Hans" href="https://developers.google.com/speed/docs/insights/v5/about?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant" href="https://developers.google.com/speed/docs/insights/v5/about?hl=zh-tw" /><link rel="alternate" hreflang="fa" href="https://developers.google.com/speed/docs/insights/v5/about?hl=fa" /><link rel="alternate" hreflang="fr" href="https://developers.google.com/speed/docs/insights/v5/about?hl=fr" /><link rel="alternate" hreflang="de" href="https://developers.google.com/speed/docs/insights/v5/about?hl=de" /><link rel="alternate" hreflang="he" href="https://developers.google.com/speed/docs/insights/v5/about?hl=he" /><link rel="alternate" hreflang="hi" href="https://developers.google.com/speed/docs/insights/v5/about?hl=hi" /><link rel="alternate" hreflang="id" href="https://developers.google.com/speed/docs/insights/v5/about?hl=id" /><link rel="alternate" hreflang="it" href="https://developers.google.com/speed/docs/insights/v5/about?hl=it" /><link rel="alternate" hreflang="ja" href="https://developers.google.com/speed/docs/insights/v5/about?hl=ja" /><link rel="alternate" hreflang="ko" href="https://developers.google.com/speed/docs/insights/v5/about?hl=ko" /><link rel="alternate" hreflang="pl" href="https://developers.google.com/speed/docs/insights/v5/about?hl=pl" /><link rel="alternate" hreflang="pt-BR" href="https://developers.google.com/speed/docs/insights/v5/about?hl=pt-br" /><link rel="alternate" hreflang="ru" href="https://developers.google.com/speed/docs/insights/v5/about?hl=ru" /><link rel="alternate" hreflang="es" href="https://developers.google.com/speed/docs/insights/v5/about?hl=es" /><link rel="alternate" hreflang="es-419" href="https://developers.google.com/speed/docs/insights/v5/about?hl=es-419" /><link rel="alternate" hreflang="th" href="https://developers.google.com/speed/docs/insights/v5/about?hl=th" /><link rel="alternate" hreflang="tr" href="https://developers.google.com/speed/docs/insights/v5/about?hl=tr" /><link rel="alternate" hreflang="vi" href="https://developers.google.com/speed/docs/insights/v5/about?hl=vi" /><title>About PageSpeed Insights | Google for Developers</title> <meta property="og:title" content="About PageSpeed Insights | Google for Developers"><meta property="og:url" content="https://developers.google.com/speed/docs/insights/v5/about"><meta property="og:image" content="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/opengraph/google-blue.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="675"><meta property="og:locale" content="en"><meta name="twitter:card" content="summary_large_image"><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "About PageSpeed Insights" } </script><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": "Insights", "item": "https://developers.google.com/speed/pagespeed/insights" },{ "@type": "ListItem", "position": 2, "name": "About PageSpeed Insights", "item": "https://developers.google.com/speed/docs/insights/v5/about" }] } </script> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="page" theme="google-blue" type="article" layout="docs" concierge='closed' display-toc pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <section class="devsite-wrapper"> <devsite-cookie-notification-bar></devsite-cookie-notification-bar><devsite-header role="banner"> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <a href="https://developers.google.com/speed/pagespeed/insights"> <div class="devsite-product-logo-container" size="medium" > <picture> <img class="devsite-product-logo" alt="PageSpeed Insights" src="https://www.gstatic.com/images/icons/material/product/2x/pagespeed_64dp.png" srcset=" https://www.gstatic.com/images/icons/material/product/2x/pagespeed_64dp.png" sizes="64px" loading="lazy" > </picture> </div> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> <a href="https://developers.google.com/speed/pagespeed/insights" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="PageSpeed Insights" > PageSpeed Insights </a> </li> </ul> </span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> <devsite-tabs class="upper-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Upper tabs"> <tab > <a href="https://developers.google.com/speed/pagespeed/insights" track-metadata-eventdetail="https://developers.google.com/speed/pagespeed/insights" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - home" track-metadata-module="primary nav" data-category="home" data-label="navTopMenu" track-name="home" data-action="tabClick" > HOME </a> </tab> <tab class="devsite-active"> <a href="https://developers.google.com/speed/docs/insights/v5/about" track-metadata-eventdetail="https://developers.google.com/speed/docs/insights/v5/about" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - docs" track-metadata-module="primary nav" aria-label="DOCS, selected" data-category="guide" data-label="navTopMenu" track-name="docs" data-action="tabClick" > DOCS </a> </tab> </nav> </devsite-tabs> </div> <devsite-search enable-signin enable-search enable-suggestions enable-query-completion project-name="PageSpeed Insights" tenant-name="Google for Developers" project-scope="/speed/pagespeed/insights" url-scoped="https://developers.google.com/s/results/speed/pagespeed/insights" > <form class="devsite-search-form" action="https://developers.google.com/s/results" method="GET"> <div class="devsite-search-container"> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value="" > <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"> <kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es" >Español</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> <devsite-user enable-profiles fp-auth id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section devsite-header-no-lower-tabs "> <div class="devsite-header-background"> <div class="devsite-product-id-row" > <div class="devsite-product-description-row"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> <a href="https://developers.google.com/speed/docs/insights/v5/about" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Lower Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="" > Make your web pages fast on all devices </a> </li> </ul> </div> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars > <div class="devsite-book-nav-filter" > <span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <a href="https://developers.google.com/speed/pagespeed/insights"> <div class="devsite-product-logo-container" size="medium" > <picture> <img class="devsite-product-logo" alt="PageSpeed Insights" src="https://www.gstatic.com/images/icons/material/product/2x/pagespeed_64dp.png" srcset=" https://www.gstatic.com/images/icons/material/product/2x/pagespeed_64dp.png" sizes="64px" loading="lazy" > </picture> </div> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> <a href="https://developers.google.com/speed/pagespeed/insights" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="PageSpeed Insights" > PageSpeed Insights </a> </li> </ul> </span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"> <a href="https://developers.google.com/speed/pagespeed/insights" class="devsite-nav-title gc-analytics-event " data-category="home" data-label="navTopMenu" track-name="home" data-action="tabClick" data-category="Site-Wide Custom Events" data-label="Responsive Tab: HOME" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > HOME </span> </a> </li> <li class="devsite-nav-item"> <a href="/speed/docs/insights/v5/about" class="devsite-nav-title gc-analytics-event devsite-nav-has-children devsite-nav-active" data-category="guide" data-label="navTopMenu" track-name="docs" data-action="tabClick" data-category="Site-Wide Custom Events" data-label="Responsive Tab: DOCS" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > DOCS </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="_book"> <li class="devsite-nav-item"><a href="/speed/docs/insights/v5/about" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /speed/docs/insights/v5/about" track-type="bookNav" track-name="click" track-metadata-eventdetail="/speed/docs/insights/v5/about" ><span class="devsite-nav-text" tooltip>About PageSpeed Insights</span></a></li> <li class="devsite-nav-item"><a href="/speed/docs/insights/languages" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /speed/docs/insights/languages" track-type="bookNav" track-name="click" track-metadata-eventdetail="/speed/docs/insights/languages" ><span class="devsite-nav-text" tooltip>Languages</span></a></li> <li class="devsite-nav-item"><a href="/speed/docs/insights/release_notes" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /speed/docs/insights/release_notes" track-type="bookNav" track-name="click" track-metadata-eventdetail="/speed/docs/insights/release_notes" ><span class="devsite-nav-text" tooltip>Release Notes</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>PageSpeed API</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/speed/docs/insights/v5/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /speed/docs/insights/v5/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/speed/docs/insights/v5/get-started" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/speed/docs/insights/rest/v5/pagespeedapi/runpagespeed" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /speed/docs/insights/rest/v5/pagespeedapi/runpagespeed" track-type="bookNav" track-name="click" track-metadata-eventdetail="/speed/docs/insights/rest/v5/pagespeedapi/runpagespeed" ><span class="devsite-nav-text" tooltip>API Reference</span></a></li><li class="devsite-nav-item"><a href="/speed/docs/insights/libraries" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /speed/docs/insights/libraries" track-type="bookNav" track-name="click" track-metadata-eventdetail="/speed/docs/insights/libraries" ><span class="devsite-nav-text" tooltip>Client Libraries</span></a></li></ul></li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" class="devsite-main-content" has-book-nav > <devsite-content> <article class="devsite-article"><style> /* Styles inlined from /speed/styles/local.css */ @import url("//fonts.googleapis.com/css?family=Open+Sans:400,600,700"); #gc-content { width: 960px; } #gc-content, #gc-content h1, #gc-content h2, #gc-content h3, #gc-content h4 { font-family: 'Open Sans'; } #gc-content a { text-decoration: none; } #gc-content a:hover { text-decoration: underline; } #gc-content article h2 { border-bottom: 0; } #gc-content section header h2 { border-bottom: none; font-size: 28px; font-weight: normal; margin: 0 0 10px; line-height: 120%; } #gc-content section p { text-align: justify; } #gc-content hr { visibility: hidden; } #gc-content hr.drop-shadow { border: 0; background: transparent; border-radius: 350px / 20px; -moz-border-radius: 350px / 20px; -webkit-border-radius: 350px / 20px; box-shadow: 0px 0px 15px 10px #eee; -moz-box-shadow: 0px 0px 15px 10px #eee; -webkit-box-shadow: 0px 0px 15px 10px #eee; clear: both; height: 30px; margin-left: 10%; position: relative; top: -46px; width: 80%; visibility: visible; z-index: 1; } #gc-content .carousel .button.page-speed-grid { bottom: 22px; right: 39px; line-height: 54px; min-height: 54px; height: 54px; } /* homepage features */ #gc-content .features { margin-top: 40px; } #gc-content .features header h2 { font-size: 18px; font-weight: bold; font-weight: 600; line-height: 28px; border-bottom: 1px solid #ccc; margin-bottom: 18px; } #gc-content .features .feature { min-height: 100px; width: 40%; } #gc-content .features .feature header { font-weight: bold; } #gc-content .pagespeed-insights, #gc-content .pagespeed-extensions, #gc-content .pagespeed-report, #gc-content .pagespeed-mod, #gc-content .pagespeed-ngx, #gc-content .pagespeed-psol, #gc-content .pagespeed-service, #gc-content .dns, #gc-content .libraries, #gc-content .spdy, #gc-content .webp, #gc-content .protocols-standards, #gc-content .best-practices { background-position: left top; background-repeat: no-repeat; padding-left: 90px; } #gc-content .pagespeed-insights { background-image: url(http://www.google.com/images/icons/product/pagespeed-80.png); float: left; } #gc-content .pagespeed-extensions { background-image: url(/speed/images/chrome-75.png); float: right; } #gc-content .pagespeed-service { background-image: url(http://www.google.com/images/icons/product/pagespeed-80.png); float: left; } #gc-content .pagespeed-mod { background-image: url(http://www.google.com/images/icons/product/pagespeed-80.png); float: right; } #gc-content .pagespeed-ngx { background-image: url(http://www.google.com/images/icons/product/pagespeed-80.png); float: left; } #gc-content .pagespeed-psol { background-image: url(http://www.google.com/images/icons/product/pagespeed-80.png); float: right; } #gc-content .dns { background-image: url(/speed/images/dns-75.png); float: left; } #gc-content .libraries { background-image: url(/speed/images/libraries-75.png); float: right; } #gc-content .webp { background-image: url(/speed/images/webp-75.png); float: right; } #gc-content .spdy { background-image: url(/speed/images/docs-75.png); float: left; } #gc-content .protocols-standards { background-image: url(/speed/images/docs-75.png); float: right; } #gc-content .best-practices { background-image: url(/speed/images/docs-75.png); float: left; } #gc-content .banner header.light-header { font-weight: normal; } #feature-list { margin: 0 auto; } #home-nav-list { margin: 0 auto; width: 360px; } /* story (content) styles */ #gc-content .story { position: relative; } /* story title (hero) section */ #gc-content .story .hero { background: #fff; min-height: 150px; -padding: 16px 0 0 0; position: relative; z-index: 2; } #gc-content .story .hero-high { min-height: 175px; } #gc-content .story .hero-low { min-height: 120px; } #gc-content .story .hero h1.title { font-size: 36px; font-weight: normal; margin: 0 0 10px; line-height: 120%; } #gc-content .story .hero summary { color: #666; } /* in page nav box */ #gc-content nav.in-page { background: #fff; opacity: 0.5; position: absolute; padding: 0; right: 0; top: 0; transition: opacity 0.218s; -webkit-transition: opacity 0.218s; -moz-transition: opacity 0.218s; -o-transition: opacity 0.218s; } #gc-content nav.in-page:hover { opacity: 1.0; -webkit-transition: opacity 0.218s; -moz-transition: opacity 0.218s; -o-transition: opacity 0.218s; transition: opacity 0.218s; } #gc-content nav.in-page header { font-size: 16px; font-weight: normal; color: #222; line-height: 24px; margin-bottom: 6px; } #gc-content nav.in-page ul { margin-bottom: 6px; padding-left: 0; } #gc-content nav.in-page ul, #gc-content nav.in-page ol { list-style: none; } #gc-content nav.in-page li { line-height: 17px; margin-left: -6px; } #gc-content nav.in-page li a { cursor: default; display: block; font-size: 13px; line-height: 29px; padding-left: 6px; text-decoration: none; } #gc-content nav.in-page li a, #gc-content nav.in-page li a:visited { color: #333; } #gc-content nav.in-page li a:hover { background-color: #eee; } /* main story content styles */ #gc-content .story section { margin-top: 25px; } #gc-content .story .first-section { margin-top: -15px; } #gc-content .story section header h2 { font-size: 28px; font-weight: normal; line-height: 120%; margin: 0 0 10px; } #gc-content .story section .learn-more:after { content: "»"; padding-left: 3px; } /* figures */ #gc-content figure { margin-left: auto; margin-right: auto; display: block; } #gc-content .iframe-border { border: 1px solid rgba(0, 0, 0, 0.2); -webkit-box-shadow: 0px 2px 4px rgba(0,0,0,0.2); -moz-box-shadow: 0px 2px 4px rgba(0,0,0,0.2); box-shadow: 0 2px 4px rgba(0,0,0,0.2); line-height: 0; } #gc-content figure img { border: 1px solid rgba(0, 0, 0, 0.2); margin: 0 0 6px; -webkit-box-shadow: 0px 2px 4px rgba(0,0,0,0.2); -moz-box-shadow: 0px 2px 4px rgba(0,0,0,0.2); box-shadow: 0 2px 4px rgba(0,0,0,0.2); } #gc-content figure img.plain { border: 0; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } #gc-content figure figcaption { font-style: italic; color: #777; text-align: left; } #gc-content figure figcaption em { font-style: normal; } /* left aligned */ #gc-content figure.inline { float: left; border: 0; margin: 0 44px 22px 0; } /* right aligned */ #gc-content figure.inline.alt { float: right; border: 0; margin: 0 0 22px 44px; } /* Clearfix solution credit to Nicolas Gallagher */ /* http://nicolasgallagher.com/micro-clearfix-hack/ */ /* For modern browsers */ .cf:before, .cf:after { content: ""; display: table; } .cf:after { clear: both; } /* For IE 6/7 (trigger hasLayout) */ .cf { zoom: 1; } .experiment-screenshot { margin-top: 30px; margin-bottom: 30px; padding: 0px; -moz-box-shadow: 0px 0px 20px #000; -webkit-box-shadow: 0px 0px 20px #000; box-shadow: 0px 0px 20px #000; border: 1px solid #BBB } /* Redesign fixes (backwards-compatible) */ .slim #gc-content { width: 100%; } .slim #gc-content .features header h2 { border-bottom: 0; } .slim #gc-content .features .feature { width: 37%; } .slim #gc-content .pagespeed-insights, .slim #gc-content .pagespeed-extensions, .slim #gc-content .pagespeed-report, .slim #gc-content .pagespeed-mod, .slim #gc-content .pagespeed-ngx, .slim #gc-content .pagespeed-psol, .slim #gc-content .pagespeed-service, .slim #gc-content .dns, .slim #gc-content .libraries, .slim #gc-content .spdy, .slim #gc-content .webp, .slim #gc-content .protocols-standards, .slim #gc-content .best-practices { background-position: left top; background-repeat: no-repeat; padding-left: 11%; } </style> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://developers.google.com/" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="" > Home </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/products" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="" > Products </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/speed" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="3" track-type="globalNav" track-name="breadcrumb" track-metadata-position="3" track-metadata-eventdetail="Make the Web Faster" > Make the Web Faster </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/speed/pagespeed/insights" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="4" track-type="globalNav" track-name="breadcrumb" track-metadata-position="4" track-metadata-eventdetail="PageSpeed Insights" > Insights </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/speed/docs/insights/v5/about" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="5" track-type="globalNav" track-name="breadcrumb" track-metadata-position="5" track-metadata-eventdetail="" > DOCS </a> </li> </ul> <devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <h1 class="devsite-page-title" tabindex="-1"> About PageSpeed Insights </h1> <devsite-feature-tooltip ack-key="AckCollectionsBookmarkTooltipDismiss" analytics-category="Site-Wide Custom Events" analytics-action-show="Callout Profile displayed" analytics-action-close="Callout Profile dismissed" analytics-label="Create Collection Callout" class="devsite-page-bookmark-tooltip nocontent" dismiss-button="true" id="devsite-collections-dropdown" dismiss-button-text="Dismiss" close-button-text="Got it"> <devsite-bookmark></devsite-bookmark> <span slot="popout-heading"> Stay organized with collections </span> <span slot="popout-contents"> Save and categorize content based on your preferences. </span> </devsite-feature-tooltip> <div class="devsite-page-title-meta"><devsite-view-release-notes></devsite-view-release-notes></div> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded > </devsite-toc> <div class="devsite-article-body clearfix "> <p> PageSpeed Insights (PSI) reports on the user experience of a page on both mobile and desktop devices, and provides suggestions on how that page may be improved. </p> <p> PSI provides both lab and field data about a page. Lab data is useful for debugging issues, as it is collected in a controlled environment. However, it may not capture real-world bottlenecks. Field data is useful for capturing true, real-world user experience - but has a more limited set of metrics. See <a href="/web/fundamentals/performance/speed-tools">How To Think About Speed Tools</a> for more information on the two types of data. </p> <h2 id="crux" data-text="Real-user experience data" tabindex="-1">Real-user experience data</h2> <p> Real-user experience data in PSI is powered by the <a href="/web/tools/chrome-user-experience-report">Chrome User Experience Report</a> (CrUX) dataset. PSI reports real users' <a href="https://web.dev/articles/fcp">First Contentful Paint</a> (FCP), <a href="https://web.dev/articles/inp">Interaction to Next Paint</a> (INP), <a href=https://web.dev/articles/lcp>Largest Contentful Paint</a> (LCP), and <a href=https://web.dev/articles/cls>Cumulative Layout Shift</a> (CLS) experiences over the previous 28-day collection period. PSI also reports experiences for the experimental metric <a href="https://web.dev/articles/ttfb">Time to First Byte</a> (TTFB). </p> <p> In order to show user experience data for a given page, there must be sufficient data for it to be included in the CrUX dataset. A page might not have sufficient data if it has been recently published or has too few samples from real users. When this happens, PSI will fall back to origin-level granularity, which encompasses all user experiences on all pages of the website. Sometimes the origin may also have insufficient data, in which case PSI will be unable to show any real-user experience data. </p> <h3 id="categories" data-text="Assessing quality of experiences" tabindex="-1">Assessing quality of experiences</h3> <p> PSI classifies the quality of user experiences into three buckets: Good, Needs Improvement, or Poor. PSI sets the following thresholds in alignment with the <a href="https://web.dev/articles/vitals">Web Vitals</a> initiative: </p> <table> <tr> <th></th> <th>Good</th> <th>Needs Improvement</th> <th>Poor</th> </tr> <tr> <td>FCP</td> <td>[0, 1800ms]</td> <td>(1800ms, 3000ms]</td> <td>over 3000ms</td> </tr> <tr> <td>LCP</td> <td>[0, 2500ms]</td> <td>(2500ms, 4000ms]</td> <td>over 4000ms</td> </tr> <tr> <td>CLS</td> <td>[0, 0.1]</td> <td>(0.1, 0.25]</td> <td>over 0.25</td> </tr> <tr> <td>INP</td> <td>[0, 200ms]</td> <td>(200ms, 500ms]</td> <td>over 500ms</td> </tr> <tr> <td>TTFB (experimental)</td> <td>[0, 800ms]</td> <td>(800ms, 1800ms]</td> <td>over 1800ms</td> </tr> </table> <h3 id="distribution" data-text="Distribution and selected metric values" tabindex="-1">Distribution and selected metric values</h3> <p> PSI presents a distribution of these metrics so that developers can understand the range of experiences for that page or origin. This distribution is split into three categories: Good, Needs Improvement, and Poor, which are represented by green, amber, and red bars. For example, seeing 11% within LCP's amber bar indicates that 11% of all observed LCP values fall between 2500ms and 4000ms. </p> <figure> <img src="/static/speed/docs/insights/images/v5/metric_distribution.jpeg" alt="Screenshot of the distribution of real-user LCP experiences" class="screenshot" style="display: block; margin: 0 auto;" width="464" height="227"> </figure> <p> Above the distribution bars, PSI reports the 75th percentile for all metrics. The 75th percentile is <a href="#why-is-the-75th-percentile-chosen-for-all-metrics">selected</a> so that developers can understand the most frustrating user experiences on their site. These field metric values are classified as good/needs improvement/poor by applying the same thresholds shown above. </p> <h3 id="field-data-label" data-text="Core Web Vitals" tabindex="-1">Core Web Vitals</h3> <p> Core Web Vitals are a common set of performance signals critical to all web experiences. The Core Web Vitals metrics are INP, LCP, and CLS, and they may be aggregated at either the page or origin level. For aggregations with sufficient data in all three metrics, the aggregation passes the Core Web Vitals assessment if the 75th percentiles of all three metrics are Good. Otherwise, the aggregation does not pass the assessment. If the aggregation has insufficient data for INP, then it will pass the assessment if both the 75th percentiles of LCP and CLS are Good. If either LCP or CLS have insufficient data, the page or origin-level aggregation cannot be assessed. </p> <h3 id="differences" data-text="Differences between Field Data in PSI and CrUX" tabindex="-1">Differences between Field Data in PSI and CrUX</h3> <p> The difference between the field data in PSI versus the <a href="https://developer.chrome.com/docs/crux/guides/bigquery">CrUX dataset on BigQuery</a> is that PSI’s data is updated daily, while the BigQuery dataset is updated monthly and limited to origin-level data. Both data sources represent trailing 28-day periods. </p> <h2 id="lab" data-text="Lab diagnostics" tabindex="-1">Lab diagnostics</h2> <p> PSI uses <a href="https://developer.chrome.com/docs/lighthouse/">Lighthouse</a> to analyze the given URL in a simulated environment for the Performance, Accessibility, Best Practices, and SEO categories. </p> <h3 id="score" data-text="Score" tabindex="-1">Score</h3> <p> At the top of the section are scores for each category, determined by running Lighthouse to collect and analyze diagnostic information about the page. A score of 90 or above is considered good. 50 to 89 is a score that needs improvement, and below 50 is considered poor. </p> <h3 id="metrics" data-text="Metrics" tabindex="-1">Metrics</h3> <p> The Performance category also has the page's performance on different metrics, including: <a href="https://web.dev/articles/fcp">First Contentful Paint</a>, <a href="https://web.dev/articles/lcp">Largest Contentful Paint</a>, <a href="https://developer.chrome.com/docs/lighthouse/performance/speed-index/">Speed Index</a>, <a href="https://web.dev/articles/cls">Cumulative Layout Shift</a>, <a href="https://developer.chrome.com/docs/lighthouse/performance/interactive/">Time to Interactive</a>, and <a href="https://web.dev/articles/tbt">Total Blocking Time</a>. </p> <p>Each metric is <a href="https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/">scored</a> and labeled with a icon:</p> <ul> <li>Good is indicated with a green circle</li> <li>Needs Improvement is indicated with amber informational square</li> <li>Poor is indicated with a red warning triangle</li> </ul> <h3 id="audits" data-text="Audits" tabindex="-1">Audits</h3> <p> Within each category are audits that provide information on how to improve the page's user experience. See the <a href="https://developer.chrome.com/docs/lighthouse/">Lighthouse documentation</a> for a detailed breakdown of each category's audits. </p> <h2 id="faq" data-text="Frequently asked questions (FAQs)" tabindex="-1">Frequently asked questions (FAQs)</h2> <h3 id="what-device-and-network-conditions-does-lighthouse-use-to-simulate-a-page-load" data-text="What device and network conditions does Lighthouse use to simulate a page load?" tabindex="-1">What device and network conditions does Lighthouse use to simulate a page load?</h3> <p> Currently, Lighthouse simulates the page load conditions of a mid-tier device (Moto G4) device on a <a class="external" href="https://github.com/GoogleChrome/lighthouse/blob/master/docs/throttling.md">mobile network</a> for mobile, and an emulated-desktop with a wired connection for desktop. PageSpeed also runs in a Google datacenter that can vary based on network conditions, you can check the location that the test was by looking at the Lighthouse Report's environment block: </p> <figure> <img src="/static/speed/docs/insights/images/v5/lh_network_throttling.jpeg" alt="Screnshot of the throttling information tooltip." class="screenshot" style="display: block; margin: 0 auto;" height="128" width="302"> </figure> <p> Note: PageSpeed will report running in one of: North America, Europe, or Asia. </p> <h3 id="why-do-the-field-data-and-lab-data-sometimes-contradict-each-other" data-text="Why do the field data and lab data sometimes contradict each other?" tabindex="-1">Why do the field data and lab data sometimes contradict each other?</h3> <p> The field data is a historical report about how a particular URL has performed, and represents anonymized performance data from users in the real-world on a variety of devices and network conditions. The lab data is based on a simulated load of a page on a single device and fixed set of network conditions. As a result, the values may differ. See <a href="https://web.dev/articles/lab-and-field-data-differences">Why lab and field data can be different (and what to do about it)</a> for more info. </p> <h3 id="why-is-the-75th-percentile-chosen-for-all-metrics" data-text="Why is the 75th percentile chosen for all metrics?" tabindex="-1">Why is the 75th percentile chosen for all metrics?</h3> <p> Our goal is to make sure that pages work well for the majority of users. By focusing on 75th percentile values for our metrics, this ensures that pages provide a good user experience under the most difficult device and network conditions. See <a href="https://web.dev/articles/defining-core-web-vitals-thresholds">Defining the Core Web Vitals metrics thresholds</a> for more info. </p> <h3 id="what-is-a-good-score-for-the-lab-data" data-text="What is a good score for the lab data?" tabindex="-1">What is a good score for the lab data?</h3> <p> Any green score (90+) is considered good, but note that having good lab data does not necessarily mean real-user experiences will also be good. </p> <h3 id="why-does-the-performance-score-change-from-run-to-run-i-didn’t-change-anything-on-my-page" data-text="Why does the performance score change from run to run? I didn’t change anything on my page!" tabindex="-1">Why does the performance score change from run to run? I didn’t change anything on my page!</h3> <p> <a href="https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/#fluctuations">Variability</a> in performance measurement is introduced via a number of channels with different levels of impact. Several common sources of metric variability are local network availability, client hardware availability, and client resource contention. </p> <h3 id="why-is-the-real-user-crux-data-not-available-for-a-url-or-origin" data-text="Why is the real-user CrUX data not available for a URL or origin?" tabindex="-1">Why is the real-user CrUX data not available for a URL or origin?</h3> <p> Chrome User Experience Report aggregates real-world speed data from <a target="_blank" rel="noopener" href="https://developer.chrome.com/docs/crux/methodology">opted-in users</a> and requires that a URL must be public (<a target="_blank" rel="noopener" href="https://developer.chrome.com/docs/lighthouse/seo/is-crawlable/">crawlable and indexable</a>) and have sufficient number of distinct samples that provide a representative, anonymized view of performance of the URL or origin. </p> <h3 id="support" data-text="More questions?" tabindex="-1">More questions?</h3> <p> If you've got a question about using PageSpeed Insights that is specific and answerable, ask your question in English on <a target="_blank" rel="noopener" href="https://stackoverflow.com/questions/tagged/pagespeed-insights">Stack Overflow</a>. </p> <p> If you have general feedback or questions about PageSpeed Insights, or you want to start a general discussion, start a thread in the <a target="_blank" rel="noopener" href="https://groups.google.com/forum/#!forum/pagespeed-insights-discuss">mailing list</a>. </p> <p> If you have general questions about the Web Vitals metrics, start a thread in the <a href="https://groups.google.com/g/web-vitals-feedback">web-vitals-feedback</a> discussion group. </p> <section id="try-it"> <div class="devsite-apix"> <div class='apis-explorer' data-discovery-rest-url='https://pagespeedonline.googleapis.com/$discovery/rest?version=v5' data-method-id='pagespeedonline.pagespeedapi.runpagespeed' data-params=''></div> </div> </section> <style> .helpful--container { margin: 1em 0; position: relative; } .helpful--section { position: static; } </style> <h2 id="feedback" class="hide-from-toc" data-text="Feedback" tabindex="-1">Feedback</h2> <p>Was this page helpful?</p> <div class="helpful--container"> <section class="expandable helpful--section"> <button class="button button-primary expand-control gc-analytics-event" data-category="Helpful" data-value="1" data-label="/speed/docs/insights/v5/about" style="background-color:#f44336;"> Yes </button> <aside class="success"> Great! Thank you for the feedback. If you have a specific, answerable question about using PageSpeed Insights, ask the question in English on <a target="_blank" rel="noopener" href="https://stackoverflow.com/questions/tagged/pagespeed-insights">Stack Overflow</a>. For general questions, feedback, and discussion, start a thread in the <a target="_blank" rel="noopener" href="https://groups.google.com/forum/#!forum/pagespeed-insights-discuss">mailing list</a>. </aside> </section> <section class="expandable helpful--section"> <button class="button button-primary expand-control gc-analytics-event" data-category="Helpful" data-value="0" data-label="/speed/docs/insights/v5/about" style="position:absolute;top:0;left:70px;background-color:#f44336;"> No </button> <aside class="warning"> Sorry to hear that. If you have a specific, answerable question about using PageSpeed Insights, ask the question in English on <a target="_blank" rel="noopener" href="https://stackoverflow.com/questions/tagged/pagespeed-insights">Stack Overflow</a>. For general questions, feedback, and discussion, start a thread in the <a target="_blank" rel="noopener" href="https://groups.google.com/forum/#!forum/pagespeed-insights-discuss">mailing list</a>. </aside> </section> </div> </div> <devsite-recommendations display="in-page" hidden yield> </devsite-recommendations> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <devsite-recommendations id="recommendations-link" yield></devsite-recommendations> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://developers.google.com/site-policies">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> <p>Last updated 2024-10-21 UTC.</p> </devsite-content-footer> <devsite-notification > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-content-data-template"> [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-10-21 UTC."],[],[]] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Product Info</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/terms" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Terms of Service </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/speed/docs/insights/release_notes" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Release Notes </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Client Libraries</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/speed/docs/insights/libraries" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Libraries and Samples </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Developer consoles</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="//console.developers.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Google API Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//console.cloud.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Google Cloud Platform Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//play.google.com/apps/publish" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Google Play Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//console.firebase.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Firebase Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//console.actions.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > Actions on Google Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//cast.google.com/publish" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 6)" > Cast SDK Developer Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//chrome.google.com/webstore/developer/dashboard" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 7)" > Chrome Web Store Dashboard </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//console.home.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 8)" > Google Home Developer Console </a> </li> </ul> </li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-sites" aria-label="Other Google Developers websites"> <a href="https://developers.google.com/" class="devsite-footer-sites-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Developers Link"> <picture> <img class="devsite-footer-sites-logo" src="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/lockup-google-for-developers.svg" loading="lazy" alt="Google Developers"> </picture> </a> <ul class="devsite-footer-sites-list"> <li class="devsite-footer-sites-item"> <a href="//developer.android.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Android Link" > Android </a> </li> <li class="devsite-footer-sites-item"> <a href="//developer.chrome.com/home" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Chrome Link" > Chrome </a> </li> <li class="devsite-footer-sites-item"> <a href="//firebase.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Firebase Link" > Firebase </a> </li> <li class="devsite-footer-sites-item"> <a href="//cloud.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Cloud Platform Link" > Google Cloud Platform </a> </li> <li class="devsite-footer-sites-item"> <a href="//ai.google.dev/" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google AI Link" > Google AI </a> </li> <li class="devsite-footer-sites-item"> <a href="/products" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer All products Link" > All products </a> </li> </ul> </nav> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="/terms/site-terms" data-category="Site-Wide Custom Events" data-label="Footer Terms link" > Terms </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link" > Privacy </a> </li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"> <a class="devsite-footer-utility-link gc-analytics-event" href="#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" aria-hidden="true" > Manage cookies </a> </li> <li class="devsite-footer-utility-item devsite-footer-utility-button"> <span class="devsite-footer-utility-description">Sign up for the Google for Developers newsletter</span> <a class="devsite-footer-utility-link gc-analytics-event" href="/newsletter/subscribe" data-category="Site-Wide Custom Events" data-label="Footer Subscribe link" > Subscribe </a> </li> </ul> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es" >Español</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> <devsite-concierge data-info-panel data-ai-panel data-api-explorer-panel > </devsite-concierge> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip ></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[{"dimensions": {"dimension1": "Signed out", "dimension6": "en", "dimension5": "en", "dimension11": false, "dimension4": "PageSpeed Insights", "dimension3": false}, "gaid": "UA-24532603-1", "metrics": {"ratings_count": "metric2", "ratings_value": "metric1"}, "purpose": 1}, {"dimensions": {"dimension1": "Signed out", "dimension6": "en", "dimension5": "en", "dimension11": false, "dimension4": "PageSpeed Insights", "dimension3": false}, "gaid": "UA-22137612-2", "metrics": {"ratings_count": "metric2", "ratings_value": "metric1"}, "purpose": 0}]</script> <script type="application/json" tag-management>{"at": "True", "ga4": [{"id": "G-272J68FCRF", "purpose": 1}], "ga4p": [{"id": "G-272J68FCRF", "purpose": 1}], "gtm": [], "parameters": {"internalUser": "False", "language": {"machineTranslated": "False", "requested": "en", "served": "en"}, "pageType": "article", "projectName": "PageSpeed Insights", "signedIn": "False", "tenant": "developers", "recommendations": {"sourcePage": "", "sourceType": 0, "sourceRank": 0, "sourceIdenticalDescriptions": 0, "sourceTitleWords": 0, "sourceDescriptionWords": 0, "experiment": ""}, "experiment": {"ids": ""}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <script nonce="IdLEQcMjnEPBQg2gXxBVUQh6fZGrVI"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/js/app_loader.js', '[1,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers","https://developers-dot-devsite-v2-prod.appspot.com",null,null,["/_pwa/developers/manifest.json","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/favicon-new.png","https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyAP-jjEJBzmIyKR4F-3XITp8yM9T1gEEI8","AIzaSyB6xiKGDR5O3Ak2okS4rLkauxGUG7XP0hg","developers.google.com","AIzaSyAQk0fBONSGUqCNznf6Krs82Ap1-NV6J4o","AIzaSyCCxcqdrZ_7QMeLCRY20bh_SXdAYqy70KY",null,null,null,["Cloud__enable_cloud_shell","Experiments__reqs_query_experiments","Profiles__enable_profile_collections","Cloud__enable_cloudx_experiment_ids","DevPro__enable_cloud_innovators_plus","Cloud__enable_cloud_facet_chat","EngEduTelemetry__enable_engedu_telemetry","Concierge__enable_pushui","CloudShell__cloud_code_overflow_menu","TpcFeatures__enable_mirror_tenant_redirects","MiscFeatureFlags__developers_footer_dark_image","Search__enable_ai_search_summaries_restricted","Significatio__enable_by_tenant","TpcFeatures__enable_required_headers","MiscFeatureFlags__emergency_css","Profiles__enable_page_saving","MiscFeatureFlags__enable_firebase_utm","Search__enable_ai_search_summaries","DevPro__enable_developer_subscriptions","MiscFeatureFlags__developers_footer_image","MiscFeatureFlags__enable_view_transitions","Concierge__enable_concierge_restricted","Cloud__enable_cloudx_ping","Cloud__enable_cloud_dlp_service","Profiles__enable_release_notes_notifications","Profiles__require_profile_eligibility_for_signin","Profiles__enable_dashboard_curated_recommendations","Search__enable_dynamic_content_confidential_banner","Cloud__enable_cloud_shell_fte_user_flow","CloudShell__cloud_shell_button","Cloud__enable_llm_concierge_chat","MiscFeatureFlags__enable_variable_operator","Profiles__enable_completecodelab_endpoint","Cloud__enable_legacy_calculator_redirect","Cloud__enable_free_trial_server_call","Profiles__enable_recognition_badges","Profiles__enable_complete_playlist_endpoint","Search__enable_page_map","Profiles__enable_developer_profiles_callout","Analytics__enable_clearcut_logging","Profiles__enable_public_developer_profiles","MiscFeatureFlags__enable_project_variables","BookNav__enable_tenant_cache_key","Concierge__enable_concierge","Search__enable_suggestions_from_borg","MiscFeatureFlags__enable_explain_this_code","Search__enable_ai_eligibility_checks","Profiles__enable_awarding_url"],null,null,"AIzaSyBLEMok-5suZ67qRPzx0qUtbnLmyT_kCVE","https://developerscontentserving-pa.clients6.google.com","AIzaSyCM4QpTRSqP5qI4Dvjt4OAScIN8sOUlO-k","https://developerscontentsearch-pa.clients6.google.com",1,4,null,"https://developerprofiles-pa.clients6.google.com",[1,"developers","Google for Developers","developers.google.com",null,"developers-dot-devsite-v2-prod.appspot.com",null,null,[1,1,[1],null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],[1,null,null,[1,20],"/recommendations/information"],null,null,null,[1,1,1],[1,1,null,1,1]],null,[null,null,null,null,null,null,"/images/lockup-new.svg","/images/touchicon-180-new.png",null,null,null,null,1,null,null,null,null,null,null,null,null,1,null,null,null,"/images/lockup-dark-theme-new.svg",[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[6,1,14,15,20,22,23,29,32,36],null,[[null,null,null,[3,7,10,2,39,17,4,32,24,11,12,13,34,15,25],null,null,[1,[["docType","Choose a content type",[["Tutorial",null,null,null,null,null,null,null,null,"Tutorial"],["Guide",null,null,null,null,null,null,null,null,"Guide"],["Sample",null,null,null,null,null,null,null,null,"Sample"]]],["product","Choose a product",[["Android",null,null,null,null,null,null,null,null,"Android"],["ARCore",null,null,null,null,null,null,null,null,"ARCore"],["ChromeOS",null,null,null,null,null,null,null,null,"ChromeOS"],["Firebase",null,null,null,null,null,null,null,null,"Firebase"],["Flutter",null,null,null,null,null,null,null,null,"Flutter"],["Assistant",null,null,null,null,null,null,null,null,"Google Assistant"],["GoogleCloud",null,null,null,null,null,null,null,null,"Google Cloud"],["GoogleMapsPlatform",null,null,null,null,null,null,null,null,"Google Maps Platform"],["GooglePay",null,null,null,null,null,null,null,null,"Google Pay & Google Wallet"],["GooglePlay",null,null,null,null,null,null,null,null,"Google Play"],["Tensorflow",null,null,null,null,null,null,null,null,"TensorFlow"]]],["category","Choose a topic",[["AiAndMachineLearning",null,null,null,null,null,null,null,null,"AI and Machine Learning"],["Data",null,null,null,null,null,null,null,null,"Data"],["Enterprise",null,null,null,null,null,null,null,null,"Enterprise"],["Gaming",null,null,null,null,null,null,null,null,"Gaming"],["Mobile",null,null,null,null,null,null,null,null,"Mobile"],["Web",null,null,null,null,null,null,null,null,"Web"]]]]]],[1,1],null,1],[[["UA-24532603-1"],["UA-22084204-5"],null,null,["UA-24532603-5"],null,null,[["G-272J68FCRF"],null,null,[["G-272J68FCRF",2]]],[["UA-24532603-1",2]],null,[["UA-24532603-5",2]],null,1],[[16,13],[3,2],[4,3],[1,1],[11,8],[5,4],[14,11],[13,10],[15,12],[6,5],[12,9]],[[2,2],[1,1]]],null,4,null,null,null,null,null,null,null,null,null,null,null,null,null,"developers.devsite.google"],null,"pk_live_5170syrHvgGVmSx9sBrnWtA5luvk9BwnVcvIi7HizpwauFG96WedXsuXh790rtij9AmGllqPtMLfhe2RSwD6Pn38V00uBCydV4m"]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>