322 lines
48 KiB
Plaintext
322 lines
48 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;12m [39m[38;5;14m[1mLighthouse[0m[38;5;12m [39m[38;5;12m(https://developers.google.com/web/tools/lighthouse/)[39m[38;5;12m [39m[38;5;12m-[39m[38;5;12m [39m[38;5;12mA[39m[38;5;12m [39m[38;5;12mtool[39m[38;5;12m [39m[38;5;12mbuilt[39m[38;5;12m [39m[38;5;12mon[39m[38;5;12m [39m[38;5;12mGoogle[39m[38;5;12m [39m[38;5;12mChrome[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12maudit[39m[38;5;12m [39m[38;5;12mweb[39m[38;5;12m [39m[38;5;12mpages.[39m[38;5;12m [39m[38;5;12mYou[39m[38;5;12m [39m[38;5;12mcan[39m[38;5;12m [39m[38;5;12mrun[39m[38;5;12m [39m[38;5;12mit[39m[38;5;12m [39m[38;5;12mfrom[39m[38;5;12m [39m[38;5;12mChrome[39m[38;5;12m [39m[38;5;12mDevTools,[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mChrome[39m[38;5;12m [39m[38;5;12mExtension[39m[38;5;12m [39m[38;5;12mor[39m[38;5;12m [39m[38;5;12mfrom[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m
|
||
[38;5;12mcommand[39m[38;5;12m [39m[38;5;12mline[39m[38;5;12m [39m[38;5;12m(even[39m[38;5;12m [39m[38;5;12mwith[39m[38;5;12m [39m[38;5;12mheadless[39m[38;5;12m [39m[38;5;12mChrome).[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[39m[38;5;12m [39m[38;5;12mperformance[39m[38;5;12m [39m[38;5;12mdata[39m[38;5;12m [39m[38;5;12mfrom[39m[38;5;12m [39m[38;5;12mreal[39m[38;5;12m [39m[38;5;12musers[39m[38;5;12m [39m[38;5;12mvisiting[39m[38;5;12m [39m[38;5;12myour[39m[38;5;12m [39m[38;5;12mpage.[39m[38;5;12m [39m[38;5;12mBe[39m[38;5;12m [39m[38;5;12mmindful[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mactual[39m[38;5;12m [39m[38;5;12moverhead,[39m[38;5;12m [39m[38;5;12mas[39m[38;5;12m [39m[38;5;12mit[39m[38;5;12m [39m[38;5;12mruns[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12myour[39m[38;5;12m [39m[38;5;12muser's[39m[38;5;12m [39m[38;5;12mbrowser[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mwatch[39m[38;5;12m [39m[38;5;12mout[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12mbrowser[39m[38;5;12m [39m[38;5;12msupport[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mmore[39m[38;5;12m [39m[38;5;12mrecent[39m[38;5;12m [39m[38;5;12mmetrics[39m[38;5;12m [39m
|
||
[38;5;12m(e.g.[39m[38;5;12m [39m[38;5;12mcompared[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12myour[39m[38;5;12m [39m[38;5;12muser-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[39m[38;5;12m [39m[38;5;12muser[39m[38;5;12m [39m[38;5;12mperceives[39m[38;5;12m [39m[38;5;12many[39m[38;5;12m [39m[38;5;12mvisual[39m[38;5;12m [39m[38;5;12mchange[39m[38;5;12m [39m[38;5;12mwithin[39m[38;5;12m [39m[38;5;12m100ms[39m[38;5;12m [39m[38;5;12mas[39m[38;5;12m [39m[38;5;12minstant.[39m[38;5;12m [39m[38;5;12mAny[39m[38;5;12m [39m[38;5;12mtask[39m[38;5;12m [39m[38;5;12mblocking[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mMain[39m[38;5;12m [39m[38;5;12mThread[39m[38;5;12m [39m[38;5;12mby[39m[38;5;12m [39m[38;5;14m[1mtaking[0m[38;5;14m[1m [0m[38;5;14m[1mlonger[0m[38;5;14m[1m [0m[38;5;14m[1mthan[0m[38;5;14m[1m [0m[38;5;14m[1m50ms[0m[38;5;14m[1m [0m[38;5;14m[1mis[0m[38;5;14m[1m [0m[38;5;14m[1mconsidered[0m[38;5;14m[1m [0m[38;5;14m[1ma[0m[38;5;14m[1m [0m[38;5;14m[1mlong[0m[38;5;14m[1m [0m[38;5;14m[1mtask[0m[38;5;12m [39m[38;5;12m(as[39m[38;5;12m [39m[38;5;12mit[39m[38;5;12m [39m[38;5;12mmight[39m[38;5;12m [39m[38;5;12mmake[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mbrowser[39m[38;5;12m [39m[38;5;12munresponsive[39m[38;5;12m [39m
|
||
[38;5;12mto[39m[38;5;12m [39m[38;5;12muser[39m[38;5;12m [39m[38;5;12minput).[39m
|
||
|
||
[38;5;12mTo[39m[38;5;12m [39m[38;5;12moptimize[39m[38;5;12m [39m[38;5;12minteractivity[39m[38;5;12m [39m[38;5;12mmetrics[39m[38;5;12m [39m[38;5;12mlike[39m[38;5;12m [39m[38;5;14m[1mTotal[0m[38;5;14m[1m [0m[38;5;14m[1mBlocking[0m[38;5;14m[1m [0m[38;5;14m[1mTime[0m[38;5;14m[1m [0m[38;5;14m[1m(TBT)[0m[38;5;12m [39m[38;5;12m(#total-blocking-time-tbt)[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;14m[1mFirst[0m[38;5;14m[1m [0m[38;5;14m[1mInput[0m[38;5;14m[1m [0m[38;5;14m[1mDelay[0m[38;5;14m[1m [0m[38;5;14m[1m(FID)[0m[38;5;12m [39m[38;5;12m(#first-input-delay-fid)[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;12mlong[39m[38;5;12m [39m[38;5;12mtasks[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mhow[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m
|
||
[38;5;12mavoid[39m[38;5;12m [39m[38;5;12mthem[39m[38;5;12m [39m[38;5;12mas[39m[38;5;12m [39m[38;5;12mmuch[39m[38;5;12m [39m[38;5;12mas[39m[38;5;12m [39m[38;5;12mpossible.[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-[39m[38;5;12m [39m[38;5;12mIs[39m[38;5;12m [39m[38;5;12mit[39m[38;5;12m [39m[38;5;12museful/meaningful?[39m[38;5;12m [39m[38;5;12m-[39m[38;5;12m [39m[38;5;12mHas[39m[38;5;12m [39m[38;5;12menough[39m[38;5;12m [39m[38;5;12mcontent[39m[38;5;12m [39m[38;5;12mrendered[39m[38;5;12m [39m[38;5;12mthat[39m[38;5;12m [39m[38;5;12musers[39m[38;5;12m [39m[38;5;12mcan[39m[38;5;12m [39m[38;5;12mengage[39m[38;5;12m [39m[38;5;12mwith[39m[38;5;12m [39m[38;5;12mit?[39m[38;5;12m [39m[38;5;12m(e.g.[39m[38;5;12m [39m[38;5;14m[1mLCP[0m[38;5;12m [39m
|
||
[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[39m[38;5;12m [39m[38;5;12mFirst[39m[38;5;12m [39m[38;5;12mContentful[39m[38;5;12m [39m[38;5;12mPaint[39m[38;5;12m [39m[38;5;12m(FCP)[39m[38;5;12m [39m[38;5;12mmetric[39m[38;5;12m [39m[38;5;12mmeasures[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;12mwhen[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mpage[39m[38;5;12m [39m[38;5;12mstarts[39m[38;5;12m [39m[38;5;12mloading[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mwhen[39m[38;5;12m [39m[38;5;12many[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;12mpage's[39m[38;5;12m [39m[38;5;12mcontent[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12mrendered[39m[38;5;12m [39m[38;5;12mon[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mscreen.[39m[38;5;12m [39m[38;5;12mFor[39m[38;5;12m [39m[38;5;12mthis[39m[38;5;12m [39m[38;5;12mmetric,[39m[38;5;12m [39m[38;5;12m"content"[39m[38;5;12m [39m[38;5;12mrefers[39m
|
||
[38;5;12mto[39m[38;5;12m [39m[38;5;12mtext,[39m[38;5;12m [39m[38;5;12mimages[39m[38;5;12m [39m[38;5;12m(including[39m[38;5;12m [39m[38;5;12mbackground[39m[38;5;12m [39m[38;5;12mimages),[39m[38;5;12m [39m[38;5;12m [39m[38;5;12melements.[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;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[39m[38;5;12m [39m[38;5;12mIndex[39m[38;5;12m [39m[38;5;12mshows[39m[38;5;12m [39m[38;5;14m[1mhow[0m[38;5;14m[1m [0m[38;5;14m[1mquickly[0m[38;5;14m[1m [0m[38;5;14m[1mthe[0m[38;5;14m[1m [0m[38;5;14m[1mcontents[0m[38;5;14m[1m [0m[38;5;14m[1mof[0m[38;5;14m[1m [0m[38;5;14m[1ma[0m[38;5;14m[1m [0m[38;5;14m[1mpage[0m[38;5;14m[1m [0m[38;5;14m[1mare[0m[38;5;14m[1m [0m[38;5;14m[1mvisibly[0m[38;5;14m[1m [0m[38;5;14m[1mpopulated[0m[38;5;12m [39m[38;5;12m(lower[39m[38;5;12m [39m[38;5;12mnumbers[39m[38;5;12m [39m[38;5;12mare[39m[38;5;12m [39m[38;5;12mbetter).[39m[38;5;12m [39m[38;5;12mThis[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12mdone[39m[38;5;12m [39m[38;5;12mby[39m[38;5;12m [39m[38;5;12mfrequently[39m[38;5;12m [39m[38;5;12mmeasuring[39m[38;5;12m [39m[38;5;12mvisual[39m[38;5;12m [39m[38;5;12mcompleteness[39m[38;5;12m [39m[38;5;12mduring[39m[38;5;12m [39m[38;5;12mloading.[39m[38;5;12m [39m[38;5;12mThe[39m[38;5;12m [39m[38;5;12mquicker[39m[38;5;12m [39m[38;5;12mthe[39m
|
||
[38;5;12mpage[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12mmore[39m[38;5;12m [39m[38;5;12mvisually[39m[38;5;12m [39m[38;5;12mcomplete[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mlower[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mvalue.[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[39m[38;5;12m [39m[38;5;12mTiming[39m[38;5;12m [39m[38;5;12mcaptures[39m[38;5;12m [39m[38;5;14m[1mwhen[0m[38;5;14m[1m [0m[38;5;14m[1mspecific[0m[38;5;14m[1m [0m[38;5;14m[1melements[0m[38;5;14m[1m [0m[38;5;14m[1mare[0m[38;5;14m[1m [0m[38;5;14m[1mpainted[0m[38;5;12m [39m[38;5;12mby[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mbrowser.[39m[38;5;12m [39m[38;5;12mHero[39m[38;5;12m [39m[38;5;12melements[39m[38;5;12m [39m[38;5;12mcan[39m[38;5;12m [39m[38;5;12mbe[39m[38;5;12m [39m[38;5;12mdefined[39m[38;5;12m [39m[38;5;12mas[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mlargest[39m[38;5;12m [39m[38;5;12mh1,[39m[38;5;12m [39m[38;5;12mimg[39m[38;5;12m [39m[38;5;12mor[39m[38;5;12m [39m[38;5;12mbackground[39m[38;5;12m [39m[38;5;12mimage[39m[38;5;12m [39m[38;5;12m(or[39m[38;5;12m [39m[38;5;12mcustom[39m[38;5;12m [39m[38;5;12mones[39m[38;5;12m [39m[38;5;12musing[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mElement[39m[38;5;12m [39m[38;5;12mTiming[39m[38;5;12m [39m
|
||
[38;5;12mAPI)[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;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[39m[38;5;12m [39m[38;5;12mTotal[39m[38;5;12m [39m[38;5;12mBlocking[39m[38;5;12m [39m[38;5;12mTime[39m[38;5;12m [39m[38;5;12m(TBT)[39m[38;5;12m [39m[38;5;12mmetric[39m[38;5;12m [39m[38;5;12mmeasures[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mtotal[39m[38;5;12m [39m[38;5;12mamount[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mtime[39m[38;5;12m [39m[38;5;12mbetween[39m[38;5;12m [39m[38;5;12mFirst[39m[38;5;12m [39m[38;5;12mContentful[39m[38;5;12m [39m[38;5;12mPaint[39m[38;5;12m [39m[38;5;12m(FCP)[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[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;12m(TTI)[39m[38;5;12m [39m[38;5;12mwhere[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mmain[39m[38;5;12m [39m[38;5;12mthread[39m[38;5;12m [39m[38;5;12mwas[39m[38;5;12m [39m[38;5;12mblocked[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12mlong[39m[38;5;12m [39m[38;5;12menough[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m
|
||
[38;5;12mprevent[39m[38;5;12m [39m[38;5;12minput[39m[38;5;12m [39m[38;5;12mresponsiveness.[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[39m[38;5;12m [39m[38;5;12mmaximum[39m[38;5;12m [39m[38;5;12mpotential[39m[38;5;12m [39m[38;5;14m[1mFirst[0m[38;5;14m[1m [0m[38;5;14m[1mInput[0m[38;5;14m[1m [0m[38;5;14m[1mDelay[0m[38;5;12m [39m[38;5;12m(#first-input-delay-fid)[39m[38;5;12m [39m[38;5;12mthat[39m[38;5;12m [39m[38;5;12myour[39m[38;5;12m [39m[38;5;12musers[39m[38;5;12m [39m[38;5;12mcould[39m[38;5;12m [39m[38;5;12mexperience.[39m[38;5;12m [39m[38;5;12mBasically[39m[38;5;12m [39m[38;5;12mequals[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mduration[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mlongest[39m[38;5;12m [39m[38;5;14m[1mlong[0m[38;5;14m[1m [0m[38;5;14m[1mtask[0m[38;5;12m [39m[38;5;12m(#long-tasks)[39m[38;5;12m [39m[38;5;12mon[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mbrowser[39m[38;5;12m [39m[38;5;12mMain[39m[38;5;12m [39m
|
||
[38;5;12mThread.[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[39m[38;5;12m [39m[38;5;12mtiming[39m[38;5;12m [39m[38;5;12mfield[39m[38;5;12m [39m[38;5;12mdata[39m[38;5;12m [39m[38;5;12mcan[39m[38;5;12m [39m[38;5;12muncover[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mnon-optimized[39m[38;5;12m [39m[38;5;12mTLS[39m[38;5;12m [39m[38;5;12msetup,[39m[38;5;12m [39m[38;5;12mslow[39m[38;5;12m [39m[38;5;12mDNS[39m[38;5;12m [39m[38;5;12mlookups[39m[38;5;12m [39m[38;5;12mor[39m[38;5;12m [39m[38;5;12mserver[39m[38;5;12m [39m[38;5;12mside[39m[38;5;12m [39m[38;5;12mprocessing[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12missues[39m[38;5;12m [39m[38;5;12mwith[39m[38;5;12m [39m[38;5;12mCDN[39m[38;5;12m [39m[38;5;12mconfiguration.[39m[38;5;12m [39m[38;5;12mSee[39m[38;5;12m [39m[38;5;12malso[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mseparate[39m[38;5;12m [39m[38;5;12msection[39m[38;5;12m [39m[38;5;12mabout[39m[38;5;12m [39m[38;5;12mmeasuring[39m[38;5;12m [39m
|
||
[38;5;14m[1mtransferred[0m[38;5;14m[1m [0m[38;5;14m[1mbytes[0m[38;5;12m [39m[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[39m[38;5;12m [39m[38;5;12mcan[39m[38;5;12m [39m[38;5;12mmeasure[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mbyte[39m[38;5;12m [39m[38;5;12mweight[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12myour[39m[38;5;12m [39m[38;5;12massets[39m[38;5;12m [39m[38;5;12mwith[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mnumber[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mtools.[39m[38;5;12m [39m[38;5;12mYou[39m[38;5;12m [39m[38;5;12mwould[39m[38;5;12m [39m[38;5;12mnormally[39m[38;5;12m [39m[38;5;12mtrack[39m[38;5;12m [39m[38;5;12mthese[39m[38;5;12m [39m[38;5;12mLab[39m[38;5;12m [39m[38;5;12monly[39m[38;5;12m [39m[38;5;12mas[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mnumbers[39m[38;5;12m [39m[38;5;12mare[39m[38;5;12m [39m[38;5;12musually[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12msame[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mField[39m[38;5;12m [39m[38;5;12m(but[39m[38;5;12m [39m[38;5;12mbe[39m[38;5;12m [39m[38;5;12mmindful[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mdevice[39m[38;5;12m [39m[38;5;12mtype[39m[38;5;12m [39m
|
||
[38;5;12mor[39m[38;5;12m [39m[38;5;12mgeographical[39m[38;5;12m [39m[38;5;12mlocation[39m[38;5;12m [39m[38;5;12mspecific[39m[38;5;12m [39m[38;5;12mpages).[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;12m [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;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
|