A Performance Observer API hatĂ©konyan figyeli a webes teljesĂtmĂ©nyt Ă©s a Core Web Vitals-t, optimalizĂĄlva a felhasznĂĄlĂłi Ă©lmĂ©nyt globĂĄlis közönsĂ©g szĂĄmĂĄra.
A webes teljesĂtmĂ©ny felszabadĂtĂĄsa: MĂ©lyrehatĂł betekintĂ©s a Performance Observer API-ba
A mai rohanĂł digitĂĄlis vilĂĄgban a webes teljesĂtmĂ©ny nem luxus; hanem szĂŒksĂ©glet. Egy lassĂș vagy nem reagĂĄlĂł weboldal felhasznĂĄlĂłi frusztrĂĄciĂłhoz, magasabb visszafordulĂĄsi arĂĄnyhoz Ă©s közvetlen negatĂv hatĂĄssal jĂĄrhat az ĂŒzleti cĂ©lokra, legyen szĂł Ă©rtĂ©kesĂtĂ©srĆl, hirdetĂ©si bevĂ©telrĆl vagy felhasznĂĄlĂłi elkötelezettsĂ©grĆl. Ăvekig a fejlesztĆk olyan eszközökre tĂĄmaszkodtak, amelyek egyetlen idĆpontban mĂ©rik a teljesĂtmĂ©nyt, jellemzĆen a kezdeti oldalbetöltĂ©s sorĂĄn. BĂĄr hasznos, ez a megközelĂtĂ©s kihagyja a törtĂ©net kritikus rĂ©szĂ©t: a felhasznĂĄlĂł teljes Ă©lmĂ©nyĂ©t, ahogyan interakciĂłba lĂ©p az oldallal. Itt lĂ©p be a futĂĄsidejƱ teljesĂtmĂ©nyfigyelĂ©s, Ă©s ennek legerĆsebb eszköze a Performance Observer API.
A hagyomĂĄnyos mĂłdszerek gyakran a teljesĂtmĂ©nyadatok lekĂ©rdezĂ©sĂ©t foglaljĂĄk magukban olyan fĂŒggvĂ©nyekkel, mint a performance.getEntries(). Ez hatĂ©konytalan lehet, hajlamos kihagyni a lekĂ©rdezĂ©sek között törtĂ©nĆ kulcsfontossĂĄgĂș esemĂ©nyeket, sĆt, növelheti is azt a teljesĂtmĂ©nyterhelĂ©st, amit megprĂłbĂĄl mĂ©rni. A Performance Observer API forradalmasĂtja ezt a folyamatot azĂĄltal, hogy aszinkron, alacsony terhelĂ©sƱ mechanizmust biztosĂt a teljesĂtmĂ©nyesemĂ©nyek bekövetkezĂ©sĂŒkkor törtĂ©nĆ feliratkozĂĄsĂĄra. Ez az ĂștmutatĂł mĂ©lyrehatĂłan bemutatja ezt az alapvetĆ API-t, megmutatva, hogyan hasznĂĄlhatja ki erejĂ©t a Core Web Vitals monitorozĂĄsĂĄra, a szƱk keresztmetszetek azonosĂtĂĄsĂĄra, Ă©s vĂ©gsĆ soron gyorsabb, Ă©lvezetesebb webes Ă©lmĂ©nyek Ă©pĂtĂ©sĂ©re egy globĂĄlis közönsĂ©g szĂĄmĂĄra.
Mi a Performance Observer API?
LĂ©nyegĂ©t tekintve a Performance Observer API egy olyan interfĂ©sz, amely lehetĆvĂ© teszi a teljesĂtmĂ©nymĂ©rĂ©si esemĂ©nyek, Ășgynevezett teljesĂtmĂ©nybejegyzĂ©sek megfigyelĂ©sĂ©t Ă©s gyƱjtĂ©sĂ©t. Gondoljon rĂĄ Ășgy, mint egy dedikĂĄlt hallgatĂłra a böngĂ©szĆn belĂŒli teljesĂtmĂ©nnyel kapcsolatos tevĂ©kenysĂ©gekhez. Ahelyett, hogy Ăn aktĂvan megkĂ©rdeznĂ© a böngĂ©szĆtĆl, "TörtĂ©nt mĂĄr valami?", a böngĂ©szĆ proaktĂvan közli Ănnel: "Egy Ășj teljesĂtmĂ©nyesemĂ©ny törtĂ©nt! Itt vannak a rĂ©szletek."
Ez egy observer minta segĂtsĂ©gĂ©vel valĂłsul meg. LĂ©trehoz egy megfigyelĆ pĂ©ldĂĄnyt, megmondja neki, milyen tĂpusĂș teljesĂtmĂ©nyesemĂ©nyek Ă©rdeklik (pl. nagy festĂ©sek, felhasznĂĄlĂłi beviteli adatok, elrendezĂ©s eltolĂłdĂĄsok), Ă©s biztosĂt egy visszahĂvĂł fĂŒggvĂ©nyt. Amikor egy meghatĂĄrozott tĂpusĂș Ășj esemĂ©ny rögzĂtĂ©sre kerĂŒl a böngĂ©szĆ teljesĂtmĂ©ny-idĆvonalĂĄn, a visszahĂvĂł fĂŒggvĂ©nye meghĂvĂłdik az Ășj bejegyzĂ©sek listĂĄjĂĄval. Ez az aszinkron, push-alapĂș modell sokkal hatĂ©konyabb Ă©s megbĂzhatĂłbb, mint a rĂ©gi pull-alapĂș modell, amely ismĂ©telten meghĂvja a performance.getEntries() fĂŒggvĂ©nyt.
A rĂ©gi Ășt vs. az Ășj Ășt
A Performance Observer innovĂĄciĂłjĂĄnak megĂ©rtĂ©sĂ©hez hasonlĂtsuk össze a kĂ©t megközelĂtĂ©st:
- A rĂ©gi Ășt (LekĂ©rdezĂ©s): HasznĂĄlhatja a setTimeout vagy requestAnimationFrame fĂŒggvĂ©nyt a performance.getEntriesByName('my-metric') rendszeres meghĂvĂĄsĂĄra, hogy megnĂ©zze, rögzĂtettĂ©k-e a metrikĂĄjĂĄt. Ez problĂ©mĂĄs, mert tĂșl kĂ©sĆn ellenĆrizhet, Ă©s kihagyhatja az esemĂ©nyt, vagy tĂșl gyakran ellenĆrizhet, Ă©s CPU ciklusokat pazarolhat. A böngĂ©szĆ teljesĂtmĂ©ny-bufferĂ©nek megtelĂtĂ©sĂ©t is kockĂĄztatja, ha nem törli rendszeresen a bejegyzĂ©seket.
- Az Ășj Ășt (MegfigyelĂ©s): Egyszer beĂĄllĂt egy PerformanceObservert. Csendben fut a hĂĄttĂ©rben, minimĂĄlis erĆforrĂĄsokat fogyasztva. Amint egy relevĂĄns teljesĂtmĂ©nybejegyzĂ©s rögzĂtĂ©sre kerĂŒl â legyen az egy milliszekunddal az oldalbetöltĂ©s utĂĄn, vagy tĂz perccel a felhasznĂĄlĂłi munkamenet elejĂ©n â a kĂłdja azonnal Ă©rtesĂtĂ©st kap. Ez biztosĂtja, hogy soha ne maradjon le egyetlen esemĂ©nyrĆl sem, Ă©s a megfigyelĆ kĂłdja a lehetĆ leghatĂ©konyabb legyen.
Miért érdemes Performance Observert hasznålni?
A Performance Observer API fejlesztĂ©si munkafolyamatba valĂł integrĂĄlĂĄsa szĂĄmos elĆnnyel jĂĄr, amelyek kritikusak a modern webalkalmazĂĄsok szĂĄmĂĄra, amelyek globĂĄlis elĂ©rĂ©st cĂ©loznak meg.
- Nem tolakodĂł monitorozĂĄs: A megfigyelĆ visszahĂvĂĄsa jellemzĆen tĂ©tlen idĆszakokban fut le, biztosĂtva, hogy a teljesĂtmĂ©nyfigyelĆ kĂłdja ne zavarja a felhasznĂĄlĂłi Ă©lmĂ©nyt, Ă©s ne blokkolja a fĆ szĂĄlat. KönnyƱnek Ă©s elhanyagolhatĂł teljesĂtmĂ©nyigĂ©nyƱnek terveztĂ©k.
- ĂtfogĂł futĂĄsidejƱ adatok: A web dinamikus. A teljesĂtmĂ©nyproblĂ©mĂĄk nem csak a betöltĂ©si idĆben jelentkeznek. Egy felhasznĂĄlĂł elindĂthat egy komplex animĂĄciĂłt, több tartalmat tölthet be görgetĂ©ssel, vagy interakciĂłba lĂ©phet egy "nehĂ©z" komponenssel jĂłval azutĂĄn, hogy az eredeti oldal betöltĆdött. A Performance Observer rögzĂti ezeket a futĂĄsidejƱ esemĂ©nyeket, teljes kĂ©pet adva a teljes felhasznĂĄlĂłi munkamenetrĆl.
- JövĆĂĄllĂł Ă©s szabvĂĄnyosĂtott: Ez a W3C ĂĄltal ajĂĄnlott szabvĂĄny a teljesĂtmĂ©nyadatok gyƱjtĂ©sĂ©re. Az Ășj teljesĂtmĂ©nymetrikĂĄkat Ă©s API-kat Ășgy terveztĂ©k, hogy integrĂĄlĂłdjanak vele, Ăgy fenntarthatĂł Ă©s elĆremutatĂł vĂĄlasztĂĄs a projektjeihez.
- A valĂłs felhasznĂĄlĂłi monitorozĂĄs (RUM) alapja: Ahhoz, hogy valĂłban megĂ©rtse, hogyan teljesĂt a webhelye a felhasznĂĄlĂłk szĂĄmĂĄra kĂŒlönbözĆ orszĂĄgokban, eszközökön Ă©s hĂĄlĂłzati körĂŒlmĂ©nyek között, valĂłs munkamenetekbĆl szĂĄrmazĂł adatokra van szĂŒksĂ©ge. A Performance Observer ideĂĄlis eszköz egy robusztus RUM megoldĂĄs kiĂ©pĂtĂ©sĂ©hez, amely lehetĆvĂ© teszi a lĂ©tfontossĂĄgĂș metrikĂĄk gyƱjtĂ©sĂ©t Ă©s elkĂŒldĂ©sĂ©t egy analitikai szolgĂĄltatĂĄsnak aggregĂĄlĂĄshoz Ă©s elemzĂ©shez.
- MegszĂŒnteti a versenyhelyzeteket: LekĂ©rdezĂ©ssel megprĂłbĂĄlhat egy teljesĂtmĂ©nybejegyzĂ©st elĂ©rni, mielĆtt az rögzĂtĂ©sre kerĂŒlt volna. Az observer modell teljes mĂ©rtĂ©kben kikĂŒszöböli ezt a versenyhelyzetet, mivel a kĂłdja csak azutĂĄn fut le, hogy a bejegyzĂ©s elĂ©rhetĆvĂ© vĂĄlt.
KezdĆ lĂ©pĂ©sek: A Performance Observer alapjai
Az API hasznĂĄlata egyszerƱ. A folyamat hĂĄrom fĆ lĂ©pĂ©sbĆl ĂĄll: egy megfigyelĆ lĂ©trehozĂĄsa, egy visszahĂvĂĄs definiĂĄlĂĄsa Ă©s a megfigyelĆ szĂĄmĂĄra annak megadĂĄsa, hogy mit figyeljen.
1. MegfigyelĆ lĂ©trehozĂĄsa visszahĂvĂĄssal
ElĆször is, pĂ©ldĂĄnyosĂt egy PerformanceObserver objektumot, Ă©s ĂĄtad neki egy visszahĂvĂł fĂŒggvĂ©nyt. Ez a fĂŒggvĂ©ny minden alkalommal vĂ©grehajtĂłdik, amikor Ășj bejegyzĂ©seket Ă©szlel.
const observer = new PerformanceObserver((entryList) => { for (const entry of entryList.getEntries()) { console.log('BejegyzĂ©s tĂpusa:', entry.entryType); console.log('BejegyzĂ©s neve:', entry.name); console.log('Kezdeti idĆ:', entry.startTime); console.log('IdĆtartam:', entry.duration); } });
A visszahĂvĂĄs egy PerformanceObserverEntryList objektumot kap. Ezen a listĂĄn hĂvhatja meg a getEntries() metĂłdust, hogy lekĂ©rje az összes Ășjonnan megfigyelt teljesĂtmĂ©nybejegyzĂ©s tömbjĂ©t.
2. Specifikus bejegyzĂ©stĂpusok megfigyelĂ©se
Egy megfigyelĆ addig nem tesz semmit, amĂg Ăn meg nem mondja neki, mit figyeljen. Ezt az .observe() metĂłdus segĂtsĂ©gĂ©vel teheti meg. Ez a metĂłdus egy objektumot fogad el egy entryTypes tulajdonsĂĄggal (vagy egyes modern esetekben egyszerƱen csak type egyetlen tĂpushoz), amely egy karakterlĂĄncokbĂłl ĂĄllĂł tömb, amely a kĂvĂĄnt teljesĂtmĂ©nybejegyzĂ©s-tĂpusokat reprezentĂĄlja.
// KĂ©tfĂ©le bejegyzĂ©s megfigyelĂ©sĂ©nek indĂtĂĄsa observer.observe({ entryTypes: ['mark', 'measure'] });
NĂ©hĂĄny a leggyakoribb bejegyzĂ©stĂpusok közĂŒl:
- 'resource': RĂ©szletek a hĂĄlĂłzati kĂ©rĂ©sekrĆl olyan eszközökhöz, mint a szkriptek, kĂ©pek Ă©s stĂluslapok.
- 'paint': Az elsĆ festĂ©s Ă©s az elsĆ tartalmas festĂ©s idĆzĂtĂ©se.
- 'largest-contentful-paint': A Core Web Vital metrika az érzékelt betöltési sebességhez.
- 'layout-shift': A Core Web Vital metrika a vizuĂĄlis stabilitĂĄshoz.
- 'first-input': InformĂĄciĂł az elsĆ felhasznĂĄlĂłi interakciĂłrĂłl, amelyet az ElsĆ Beviteli KĂ©sleltetĂ©s (First Input Delay) Core Web Vitalhez hasznĂĄlnak.
- 'longtask': AzonosĂtja azokat a fĆ szĂĄlon futĂł feladatokat, amelyek 50 milliszekundumnĂĄl tovĂĄbb tartanak, Ă©s amelyek vĂĄlaszkĂ©ptelensĂ©get okozhatnak.
- 'mark' & 'measure': EgyĂ©ni jelölĆk Ă©s mĂ©rĂ©sek, amelyeket sajĂĄt kĂłdjĂĄban definiĂĄl az User Timing API hasznĂĄlatĂĄval.
3. A megfigyelĆ leĂĄllĂtĂĄsa
Amikor mĂĄr nincs szĂŒksĂ©ge adatok gyƱjtĂ©sĂ©re, jĂł gyakorlat a megfigyelĆ lekapcsolĂĄsa az erĆforrĂĄsok felszabadĂtĂĄsa Ă©rdekĂ©ben.
observer.disconnect();
Gyakorlati felhasznĂĄlĂĄsi esetek: Core Web Vitals monitorozĂĄsa
A Core Web Vitals olyan specifikus tĂ©nyezĆk összessĂ©ge, amelyeket a Google fontosnak tart egy weboldal ĂĄltalĂĄnos felhasznĂĄlĂłi Ă©lmĂ©nyĂ©ben. Ezek monitorozĂĄsa a Performance Observer API egyik legerĆsebb alkalmazĂĄsa. NĂ©zzĂŒk meg, hogyan mĂ©rhetjĂŒk meg mindegyiket.
A Largest Contentful Paint (LCP) monitorozĂĄsa
Az LCP a betöltĂ©si teljesĂtmĂ©nyt mĂ©ri. Azt a pontot jelöli az oldalbetöltĂ©si idĆvonalon, amikor a fĆ tartalom valĂłszĂnƱleg betöltĆdött. JĂł LCP Ă©rtĂ©k a 2,5 mĂĄsodperc vagy annĂĄl kevesebb.
Az LCP elem vĂĄltozhat az oldal betöltĆdĂ©se sorĂĄn. Kezdetben egy cĂmsor lehet az LCP elem, de kĂ©sĆbb egy nagyobb kĂ©p betöltĆdhet, Ă©s azzĂĄ vĂĄlhat az Ășj LCP elem. EzĂ©rt tökĂ©letes a Performance Observer â Ă©rtesĂti Ănt minden potenciĂĄlis LCP jelöltrĆl, ahogy az renderelĆdik.
// LCP megfigyelĂ©se Ă©s a vĂ©gsĆ Ă©rtĂ©k naplĂłzĂĄsa let lcpValue = 0; const lcpObserver = new PerformanceObserver((entryList) => { const entries = entryList.getEntries(); // Az utolsĂł bejegyzĂ©s a legfrissebb LCP jelölt const lastEntry = entries[entries.length - 1]; lcpValue = lastEntry.startTime; console.log(`LCP frissĂtve: ${lcpValue.toFixed(2)}ms`, lastEntry.element); }); lcpObserver.observe({ type: 'largest-contentful-paint', buffered: true }); // JĂł gyakorlat a megfigyelĆ lekapcsolĂĄsa a felhasznĂĄlĂłi interakciĂł utĂĄn, // mivel az interakciĂłk leĂĄllĂthatjĂĄk az Ășj LCP jelöltek kikĂŒldĂ©sĂ©t. // window.addEventListener('beforeunload', () => lcpObserver.disconnect());
Figyelje meg a buffered: true hasznĂĄlatĂĄt. Ez egy kulcsfontossĂĄgĂș opciĂł, amely utasĂtja a megfigyelĆt, hogy vegye figyelembe azokat a bejegyzĂ©seket is, amelyek *mielĆtt* az observe() metĂłdus meghĂvĂĄsra kerĂŒlt, rögzĂtĂ©sre kerĂŒltek. Ez megakadĂĄlyozza, hogy kihagyjon egy korai LCP esemĂ©nyt.
A First Input Delay (FID) és Interaction to Next Paint (INP) monitorozåsa
Ezek a metrikĂĄk az interaktivitĂĄst mĂ©rik. MennyisĂ©gileg meghatĂĄrozzĂĄk a felhasznĂĄlĂł Ă©lmĂ©nyĂ©t, amikor elĆször prĂłbĂĄl interakciĂłba lĂ©pni az oldallal.
First Input Delay (FID) azt az idĆt mĂ©ri, ami attĂłl a pillanattĂłl telik el, amikor egy felhasznĂĄlĂł elĆször interakciĂłba lĂ©p egy oldallal (pl. gombra kattint), addig a pillanatig, amĂg a böngĂ©szĆ tĂ©nylegesen el tudja kezdeni az esemĂ©nykezelĆk feldolgozĂĄsĂĄt az interakciĂłra vĂĄlaszul. JĂł FID Ă©rtĂ©k a 100 milliszekundum vagy annĂĄl kevesebb.
Az Interaction to Next Paint (INP) egy Ășjabb, ĂĄtfogĂłbb metrika, amely 2024 mĂĄrciusĂĄban felvĂĄltotta az FID-et Core Web Vital-kĂ©nt. MĂg az FID csak az *elsĆ* interakciĂł *kĂ©sleltetĂ©sĂ©t* mĂ©ri, addig az INP az *összes* felhasznĂĄlĂłi interakciĂł *teljes kĂ©sleltetĂ©sĂ©t* Ă©rtĂ©keli az oldal Ă©letciklusa sorĂĄn, a legrosszabbat jelentve. Ez jobb kĂ©pet ad az ĂĄltalĂĄnos vĂĄlaszkĂ©szsĂ©grĆl. JĂł INP Ă©rtĂ©k a 200 milliszekundum vagy annĂĄl kevesebb.
Az FID-et a 'first-input' bejegyzĂ©stĂpus hasznĂĄlatĂĄval monitorozhatja:
// FID megfigyelĂ©se const fidObserver = new PerformanceObserver((entryList) => { for (const entry of entryList.getEntries()) { const fid = entry.processingStart - entry.startTime; console.log(`FID: ${fid.toFixed(2)}ms`); // LekapcsolĂĄs az elsĆ bemenet jelentĂ©se utĂĄn fidObserver.disconnect(); } }); fidObserver.observe({ type: 'first-input', buffered: true });
Az INP monitorozĂĄsa kissĂ© összetettebb, mivel egy esemĂ©ny teljes idĆtartamĂĄt vizsgĂĄlja. Megfigyeli az 'event' bejegyzĂ©stĂpust, kiszĂĄmĂtja az idĆtartamot, Ă©s nyomon követi a leghosszabbat.
// EgyszerƱsĂtett INP monitorozĂĄsi pĂ©lda let worstInp = 0; const inpObserver = new PerformanceObserver((entryList) => { for (const entry of entryList.getEntries()) { // Az INP az esemĂ©ny idĆtartama const inp = entry.duration; // Csak az aktuĂĄlis legrosszabbnĂĄl hosszabb interakciĂłkkal foglalkozunk if (inp > worstInp) { worstInp = inp; console.log(`Ăj legrosszabb INP: ${worstInp.toFixed(2)}ms`); } } }); inpObserver.observe({ type: 'event', durationThreshold: 16, buffered: true }); // A durationThreshold segĂt kiszƱrni a nagyon rövid, valĂłszĂnƱleg jelentĂ©ktelen esemĂ©nyeket.
A Cumulative Layout Shift (CLS) monitorozĂĄsa
A CLS a vizuĂĄlis stabilitĂĄst mĂ©ri. SegĂt szĂĄmszerƱsĂteni, hogy a felhasznĂĄlĂłk milyen gyakran tapasztalnak vĂĄratlan elrendezĂ©s-eltolĂłdĂĄsokat â egy frusztrĂĄlĂł Ă©lmĂ©nyt, ahol a tartalom figyelmeztetĂ©s nĂ©lkĂŒl mozog az oldalon. JĂł CLS Ă©rtĂ©k a 0.1 vagy annĂĄl kevesebb.
Az Ă©rtĂ©k az összes egyedi elrendezĂ©s-eltolĂłdĂĄs Ă©rtĂ©kĂ©nek aggregĂĄciĂłja. Itt alapvetĆ fontossĂĄgĂș a Performance Observer, mivel minden eltolĂłdĂĄst jelent, amint az megtörtĂ©nik.
// A teljes CLS Ă©rtĂ©k megfigyelĂ©se Ă©s kiszĂĄmĂtĂĄsa let clsScore = 0; const clsObserver = new PerformanceObserver((entryList) => { for (const entry of entryList.getEntries()) { // Nem akarjuk beleszĂĄmolni azokat az eltolĂłdĂĄsokat, amelyeket felhasznĂĄlĂłi bemenet okozott if (!entry.hadRecentInput) { clsScore += entry.value; console.log(`Jelenlegi CLS Ă©rtĂ©k: ${clsScore.toFixed(4)}`); } } }); clsObserver.observe({ type: 'layout-shift', buffered: true });
A hadRecentInput tulajdonsĂĄg fontos. SegĂt kiszƱrni a jogszerƱ elrendezĂ©s-eltolĂłdĂĄsokat, amelyek a felhasznĂĄlĂł mƱveletĂ©re vĂĄlaszul törtĂ©nnek (pĂ©ldĂĄul egy menĂŒt kinyitĂł gombra kattintĂĄs), Ă©s amelyeket nem szabad a CLS Ă©rtĂ©kbe beleszĂĄmĂtani.
A Core Web Vitals-on tĂșl: MĂĄs hatĂ©kony bejegyzĂ©stĂpusok
BĂĄr a Core Web Vitals nagyszerƱ kiindulĂłpont, a Performance Observer sokkal többet is kĂ©pes monitorozni. Ăme nĂ©hĂĄny mĂĄs hihetetlenĂŒl hasznos bejegyzĂ©stĂpus.
HosszĂș feladatok nyomon követĂ©se (`longtask`)
A Long Tasks API olyan feladatokat tĂĄr fel, amelyek 50 milliszekundumig vagy tovĂĄbb foglaljĂĄk el a fĆ szĂĄlat. Ezek problĂ©mĂĄsak, mert amĂg a fĆ szĂĄl foglalt, az oldal nem tud reagĂĄlni a felhasznĂĄlĂłi bevitelre, ami lomha vagy fagyott Ă©lmĂ©nyt eredmĂ©nyez. Ezen feladatok azonosĂtĂĄsa kulcsfontossĂĄgĂș az INP javĂtĂĄsĂĄhoz.
// HosszĂș feladatok megfigyelĂ©se const longTaskObserver = new PerformanceObserver((entryList) => { for (const entry of entryList.getEntries()) { console.log(`HosszĂș feladat Ă©szlelve: ${entry.duration.toFixed(2)}ms`); // Az 'attribution' tulajdonsĂĄg nĂ©ha megmondhatja, mi okozta a hosszĂș feladatot console.log('AttribĂșciĂł:', entry.attribution); } }); longTaskObserver.observe({ type: 'longtask', buffered: true });
ErĆforrĂĄs idĆzĂtĂ©sek elemzĂ©se (`resource`)
Az eszközök betöltĂ©sĂ©nek megĂ©rtĂ©se alapvetĆ fontossĂĄgĂș a teljesĂtmĂ©nyhangolĂĄshoz. A 'resource' bejegyzĂ©stĂpus rĂ©szletes hĂĄlĂłzati idĆzĂtĂ©si adatokat biztosĂt az oldal minden erĆforrĂĄsĂĄrĂłl, beleĂ©rtve a DNS-lekĂ©rdezĂ©st, a TCP-kapcsolatot Ă©s a tartalom letöltĂ©si idejĂ©t.
// ErĆforrĂĄs idĆzĂtĂ©sek megfigyelĂ©se const resourceObserver = new PerformanceObserver((entryList) => { for (const entry of entryList.getEntries()) { // KeressĂŒk a lassan betöltĆdĆ kĂ©peket if (entry.initiatorType === 'img' && entry.duration > 500) { console.warn(`LassĂș kĂ©p Ă©szlelve: ${entry.name}`, `IdĆtartam: ${entry.duration.toFixed(2)}ms`); } } }); // A 'buffered: true' hasznĂĄlata szinte mindig szĂŒksĂ©ges az erĆforrĂĄs idĆzĂtĂ©sekhez // ahhoz, hogy elkapja azokat az eszközöket, amelyek a szkript futtatĂĄsa elĆtt betöltĆdtek. resourceObserver.observe({ type: 'resource', buffered: true });
EgyĂ©ni teljesĂtmĂ©nymĂ©rĂ©sek (`mark` Ă©s `measure`)
NĂ©ha mĂ©rnie kell az alkalmazĂĄsspecifikus logika teljesĂtmĂ©nyĂ©t. A User Timing API lehetĆvĂ© teszi egyĂ©ni idĆbĂ©lyegek lĂ©trehozĂĄsĂĄt Ă©s az azok közötti idĆtartam mĂ©rĂ©sĂ©t.
- performance.mark('start-operation'): LĂ©trehoz egy 'start-operation' nevƱ idĆbĂ©lyeget.
- performance.mark('end-operation'): LĂ©trehoz egy mĂĄsik idĆbĂ©lyeget.
- performance.measure('my-operation', 'start-operation', 'end-operation'): MĂ©rĂ©st hoz lĂ©tre a kĂ©t jelölĆ között.
A Performance Observer kĂ©pes figyelni ezeket az egyĂ©ni 'mark' Ă©s 'measure' bejegyzĂ©seket, ami tökĂ©letes az idĆzĂtĂ©si adatok gyƱjtĂ©sĂ©re olyan dolgokrĂłl, mint egy komponens renderelĂ©si ideje egy JavaScript keretrendszerben, vagy egy kritikus API hĂvĂĄs Ă©s az azt követĆ adatfeldolgozĂĄs idĆtartama.
// Az alkalmazåskódban: performance.mark('start-data-processing'); // ... valamilyen komplex adatfeldolgozås ... performance.mark('end-data-processing'); performance.measure('data-processing-duration', 'start-data-processing', 'end-data-processing'); // A monitorozó szkriptben: const customObserver = new PerformanceObserver((entryList) => { for (const entry of entryList.getEntriesByName('data-processing-duration')) { console.log(`Egyéni mérés '${entry.name}': ${entry.duration.toFixed(2)}ms`); } }); customObserver.observe({ entryTypes: ['measure'] });
Haladó fogalmak és bevålt gyakorlatok
A Performance Observer API hatékony hasznålatåhoz professzionålis produkciós környezetben vegye figyelembe az alåbbi bevålt gyakorlatokat.
- Mindig vegye figyelembe a `buffered: true` opciĂłt: Az olyan bejegyzĂ©stĂpusoknĂĄl, amelyek az oldalbetöltĂ©s korai szakaszĂĄban is elĆfordulhatnak (pĂ©ldĂĄul 'resource', 'paint', vagy 'largest-contentful-paint'), elengedhetetlen a buffered jelzĆ hasznĂĄlata, hogy elkerĂŒlje azok hiĂĄnyĂĄt.
- BöngĂ©szĆ tĂĄmogatĂĄs ellenĆrzĂ©se: BĂĄr szĂ©les körben tĂĄmogatott a modern böngĂ©szĆkben, mindig Ă©rdemes ellenĆrizni a lĂ©tezĂ©sĂ©t, mielĆtt hasznĂĄlnĂĄ. Azt is ellenĆrizheti, hogy mely bejegyzĂ©stĂpusokat tĂĄmogatja egy adott böngĂ©szĆ.
- if ('PerformanceObserver' in window && PerformanceObserver.supportedEntryTypes.includes('longtask')) { // A PerformanceObserver biztonsĂĄgosan hasznĂĄlhatĂł hosszĂș feladatokhoz }
- Adatok kĂŒldĂ©se analitikai szolgĂĄltatĂĄsnak: Az adatok konzolra valĂł naplĂłzĂĄsa nagyszerƱ a fejlesztĂ©shez, de a valĂłs monitorozĂĄshoz aggregĂĄlnia kell ezeket az adatokat. A legjobb mĂłdja e telemetriai adatok kliensrĆl valĂł elkĂŒldĂ©sĂ©nek a navigator.sendBeacon() API hasznĂĄlata. Ez egy nem blokkolĂł mechanizmus, amelyet kis mennyisĂ©gƱ adat szerverre valĂł kĂŒldĂ©sĂ©re terveztek, Ă©s megbĂzhatĂłan mƱködik mĂ©g akkor is, ha egy oldalt Ă©ppen eltĂĄvolĂtanak.
- MegfigyelĆk csoportosĂtĂĄsa feladat szerint: BĂĄr hasznĂĄlhat egyetlen megfigyelĆt több bejegyzĂ©stĂpushoz, gyakran tisztĂĄbb kĂŒlön megfigyelĆket lĂ©trehozni kĂŒlönbözĆ feladatokhoz (pl. egyet a Core Web Vitals-hoz, egyet az erĆforrĂĄs-idĆzĂtĂ©sekhez, egyet az egyĂ©ni metrikĂĄkhoz). Ez javĂtja a kĂłd olvashatĂłsĂĄgĂĄt Ă©s karbantarthatĂłsĂĄgĂĄt.
- A teljesĂtmĂ©ny terhelĂ©sĂ©nek megĂ©rtĂ©se: Az API-t nagyon alacsony terhelĂ©sƱnek terveztĂ©k. Azonban egy nagyon komplex visszahĂvĂł fĂŒggvĂ©ny, amely nagy szĂĄmĂtĂĄsokat vĂ©gez, potenciĂĄlisan befolyĂĄsolhatja a teljesĂtmĂ©nyt. Tartsa megfigyelĆ visszahĂvĂĄsait vĂ©konyan Ă©s hatĂ©konyan. A nehĂ©z feldolgozĂĄst halassza el egy web workerre, vagy kĂŒldje el a nyers adatokat a backendjĂ©re feldolgozĂĄsra.
KövetkeztetĂ©s: TeljesĂtmĂ©ny-központĂș kultĂșra Ă©pĂtĂ©se
A Performance Observer API több, mint egy Ășjabb eszköz; alapvetĆ vĂĄltozĂĄst jelent abban, ahogyan a webes teljesĂtmĂ©nyt megközelĂtjĂŒk. Ătvezet minket a reaktĂv, egyszeri mĂ©rĂ©sektĆl a proaktĂv, folyamatos monitorozĂĄshoz, amely tĂŒkrözi felhasznĂĄlĂłink valĂłdi, dinamikus Ă©lmĂ©nyĂ©t szerte a vilĂĄgon. AzĂĄltal, hogy megbĂzhatĂł Ă©s hatĂ©kony mĂłdot biztosĂt a Core Web Vitals, hosszĂș feladatok, erĆforrĂĄs-idĆzĂtĂ©sek Ă©s egyĂ©ni metrikĂĄk rögzĂtĂ©sĂ©re, felvĂ©rtezi a fejlesztĆket arra, hogy azonosĂtsĂĄk Ă©s megoldjĂĄk a teljesĂtmĂ©ny szƱk keresztmetszeteit, mielĆtt azok jelentĆs szĂĄmĂș felhasznĂĄlĂłt Ă©rintenĂ©nek.
A Performance Observer API bevezetĂ©se kritikus lĂ©pĂ©s a teljesĂtmĂ©ny-központĂș kultĂșra kiĂ©pĂtĂ©se felĂ© bĂĄrmely fejlesztĆcsapatban. Ha mĂ©rni tudja, ami szĂĄmĂt, javĂthatja is, ami szĂĄmĂt. Kezdje el mĂ©g ma integrĂĄlni ezeket a megfigyelĆket a projektjeibe. FelhasznĂĄlĂłi â bĂĄrhol is legyenek a vilĂĄgon â hĂĄlĂĄsak lesznek a gyorsabb, simĂĄbb Ă©s Ă©lvezetesebb Ă©lmĂ©nyĂ©rt.