312 lines
37 KiB
Plaintext
312 lines
37 KiB
Plaintext
[38;5;12m [39m[38;2;255;187;0m[1m[4mAwesome Page Speed Metrics [0m[38;5;14m[1m[4m![0m[38;2;255;187;0m[1m[4mAwesome[0m[38;5;14m[1m[4m (https://awesome.re/badge.svg)[0m[38;2;255;187;0m[1m[4m (https://awesome.re)[0m
|
||
|
||
[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mMetrics to help understand page speed and user experience.[39m
|
||
|
||
[38;5;12mIf you're just getting started check out [39m[38;5;14m[1mweb.dev/metrics[0m[38;5;12m (https://web.dev/metrics/) first.[39m
|
||
|
||
[38;2;255;187;0m[4mContents[0m
|
||
|
||
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mConcepts[0m[38;5;12m (#concepts)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mLab Data (Synthetic Measurements)[0m[38;5;12m (#lab-data-synthetic-measurements)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mField Data (Real User Monitoring - RUM)[0m[38;5;12m (#field-data-real-user-monitoring---rum)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mCritical rendering path[0m[38;5;12m (#critical-rendering-path)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mLong tasks[0m[38;5;12m (#long-tasks)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mUser-centric metrics[0m[38;5;12m (#user-centric-metrics)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mRendering metrics[0m[38;5;12m (#rendering-metrics)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mFirst Contentful Paint (FCP)[0m[38;5;12m (#first-contentful-paint-fcp)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mLargest Contentful Paint (LCP)[0m[38;5;12m (#largest-contentful-paint-lcp)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mCumulative Layout Shift (CLS)[0m[38;5;12m (#cumulative-layout-shift-cls)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mVisually Complete[0m[38;5;12m (#visually-complete)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mSpeed Index[0m[38;5;12m (#speed-index)[39m
|
||
[38;5;12m - [39m[38;5;14m[1m(Hero) Element Timing[0m[38;5;12m (#hero-element-timing)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mInteractivity metrics[0m[38;5;12m (#interactivity-metrics)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mTime to Interactive (TTI)[0m[38;5;12m (#time-to-interactive-tti)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mTotal Blocking Time (TBT)[0m[38;5;12m (#total-blocking-time-tbt)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mFirst Input Delay (FID)[0m[38;5;12m (#first-input-delay-fid)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mMax Potential First Input Delay[0m[38;5;12m (#max-potential-first-input-delay)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mNetwork metrics[0m[38;5;12m (#network-metrics)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mDNS latency[0m[38;5;12m (#dns-latency)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mTCP and SSL/TLS latency[0m[38;5;12m (#tcp-and-ssltls-latency)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mTime to First Byte (TTFB)[0m[38;5;12m (#time-to-first-byte-ttfb)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mTransferred bytes[0m[38;5;12m (#transferred-bytes)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOther metrics[0m[38;5;12m (#other-metrics)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mGoogle PageSpeed Insights score[0m[38;5;12m (#google-pagespeed-insights-score)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mUser Timing[0m[38;5;12m (#user-timing)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mServer Timing[0m[38;5;12m (#server-timing)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mFrame rate[0m[38;5;12m (#frame-rate)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mDOMContentLoaded[0m[38;5;12m (#domcontentloaded)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mwindow.load[0m[38;5;12m (#windowload)[39m
|
||
|
||
|
||
|
||
[38;2;255;187;0m[4mConcepts[0m
|
||
|
||
[38;2;255;187;0m[4mLab Data (Synthetic Measurements)[0m
|
||
|
||
[38;5;12mMake a request to your page with a tool and evaluate performance. Be sure to make it realistic (e.g. by throttling network and CPU) and reduce noise (e.g. by running multiple times).[39m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mLighthouse[0m[38;5;12m (https://developers.google.com/web/tools/lighthouse/) - A tool built on Google Chrome to audit web pages. You can run it from Chrome DevTools, a Chrome Extension or from the command line (even with headless Chrome).[39m
|
||
[38;5;12m- [39m[38;5;14m[1mGoogle PageSpeed Insights[0m[38;5;12m (https://developers.google.com/speed/pagespeed/insights/) - Free and hosted Lighthouse reporting (and more) by Google.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mWebpageTest[0m[38;5;12m (https://www.webpagetest.org/) - Free and hosted web performance testing (also an open source project).[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSitespeed.io[0m[38;5;12m (https://www.sitespeed.io/) - A set of open source performance monitoring tools.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mCalibre[0m[38;5;12m (https://calibreapp.com) - Web performance monitoring SaaS.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mtreo.sh[0m[38;5;12m (https://treo.sh/) - Web performance monitoring SaaS.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSpeedCurve[0m[38;5;12m (https://speedcurve.com/) - Web performance monitoring SaaS.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mAwesomeTechStack[0m[38;5;12m (https://awesometechstack.com/) - Website awesomeness monitoring Tool.[39m
|
||
|
||
[38;5;238m――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――[39m
|
||
|
||
[38;2;255;187;0m[4mField Data (Real User Monitoring - RUM)[0m
|
||
|
||
[38;5;12mCollect performance data from real users visiting your page. Be mindful of the actual overhead, as it runs in your user's browser and watch out for browser support of more recent metrics (e.g. compared to your user-base).[39m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mPerformance tracking with Google Analytics (GA)[0m[38;5;12m (https://philipwalton.com/articles/the-google-analytics-setup-i-use-on-every-site-i-build/#performance-tracking)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mChrome User Experience Report (CrUX)[0m[38;5;12m (https://developers.google.com/web/tools/chrome-user-experience-report/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mLoad abandonment[0m[38;5;12m (https://developers.google.com/web/updates/2017/06/user-centric-performance-metrics#load_abandonment) - Track [39m[48;5;235m[38;5;249mvisibilitychange[49m[39m[38;5;12m to account for survivorship bias.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSpeedCurve LUX[0m[38;5;12m (https://speedcurve.com/features/lux/) - Real User Monitoring SaaS.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mAkamai mPulse[0m[38;5;12m (https://www.akamai.com/uk/en/products/performance/mpulse-real-user-monitoring.jsp) - Real User Monitoring SaaS.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSematext Experience[0m[38;5;12m (https://sematext.com/experience/) - Real User Monitoring SaaS.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mPerfume.js[0m[38;5;12m (https://zizzamia.github.io/perfume/) - Open Source Library to collect Field Data.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mWeb Vitals[0m[38;5;12m (https://github.com/GoogleChrome/web-vitals) - Open Source Library to collect Field Data.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mVercel Analytics[0m[38;5;12m (https://vercel.com/docs/analytics) - Real User Monitoring based on Web Vitals.[39m
|
||
|
||
[38;2;255;187;0m[4mCritical rendering path[0m
|
||
|
||
[38;5;12mThe[39m[38;5;12m [39m[38;5;12mcritical[39m[38;5;12m [39m[38;5;12mrendering[39m[38;5;12m [39m[38;5;12mpath[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;14m[1meverything[0m[38;5;14m[1m [0m[38;5;14m[1mthat[0m[38;5;14m[1m [0m[38;5;14m[1mhappens[0m[38;5;14m[1m [0m[38;5;14m[1mbetween[0m[38;5;14m[1m [0m[38;5;14m[1mreceiving[0m[38;5;14m[1m [0m[38;5;14m[1mnetwork[0m[38;5;14m[1m [0m[38;5;14m[1mbytes[0m[38;5;14m[1m [0m[38;5;14m[1mand[0m[38;5;14m[1m [0m[38;5;14m[1mrendering[0m[38;5;14m[1m [0m[38;5;14m[1msomething[0m[38;5;14m[1m [0m[38;5;14m[1mon[0m[38;5;14m[1m [0m[38;5;14m[1mthe[0m[38;5;14m[1m [0m[38;5;14m[1mscreen[0m[38;5;12m.[39m[38;5;12m [39m[38;5;12mTo[39m[38;5;12m [39m[38;5;12moptimize[39m[38;5;12m [39m[38;5;12many[39m[38;5;12m [39m[38;5;12mrendering[39m[38;5;12m [39m[38;5;12mmetrics[39m[38;5;12m [39m[38;5;12mlike[39m[38;5;12m [39m[38;5;14m[1mFirst[0m[38;5;14m[1m [0m[38;5;14m[1mContentful[0m[38;5;14m[1m [0m[38;5;14m[1mPaint[0m[38;5;14m[1m [0m[38;5;14m[1m(FCP)[0m[38;5;12m [39m[38;5;12m(#first-contentful-paint-fcp)[39m[38;5;12m [39m[38;5;12mor[39m[38;5;12m [39m[38;5;14m[1mSpeed[0m[38;5;14m[1m [0m[38;5;14m[1mIndex[0m[38;5;12m [39m
|
||
[38;5;12m(#speed-index)[39m[38;5;12m [39m[38;5;12myou[39m[38;5;12m [39m[38;5;12mhave[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12munderstand[39m[38;5;12m [39m[38;5;12mhow[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mcritical[39m[38;5;12m [39m[38;5;12mrendering[39m[38;5;12m [39m[38;5;12mpath[39m[38;5;12m [39m[38;5;12mworks.[39m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mCritical rendering path[0m[38;5;12m (https://developers.google.com/web/fundamentals/performance/critical-rendering-path/)[39m
|
||
|
||
[38;2;255;187;0m[4mLong tasks[0m
|
||
|
||
[38;5;12mThe browser Main Thread that handles user input is also the one executing JavaScript (among many other things). Blocking the Main Thread for too long can make your page unresponsive.[39m
|
||
|
||
[38;5;12mA user perceives any visual change within 100ms as instant. Any task blocking the Main Thread by [39m[38;5;14m[1mtaking longer than 50ms is considered a long task[0m[38;5;12m (as it might make the browser unresponsive to user input).[39m
|
||
|
||
[38;5;12mTo optimize interactivity metrics like [39m[38;5;14m[1mTotal Blocking Time (TBT)[0m[38;5;12m (#total-blocking-time-tbt) and [39m[38;5;14m[1mFirst Input Delay (FID)[0m[38;5;12m (#first-input-delay-fid) you have to understand long tasks and how to avoid them as much as possible.[39m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mSpec - Long Tasks[0m[38;5;12m (https://w3c.github.io/longtasks/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mBlogpost - Tracking CPU with Long Tasks API[0m[38;5;12m (https://calendar.perfplanet.com/2017/tracking-cpu-with-long-tasks-api/)[39m
|
||
|
||
[38;2;255;187;0m[4mUser-centric metrics[0m
|
||
|
||
[38;5;12mIt's important to track metrics relevant to users and their experience. To measure the perceived performance we can choose metrics by framing them around a few key questions.[39m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - User-centric Performance Metrics - web.dev[0m[38;5;12m (https://web.dev/user-centric-performance-metrics/)[39m
|
||
[38;5;12m- Is it happening? - Did the navigation start successfully? Has the server responded? (e.g [39m[38;5;14m[1mFCP[0m[38;5;12m (https://github.com/csabapalfi/awesome-web-performance-metrics/#first-contentful-paint-fcp))[39m
|
||
[38;5;12m- Is it useful/meaningful? - Has enough content rendered that users can engage with it? (e.g. [39m[38;5;14m[1mLCP[0m[38;5;12m (https://github.com/csabapalfi/awesome-web-performance-metrics/#largest-contentful-paint-lcp))[39m
|
||
[38;5;12m- Is it usable - Can users interact with the page, or is it still busy loading? (e.g [39m[38;5;14m[1mTBT[0m[38;5;12m (https://github.com/csabapalfi/awesome-web-performance-metrics/#total-blocking-time-tbt))[39m
|
||
[38;5;12m- Is it delightful/smooth? - Are the interactions smooth and natural, free of lag and jank?[39m
|
||
|
||
[38;5;238m――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――[39m
|
||
|
||
[38;2;255;187;0m[4mRendering metrics[0m
|
||
|
||
[38;2;255;187;0m[4mFirst Contentful Paint (FCP)[0m
|
||
|
||
[38;5;12mThe First Contentful Paint (FCP) metric measures the time from when the page starts loading to when any part of the page's content is rendered on the screen. For this metric, "content" refers to text, images (including background images), [39m
|
||
[38;5;12m elements.[39m
|
||
|
||
[38;5;12m- Lab: Lighthouse[39m
|
||
[38;5;12m- Field: Chrome 60+, CrUX[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - FCP - web.dev[0m[38;5;12m (https://web.dev/fcp/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSpec - Paint Timing - W3C[0m[38;5;12m (https://w3c.github.io/paint-timing/)[39m
|
||
|
||
[38;2;255;187;0m[4mLargest Contentful Paint (LCP)[0m
|
||
|
||
[38;5;12mThe Largest Contentful Paint (LCP) metric reports the render time of the largest content element visible within the viewport.[39m
|
||
|
||
[38;5;12m- Lab: Lighthouse/WPT[39m
|
||
[38;5;12m- Field: Chrome 77+[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - LCP - web.dev[0m[38;5;12m (https://web.dev/largest-contentful-paint/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSpec - LCP - W3C[0m[38;5;12m (https://github.com/WICG/largest-contentful-paint#readme)[39m
|
||
|
||
[38;2;255;187;0m[4mCumulative Layout Shift (CLS)[0m
|
||
|
||
[38;5;12m [39m[38;5;12mA[39m[38;5;12m [39m[38;5;12mlayout[39m[38;5;12m [39m[38;5;12mshift[39m[38;5;12m [39m[38;5;12moccurs[39m[38;5;12m [39m[38;5;12many[39m[38;5;12m [39m[38;5;12mtime[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mvisible[39m[38;5;12m [39m[38;5;12melement[39m[38;5;12m [39m[38;5;12mchanges[39m[38;5;12m [39m[38;5;12mits[39m[38;5;12m [39m[38;5;12mposition[39m[38;5;12m [39m[38;5;12mfrom[39m[38;5;12m [39m[38;5;12mone[39m[38;5;12m [39m[38;5;12mframe[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mnext.[39m[38;5;12m [39m[38;5;12mCLS[39m[38;5;12m [39m[38;5;12mmeasures[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12msum[39m[38;5;12m [39m[38;5;12mtotal[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mall[39m[38;5;12m [39m[38;5;12mindividual[39m[38;5;12m [39m[38;5;12mlayout[39m[38;5;12m [39m[38;5;12mshift[39m[38;5;12m [39m[38;5;12mscores[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12mevery[39m[38;5;12m [39m[38;5;12munexpected[39m[38;5;12m [39m[38;5;12mlayout[39m[38;5;12m [39m[38;5;12mshift[39m[38;5;12m [39m[38;5;12mthat[39m[38;5;12m [39m[38;5;12moccurs[39m[38;5;12m [39m[38;5;12mduring[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mentire[39m[38;5;12m [39m[38;5;12mlifespan[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m
|
||
[38;5;12mpage.[39m
|
||
|
||
[38;5;12m- Lab: Lighthouse/WPT[39m
|
||
[38;5;12m- Field: Chrome 77+[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - CLS - web.dev[0m[38;5;12m (https://web.dev/cls/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSpec - Layout Instability API - W3C[0m[38;5;12m (https://github.com/WICG/layout-instability)[39m
|
||
|
||
[38;2;255;187;0m[4mVisually Complete[0m
|
||
|
||
[38;5;12mThe[39m[38;5;12m [39m[38;5;12mVisually[39m[38;5;12m [39m[38;5;12mComplete[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mtime[39m[38;5;12m [39m[38;5;12mfrom[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mstart[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12minitial[39m[38;5;12m [39m[38;5;12mnavigation[39m[38;5;12m [39m[38;5;12muntil[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;14m[1mvisible[0m[38;5;14m[1m [0m[38;5;14m[1m(above[0m[38;5;14m[1m [0m[38;5;14m[1mthe[0m[38;5;14m[1m [0m[38;5;14m[1mfold)[0m[38;5;14m[1m [0m[38;5;14m[1mpart[0m[38;5;14m[1m [0m[38;5;14m[1mof[0m[38;5;14m[1m [0m[38;5;14m[1myour[0m[38;5;14m[1m [0m[38;5;14m[1mpage[0m[38;5;14m[1m [0m[38;5;14m[1mis[0m[38;5;14m[1m [0m[38;5;14m[1mno[0m[38;5;14m[1m [0m[38;5;14m[1mlonger[0m[38;5;14m[1m [0m[38;5;14m[1mchanging[0m[38;5;12m.[39m[38;5;12m [39m[38;5;12m(e.g.[39m[38;5;12m [39m[38;5;12mWPT[39m[38;5;12m [39m[38;5;12mmeasures[39m[38;5;12m [39m[38;5;12mthis[39m[38;5;12m [39m[38;5;12musing[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mcolor[39m[38;5;12m [39m[38;5;12mhistogram[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mpage[39m[38;5;12m [39m[38;5;12mbased[39m[38;5;12m [39m[38;5;12mon[39m[38;5;12m [39m[38;5;12mvideo/screenshots[39m[38;5;12m [39m
|
||
[38;5;12mrecording).[39m
|
||
|
||
[38;5;12m- Lab: WPT[39m
|
||
[38;5;12m- Field: N/A[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - Visually Complete - WPT[0m[38;5;12m (https://sites.google.com/a/webpagetest.org/docs/using-webpagetest/metrics/speed-index)[39m
|
||
|
||
[38;2;255;187;0m[4mSpeed Index[0m
|
||
|
||
[38;5;12mSpeed Index shows [39m[38;5;14m[1mhow quickly the contents of a page are visibly populated[0m[38;5;12m (lower numbers are better). This is done by frequently measuring visual completeness during loading. The quicker the page is more visually complete the lower the value.[39m
|
||
|
||
[38;5;12m- Lab: Lighthouse, WPT (but slightly different spec)[39m
|
||
[38;5;12m- Field: N/A[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - Speed Index - web.dev[0m[38;5;12m (https://web.dev/speed-index/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - Speed Index - WPT[0m[38;5;12m (https://sites.google.com/a/webpagetest.org/docs/using-webpagetest/metrics/speed-index)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mTalk - Speed Perception and Lighthouse[0m[38;5;12m (https://ldnwebperf.org/sessions/speed-perception-and-lighthouse/)[39m
|
||
|
||
[38;2;255;187;0m[4m(Hero) Element Timing[0m
|
||
|
||
[38;5;12mElement Timing captures [39m[38;5;14m[1mwhen specific elements are painted[0m[38;5;12m by the browser. Hero elements can be defined as the largest h1, img or background image (or custom ones using the Element Timing API)[39m
|
||
|
||
[38;5;12m- Lab: WPT[39m
|
||
[38;5;12m- Field: Chrome 77+[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - Last Painted Hero - WPT[0m[38;5;12m (https://github.com/WPO-Foundation/webpagetest/blob/master/docs/Metrics/HeroElements.md)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSpec - Element Timing API[0m[38;5;12m (https://wicg.github.io/element-timing/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mBlogpost - Hero Element Timing - SpeedCurve[0m[38;5;12m (https://speedcurve.com/blog/web-performance-monitoring-hero-times/)[39m
|
||
|
||
[38;5;238m――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――[39m
|
||
|
||
[38;2;255;187;0m[4mInteractivity metrics[0m
|
||
|
||
[38;2;255;187;0m[4mTime to Interactive (TTI)[0m
|
||
|
||
[38;5;12mTime[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12minteractive[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;14m[1mthe[0m[38;5;14m[1m [0m[38;5;14m[1mtime[0m[38;5;14m[1m [0m[38;5;14m[1mit[0m[38;5;14m[1m [0m[38;5;14m[1mtakes[0m[38;5;14m[1m [0m[38;5;14m[1mfor[0m[38;5;14m[1m [0m[38;5;14m[1mthe[0m[38;5;14m[1m [0m[38;5;14m[1mpage[0m[38;5;14m[1m [0m[38;5;14m[1mto[0m[38;5;14m[1m [0m[38;5;14m[1mbecome[0m[38;5;14m[1m [0m[38;5;14m[1mfully[0m[38;5;14m[1m [0m[38;5;14m[1minteractive[0m[38;5;12m [39m[38;5;12m(as[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12mMain[39m[38;5;12m [39m[38;5;12mThread[39m[38;5;12m [39m[38;5;12mquiet[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12m5s).[39m[38;5;12m [39m[38;5;12mSometimes[39m[38;5;12m [39m[38;5;12mcalled[39m[38;5;12m [39m[38;5;12mConsistently[39m[38;5;12m [39m[38;5;12mInteractice[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mnot[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mbe[39m[38;5;12m [39m[38;5;12mconfused[39m[38;5;12m [39m[38;5;12mwith[39m[38;5;12m [39m[38;5;12mFirst[39m[38;5;12m [39m[38;5;12mInteractive[39m[38;5;12m [39m[38;5;12mor[39m[38;5;12m [39m[38;5;12mFirst[39m[38;5;12m [39m[38;5;12mCPU[39m[38;5;12m [39m[38;5;12mIdle.[39m[38;5;12m [39m[38;5;12m(Warning:[39m[38;5;12m [39m[38;5;12mone[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m
|
||
[38;5;12mmost[39m[38;5;12m [39m[38;5;12mconfusing[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mmisunderstood[39m[38;5;12m [39m[38;5;12mmetrics).[39m
|
||
|
||
[38;5;12m- Lab: Lighthouse, WPT[39m
|
||
[38;5;12m- Field: Not recommended as users interacting with your page can skew field measurements of TTI[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - TTI - web.dev[0m[38;5;12m (https://web.dev/tti/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSpec - TTI - Lighthouse[0m[38;5;12m (https://docs.google.com/document/d/1GGiI9-7KeY3TPqS3YT271upUVimo-XiL5mwWorDUD4c/edit)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mBlogpost - TTI[0m[38;5;12m (https://blog.dareboost.com/en/2019/05/measuring-interactivity-time-to-interactive/)[39m
|
||
|
||
[38;2;255;187;0m[4mTotal Blocking Time (TBT)[0m
|
||
|
||
[38;5;12mThe Total Blocking Time (TBT) metric measures the total amount of time between First Contentful Paint (FCP) and Time to Interactive (TTI) where the main thread was blocked for long enough to prevent input responsiveness.[39m
|
||
|
||
[38;5;12m- Lab: Lighthouse[39m
|
||
[38;5;12m- Field: N/A[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - TBT - web.dev[0m[38;5;12m (https://web.dev/tbt/)[39m
|
||
|
||
[38;2;255;187;0m[4mFirst Input Delay (FID)[0m
|
||
|
||
[38;5;12mFirst[39m[38;5;12m [39m[38;5;12mInput[39m[38;5;12m [39m[38;5;12mDelay[39m[38;5;12m [39m[38;5;12m(FID)[39m[38;5;12m [39m[38;5;12mmeasures[39m[38;5;12m [39m[38;5;14m[1mthe[0m[38;5;14m[1m [0m[38;5;14m[1mtime[0m[38;5;14m[1m [0m[38;5;14m[1mfrom[0m[38;5;14m[1m [0m[38;5;14m[1mwhen[0m[38;5;14m[1m [0m[38;5;14m[1ma[0m[38;5;14m[1m [0m[38;5;14m[1muser[0m[38;5;14m[1m [0m[38;5;14m[1mfirst[0m[38;5;14m[1m [0m[38;5;14m[1minteracts[0m[38;5;14m[1m [0m[38;5;14m[1mwith[0m[38;5;14m[1m [0m[38;5;14m[1myour[0m[38;5;14m[1m [0m[38;5;14m[1msite[0m[38;5;14m[1m [0m[38;5;14m[1mto[0m[38;5;14m[1m [0m[38;5;14m[1mthe[0m[38;5;14m[1m [0m[38;5;14m[1mtime[0m[38;5;14m[1m [0m[38;5;14m[1mwhen[0m[38;5;14m[1m [0m[38;5;14m[1mthe[0m[38;5;14m[1m [0m[38;5;14m[1mbrowser[0m[38;5;14m[1m [0m[38;5;14m[1mis[0m[38;5;14m[1m [0m[38;5;14m[1mactually[0m[38;5;14m[1m [0m[38;5;14m[1mable[0m[38;5;14m[1m [0m[38;5;14m[1mto[0m[38;5;14m[1m [0m[38;5;14m[1mrespond[0m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mthat[39m[38;5;12m [39m[38;5;12minteraction.[39m[38;5;12m [39m[38;5;12mAn[39m[38;5;12m [39m[38;5;12minteraction[39m[38;5;12m [39m[38;5;12mcan[39m[38;5;12m [39m[38;5;12mbe[39m[38;5;12m [39m[38;5;12mwhen[39m[38;5;12m [39m[38;5;12musers[39m[38;5;12m [39m[38;5;12mclick[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mlink,[39m[38;5;12m [39m[38;5;12mtap[39m[38;5;12m [39m[38;5;12mon[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mbutton,[39m[38;5;12m [39m[38;5;12mor[39m[38;5;12m [39m[38;5;12muse[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m
|
||
[38;5;12mcustom,[39m[38;5;12m [39m[38;5;12mJavaScript-powered[39m[38;5;12m [39m[38;5;12mcontrol.[39m
|
||
|
||
[38;5;12m- Lab: N/A (as it requires the user to interact with the page)[39m
|
||
[38;5;12m- Field: IE9+ (and Safari, Chrome, Firefox) (with polyfill - 0.4KB)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - FID - web.dev[0m[38;5;12m (https://web.dev/fid/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mPolyfill - FID[0m[38;5;12m (https://github.com/GoogleChromeLabs/first-input-delay)[39m
|
||
|
||
[38;2;255;187;0m[4mMax Potential First Input Delay[0m
|
||
|
||
[38;5;12mThe maximum potential [39m[38;5;14m[1mFirst Input Delay[0m[38;5;12m (#first-input-delay-fid) that your users could experience. Basically equals to the duration of the longest [39m[38;5;14m[1mlong task[0m[38;5;12m (#long-tasks) on the browser Main Thread.[39m
|
||
|
||
[38;5;12m- Lab: Lighthouse[39m
|
||
[38;5;12m- Field: N/A[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - Max Potential FID - web.dev[0m[38;5;12m (https://web.dev/lighthouse-max-potential-fid/)[39m
|
||
|
||
[38;5;238m――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――[39m
|
||
|
||
[38;2;255;187;0m[4mNetwork metrics[0m
|
||
|
||
[38;5;12mNetwork timing field data can uncover a non-optimized TLS setup, slow DNS lookups or server side processing and issues with CDN configuration. See also a separate section about measuring [39m[38;5;14m[1mtransferred bytes[0m[38;5;12m (#transferred-bytes).[39m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mBlogpost - Navigation and Resource Timing[0m[38;5;12m (https://developers.google.com/web/fundamentals/performance/navigation-and-resource-timing/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSpec - Navigation Timing[0m[38;5;12m (https://www.w3.org/TR/navigation-timing-2/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSpec - Resource Timing[0m[38;5;12m (https://www.w3.org/TR/resource-timing-2/)[39m
|
||
|
||
[38;2;255;187;0m[4mDNS latency[0m
|
||
|
||
[38;5;12m- Lab: DNS performance testing tools[39m
|
||
[38;5;12m- Field: IE9+, Safari 9+[39m
|
||
|
||
[48;5;235m[38;5;249m// Measuring DNS lookup time[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249mvar pageNav = performance.getEntriesByType("navigation")**0** ;[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249mvar dnsTime = pageNav.domainLookupEnd - pageNav.domainLookupStart;[49m[39m
|
||
|
||
[38;2;255;187;0m[4mTCP and SSL/TLS latency[0m
|
||
|
||
[38;5;12m- Lab: See [39m[38;5;14m[1mQualys SSL Labs[0m[38;5;12m (https://www.ssllabs.com/ssltest/index.html) for an audit[39m
|
||
[38;5;12m- Field: IE9+, Safari 9+[39m
|
||
|
||
[48;5;235m[38;5;249m// Quantifying total connection time[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249mvar pageNav = performance.getEntriesByType("navigation")**0** ;[49m[39m
|
||
[48;5;235m[38;5;249mvar connectionTime = pageNav.connectEnd - pageNav.connectStart;[49m[39m
|
||
[48;5;235m[38;5;249mvar tlsTime = 0; // <-- Assume 0 by default[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m// Did any TLS stuff happen?[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249mif (pageNav.secureConnectionStart > 0) {[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m // Awesome! Calculate it![49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m tlsTime = pageNav.connectEnd - pageNav.secureConnectionStart;[49m[39m
|
||
[48;5;235m[38;5;249m}[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
|
||
[38;2;255;187;0m[4mTime to First Byte (TTFB)[0m
|
||
|
||
[38;5;12m- Lab: most server load testing tools report this[39m
|
||
[38;5;12m- Field: IE9+, Safari 9+[39m
|
||
|
||
[48;5;235m[38;5;249mvar ttfb = pageNav.responseStart - pageNav.requestStart;[49m[39m
|
||
|
||
[38;2;255;187;0m[4mTransferred bytes[0m
|
||
|
||
[38;5;12mYou can measure the byte weight of your assets with a number of tools. You would normally track these Lab only as the numbers are usually the same in the Field (but be mindful of device type or geographical location specific pages).[39m
|
||
|
||
[38;5;12mMeasuring own (and third-party) JavaScript bytes is crucial as JavaScript is the main cause of high [39m[38;5;14m[1mTTI[0m[38;5;12m (#time-to-interactive-tti) or [39m[38;5;14m[1mFID[0m[38;5;12m (#first-input-delay-fid) values.[39m
|
||
|
||
[38;5;12m- Lab: Lighthouse (budgets), Sitespeed.io, custom tools[39m
|
||
[38;5;12m- Field: N/A - but numbers usually the same as in Lab[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSitespeed.io PageXray[0m[38;5;12m (https://www.sitespeed.io/documentation/pagexray/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mLighthouse Performance Budgets[0m[38;5;12m (https://developers.google.com/web/tools/lighthouse/audits/budgets)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mCan You Afford It?: Real-world Web Performance Budgets[0m[38;5;12m (https://infrequently.org/2017/10/can-you-afford-it-real-world-web-performance-budgets/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mWhich third party scripts are most excessive[0m[38;5;12m (https://github.com/patrickhulce/third-party-web)[39m
|
||
|
||
[38;5;238m――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――[39m
|
||
|
||
[38;2;255;187;0m[4mOther metrics[0m
|
||
|
||
[38;2;255;187;0m[4mGoogle PageSpeed Insights score[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mAbout PageSpeed Insights[0m[38;5;12m (https://developers.google.com/speed/docs/insights/v5/about)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mWhat's in the Google PageSpeed score[0m[38;5;12m (https://medium.com/expedia-group-tech/whats-in-the-google-pagespeed-score-a5fc93f91e91)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mHow Google Pagespeed works[0m[38;5;12m (https://calibreapp.com/blog/how-pagespeed-works/)[39m
|
||
|
||
[38;2;255;187;0m[4mUser Timing[0m
|
||
|
||
[38;5;12mThe[39m[38;5;12m [39m[38;5;12mUser[39m[38;5;12m [39m[38;5;12mTiming[39m[38;5;12m [39m[38;5;12mAPI[39m[38;5;12m [39m[38;5;12mallows[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mdeveloper[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mcreate[39m[38;5;12m [39m[38;5;12mapplication[39m[38;5;12m [39m[38;5;12mspecific[39m[38;5;12m [39m[38;5;12mtimestamps[39m[38;5;12m [39m[38;5;12mthat[39m[38;5;12m [39m[38;5;12mare[39m[38;5;12m [39m[38;5;12mpart[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mbrowser's[39m[38;5;12m [39m[38;5;12mperformance[39m[38;5;12m [39m[38;5;12mtimeline.[39m[38;5;12m [39m[38;5;12me.g.[39m[38;5;12m [39m[38;5;12myou[39m[38;5;12m [39m[38;5;12mcan[39m[38;5;12m [39m[38;5;12mcreate[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12muser[39m[38;5;12m [39m[38;5;12mtiming[39m[38;5;12m [39m[38;5;12mmark[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mmeasure[39m[38;5;12m [39m[38;5;12mwhen[39m[38;5;12m [39m[38;5;12myour[39m[38;5;12m [39m[38;5;12mJS[39m[38;5;12m [39m[38;5;12mhas[39m[38;5;12m [39m[38;5;12mloaded[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mspecific[39m[38;5;12m [39m[38;5;12mcomponent[39m[38;5;12m [39m[38;5;12mon[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m
|
||
[38;5;12mpage.[39m
|
||
|
||
[38;5;12m- Lab: Lighthouse, WPT[39m
|
||
[38;5;12m- Field: IE 10+, Safari 11+ (and Chrome, Firefox of course)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSpec - User Timing[0m[38;5;12m (https://www.w3.org/TR/user-timing/)[39m
|
||
|
||
[38;2;255;187;0m[4mServer Timing[0m
|
||
|
||
[38;5;12mSurface any backend server timing metrics (e.g. database latency, etc.) in the developer tools in the user's browser or in the PerformanceServerTiming interface.[39m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - Server Timing[0m[38;5;12m (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Server-Timing)[39m
|
||
|
||
[38;2;255;187;0m[4mFrame rate[0m
|
||
|
||
[38;5;12m [39m[38;5;12mThe[39m[38;5;12m [39m[38;5;12mframe[39m[38;5;12m [39m[38;5;12mrate[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;14m[1mfrequency[0m[38;5;14m[1m [0m[38;5;14m[1mat[0m[38;5;14m[1m [0m[38;5;14m[1mwhich[0m[38;5;14m[1m [0m[38;5;14m[1mthe[0m[38;5;14m[1m [0m[38;5;14m[1mbrowser[0m[38;5;14m[1m [0m[38;5;14m[1mcan[0m[38;5;14m[1m [0m[38;5;14m[1mdisplay[0m[38;5;14m[1m [0m[38;5;14m[1mframes[0m[38;5;12m.[39m[38;5;12m [39m[38;5;12mA[39m[38;5;12m [39m[38;5;12mframe[39m[38;5;12m [39m[38;5;12mrepresents[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mamount[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mwork[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mbrowser[39m[38;5;12m [39m[38;5;12mdoes[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12mone[39m[38;5;12m [39m[38;5;12mevent[39m[38;5;12m [39m[38;5;12mloop[39m[38;5;12m [39m[38;5;12miteration[39m[38;5;12m [39m[38;5;12msuch[39m[38;5;12m [39m[38;5;12mas[39m[38;5;12m [39m[38;5;12mprocessing[39m[38;5;12m [39m[38;5;12mDOM[39m[38;5;12m [39m[38;5;12mevents,[39m[38;5;12m [39m[38;5;12mresizing,[39m[38;5;12m [39m[38;5;12mscrolling,[39m[38;5;12m [39m[38;5;12mrendering,[39m[38;5;12m [39m[38;5;12mCSS[39m[38;5;12m [39m[38;5;12manimations,[39m[38;5;12m [39m[38;5;12metc.[39m[38;5;12m [39m[38;5;12mA[39m[38;5;12m [39m[38;5;12mframe[39m
|
||
[38;5;12mrate[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12m60[39m[38;5;12m [39m[38;5;12mfps[39m[38;5;12m [39m[38;5;12m(frames[39m[38;5;12m [39m[38;5;12mper[39m[38;5;12m [39m[38;5;12msecond)[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mcommon[39m[38;5;12m [39m[38;5;12mtarget[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mgood[39m[38;5;12m [39m[38;5;12mresponsive[39m[38;5;12m [39m[38;5;12muser[39m[38;5;12m [39m[38;5;12mexperience.[39m[38;5;12m [39m[38;5;12mThis[39m[38;5;12m [39m[38;5;12mmeans[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mbrowser[39m[38;5;12m [39m[38;5;12mshould[39m[38;5;12m [39m[38;5;12mprocess[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mframe[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12mabout[39m[38;5;12m [39m[38;5;12m16.7[39m[38;5;12m [39m[38;5;12mms.[39m
|
||
|
||
[38;5;12m- Lab: Chrome and FF Devtools[39m
|
||
[38;5;12m- Field: No browser implements the Frame Timing API yet but you can roll your own fps meter using [39m[48;5;235m[38;5;249mrequestAnimationFrame[49m[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - Frame Timing API[0m[38;5;12m (https://developer.mozilla.org/en-US/docs/Web/API/Frame_Timing_API)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - Chrome Devtools - FPS[0m[38;5;12m (https://developers.google.com/web/tools/chrome-devtools/evaluate-performance/#analyze_frames_per_second)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - Firefox Developer Tools - Frame rate[0m[38;5;12m (https://developer.mozilla.org/en-US/docs/Tools/Performance/Frame_rate)[39m
|
||
|
||
[38;2;255;187;0m[4mDOMContentLoaded[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - [0m[48;5;235m[38;5;249m[1mDOMContentLoaded[0m[38;5;12m (https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded)[39m
|
||
|
||
[38;2;255;187;0m[4mwindow.load[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mDocs - [0m[48;5;235m[38;5;249m[1mwindow.load[0m[38;5;12m (https://developer.mozilla.org/en-US/docs/Web/Events/load)[39m
|
||
|
||
[38;2;255;187;0m[4mLicense[0m
|
||
|
||
[38;5;14m[1m![0m[38;5;12mCC0[39m[38;5;14m[1m (http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg)[0m[38;5;12m (https://creativecommons.org/publicdomain/zero/1.0/)[39m
|
||
|
||
[38;5;12mTo the extent possible under law, Csaba Palfi has waived all copyright and related or neighboring rights to this work.[39m
|
||
|
||
[38;5;12mpagespeedmetrics Github: https://github.com/csabapalfi/awesome-pagespeed-metrics[39m
|