Minge DevToolsi käsitsi kontrollist kaugemale. See juhend näitab, kuidas automatiseerida JavaScripti jõudluse seiret oma CI/CD torujuhtmes, et tagada kiire kogemus kõigile kasutajatele.
Proaktiivne torujuhe: JavaScripti jõudluse automatiseerimine globaalsele publikule
Digitaalmajanduses on kiirus universaalne keel. Kasutajal Tokyos, Londonis või São Paulos on sama ootus: kiire ja sujuv digitaalne kogemus. Kui veebirakendus hangub, jookseb kokku või võtab laadimiseks sekundeid, ei ole see lihtsalt ebamugavus; see on selle ootuse rikkumine. See on kasutajate kaasamise, konversioonimäärade ja brändi maine vaikne tapja. Aastaid on jõudluse analüüs olnud reaktiivne distsipliin – meeletu süvasukeldumine Chrome DevToolsi pärast seda, kui kasutajad on hakanud kaebama. See lähenemine ei ole enam jätkusuutlik pideva juurutamise ja globaalsete kasutajaskondade maailmas.
Tere tulemast proaktiivsesse torujuhtmesse. See on paradigma nihe käsitsi, juhuslikelt jõudluskontrollidelt süstemaatilisele, automatiseeritud ja pidevale seire- ja jõustamisprotsessile. See seisneb jõudluse kinnistamises teie arenduse elutsükli põhiprintsiibina, täpselt nagu ühiktestimine või turvaskaneerimine. Automatiseerides JavaScripti jõudluse profiilimist, saate tabada regressioone enne, kui need kunagi tootmisse jõuavad, teha andmepõhiseid optimeerimisotsuseid ja tagada, et iga kasutaja, olenemata asukohast või seadmest, saab parima võimaliku kogemuse.
See põhjalik juhend juhatab teid läbi selle, miks, mida ja kuidas ehitada oma pideva jõudluse seire torujuhe. Uurime tööriistu, defineerime olulised mõõdikud ja pakume praktilisi näiteid, kuidas integreerida need kontrollid otse oma CI/CD töövoogu.
Käsitsi profiilimisest automatiseeritud ülevaadeteni: vajalik areng
Enamik esirakenduse arendajaid on tuttavad oma brauseri arendaja tööriistade vahekaartidega „Performance“ ja „Lighthouse“. Need on uskumatult võimsad instrumendid probleemide diagnoosimiseks konkreetsel lehel. Kuid neile ainuüksi lootmine on nagu püüda tagada pilvelõhkuja konstruktsiooni terviklikkust, kontrollides ainult ühte tugitala kord aastas.
Käsitsi profiilimise piirangud
- See on reaktiivne, mitte proaktiivne: Käsitsi kontrollid toimuvad tavaliselt siis, kui probleem on juba tuvastatud. Te kustutate tuld, mitte ei hoia seda ära. Selleks ajaks, kui arendaja avab DevToolsi aeglustumise uurimiseks, on teie kasutajad juba valu tundnud.
- See on ebajärjekindel: Tulemused, mida saate tipptasemel arendusmasinas, mis on ühendatud kiire kontorivõrguga, on oluliselt erinevad sellest, mida kasutaja kogeb keskmise klassi mobiilseadmes piirkonnas, kus on ebaühtlane ühenduvus. Käsitsi testidel puudub kontrollitud, korratav keskkond.
- See on aeganõudev ja mitte skaleeritav: Põhjalik jõudluse profiilimine nõuab märkimisväärset aega ja asjatundlikkust. Rakenduse keerukuse ja meeskonna suuruse kasvades muutub arendajatel võimatuks iga üksikut muudatust (commit) käsitsi jõudlusregressioonide osas kontrollida.
- See loob teadmiste siilosid: Sageli on vaid mõnel meeskonna „jõudluse tšempionil” sügavad teadmised keeruliste leekdiagrammide ja jälitusfailide tõlgendamiseks, mis loob optimeerimispüüdlustele kitsaskoha.
Automatiseerimise ja pideva seire argument
Jõudluse profiilimise automatiseerimine muudab selle juhuslikust auditist pidevaks tagasiside ahelaks. See lähenemine, mida CI/CD kontekstis sageli nimetatakse „sünteetiliseks seireks”, pakub sügavaid eeliseid.
- Avastage regressioonid varakult: Käivitades jõudlustestid iga muudatuse või pull-päringu (pull request) peal, saate kohe tuvastada täpse muudatuse, mis aeglustumise põhjustas. See „vasakule nihutamise” lähenemine muudab probleemide lahendamise eksponentsiaalselt odavamaks ja kiiremaks.
- Looge jõudluse baastase: Automatiseerimine võimaldab teil luua oma rakenduse jõudluse ajaloolise ülevaate. Need trendiandmed on hindamatud arenduse pikaajalise mõju mõistmiseks ja tehnilise võla osas teadlike otsuste tegemiseks.
- Rakendage jõudluseelarveid: Automatiseerimine võimaldab määratleda ja jõustada „jõudluseelarvet” – lävendite kogumit põhimõõdikutele, mida build peab läbimiseks täitma. Kui muudatus muudab Largest Contentful Painti (LCP) 20% aeglasemaks, võib build automaatselt ebaõnnestuda, vältides regressiooni juurutamist.
- Demokratiseerige jõudlus: Kui jõudluse tagasiside edastatakse automaatselt arendaja olemasolevas töövoos (nt kommentaar pull-päringule), annab see igale insenerile võimaluse võtta jõudluse eest vastutus. See ei ole enam ainult spetsialisti ainuvastutus.
Pideva jõudluse seire põhimõisted
Enne tööriistadesse süvenemist on oluline mõista põhimõisteid, mis moodustavad iga eduka jõudluse seirestrateegia aluse.
Jälgitavad peamised jõudlusmõõdikud („Mida“)
Mida ei mõõdeta, seda ei saa parandada. Kuigi potentsiaalseid mõõdikuid on kümneid, on kõige tõhusam strateegia keskenduda mõnele kasutajakesksele mõõdikule. Google'i Core Web Vitals on suurepärane lähtepunkt, kuna need on loodud tegeliku kasutajakogemuse mõõtmiseks.
- Largest Contentful Paint (LCP): Mõõdab laadimise jõudlust. See märgib hetke lehe laadimise ajajoonel, mil põhisisu on tõenäoliselt laaditud. Hea LCP on 2,5 sekundit või vähem.
- Interaction to Next Paint (INP): Mõõdab interaktiivsust. INP hindab lehe üldist reageerimisvõimet kasutaja interaktsioonidele. See jälgib kõigi klõpsude, puudutuste ja klaviatuuri interaktsioonide latentsust. Hea INP on alla 200 millisekundi. (INP asendas First Input Delay (FID) Core Web Vitali mõõdikuna 2024. aasta märtsis).
- Cumulative Layout Shift (CLS): Mõõdab visuaalset stabiilsust. See kvantifitseerib, kui palju ootamatut paigutuse nihet kasutajad kogevad. Hea CLS-skoor on 0,1 või vähem.
Lisaks Core Web Vitalsile on teisi olulisi mõõdikuid:
- Time to First Byte (TTFB): Mõõdab serveri reageerimisaega. See on alusmõõdik, sest aeglane TTFB mõjutab negatiivselt kõiki järgnevaid mõõdikuid.
- First Contentful Paint (FCP): Märgib aja, mil esimene DOM-i sisu tükk renderdatakse. See annab kasutajale esimese tagasiside, et leht tegelikult laeb.
- Total Blocking Time (TBT): Mõõdab kogu aega FCP ja Time to Interactive (TTI) vahel, mil põhilõim oli piisavalt kaua blokeeritud, et takistada sisendi reageerimisvõimet. See on suurepärane laborimõõdik, mis korreleerub hästi INP-ga.
Jõudluseelarve seadmine („Miks“)
Jõudluseelarve on selge piirangute kogum, mille raames teie meeskond nõustub töötama. See ei ole lihtsalt eesmärk; see on range piirang. Eelarve muudab jõudluse ebamäärasest „teeme selle kiireks” eesmärgist konkreetseks, mõõdetavaks nõudeks teie rakendusele.
Lihtne jõudluseelarve võib välja näha selline:
- LCP peab olema alla 2,5 sekundi.
- TBT peab olema alla 200 millisekundi.
- Kogu JavaScripti paketi suurus ei tohi ületada 250 KB (gzipped).
- Lighthouse'i jõudlusskoor peab olema 90 või kõrgem.
Nende piirangute määratlemisega on teie automatiseeritud torujuhtmel selge läbimise/ebaõnnestumise kriteerium. Kui pull-päring põhjustab Lighthouse'i skoori langemise 85-le, ebaõnnestub CI kontroll ja arendajat teavitatakse sellest kohe – enne koodi ühendamist.
Jõudluse seire torujuhe („Kuidas“)
Tüüpiline automatiseeritud jõudluse torujuhe järgib neid samme:
- Käiviti: Arendaja lisab uue koodi versioonihaldussüsteemi (nt Git).
- Ehitamine: CI/CD server (nt GitHub Actions, Jenkins, GitLab CI) võtab koodi ja käivitab rakenduse ehitusprotsessi.
- Juurutamine ja testimine: Rakendus juurutatakse ajutisse testimis- või eelvaatekeskkonda. Seejärel käivitab automatiseeritud tööriist selle keskkonna vastu jõudlustestide komplekti.
- Analüüs ja kinnitamine: Tööriist kogub jõudlusmõõdikuid ja võrdleb neid eelnevalt määratletud jõudluseelarvega.
- Aruandlus ja tegevus: Kui eelarve on täidetud, läbib kontroll. Kui ei, siis build ebaõnnestub ja meeskonnale saadetakse teade koos üksikasjaliku aruandega, mis selgitab regressiooni.
Kaasaegne tööriistakomplekt automatiseeritud JavaScripti profiilimiseks
Mitmed suurepärased avatud lähtekoodiga tööriistad moodustavad kaasaegse jõudluse automatiseerimise selgroo. Uurime neist kõige silmapaistvamaid.
Brauseri automatiseerimine Playwrighti ja Puppeteeriga
Playwright (Microsoftilt) ja Puppeteer (Google'ilt) on Node.js teegid, mis pakuvad kõrgetasemelist API-d peata (headless) Chrome'i, Firefoxi ja WebKiti brauserite juhtimiseks. Kuigi neid kasutatakse sageli täielike (end-to-end) testide jaoks, on need ka fenomenaalsed jõudluse profiilimiseks.
Saate neid kasutada keerukate kasutaja interaktsioonide skriptimiseks ja üksikasjalike jõudluse jälitusfailide kogumiseks, mida saab analüüsida DevToolsis. See on ideaalne konkreetse kasutajateekonna jõudluse mõõtmiseks, mitte ainult esialgse lehe laadimise jaoks.
Siin on lihtne näide Playwrighti kasutamisest jõudluse jälitusfaili genereerimiseks:
Näide: Jälitusfaili genereerimine Playwrightiga
const { chromium } = require('playwright');(async () => {const browser = await chromium.launch({ headless: true });const page = await browser.newPage();// Alusta jälitamist, salvestades faili.await page.tracing.start({ path: 'performance-trace.json', screenshots: true });await page.goto('https://your-app.com/dashboard');// Interakteeru lehega, et profileerida konkreetset tegevustawait page.click('button#load-data-button');await page.waitForSelector('.data-grid-loaded'); // Oota tulemust// Lõpeta jälitamineawait page.tracing.stop();await browser.close();console.log('Jõudluse jälitusfail salvestatud faili performance-trace.json');})();
Seejärel saate laadida `performance-trace.json` faili Chrome DevToolsi Performance paneeli, et saada rikkalikku, kaader-kaadri haaval analüüsi sellest, mis selle kasutaja interaktsiooni ajal juhtus. Kuigi see on võimas diagnostikavahend, vajame automatiseeritud kinnitamiseks veel ühte kihti: Lighthouse.
Google Lighthouse'i kasutamine põhjalikeks audititeks
Lighthouse on tööstusharu standardne avatud lähtekoodiga tööriist veebilehtede kvaliteedi auditeerimiseks. See käivitab lehe vastu hulga teste ja genereerib aruande jõudluse, ligipääsetavuse, parimate tavade ja SEO kohta. Meie torujuhtme jaoks kõige olulisem on see, et seda saab käivitada programmiliselt ja konfigureerida jõudluseelarvete jõustamiseks.
Parim viis Lighthouse'i integreerimiseks CI/CD torujuhtmesse on Lighthouse CI. See on tööriistade komplekt, mis lihtsustab Lighthouse'i käitamist, tulemuste kinnitamist eelarvete suhtes ja skooride jälgimist aja jooksul.
Alustamiseks looksite oma projekti juurkataloogi konfiguratsioonifaili nimega `lighthouserc.js`:
Näide: lighthouserc.js konfiguratsioon
module.exports = {ci: {collect: {// Valik 1: Käivita reaalajas URL-i vastu// url: ['https://staging.your-app.com'],// Valik 2: Käivita lokaalselt serveeritud build-väljundi vastustaticDistDir: './build',startServerCommand: 'npm run start:static',},assert: {preset: 'lighthouse:recommended', // Alusta mõistlike vaikeseadetegaassertions: {// Kohandatud väited (teie jõudluseelarve)'categories:performance': ['error', { minScore: 0.9 }], // Skoor peab olema >= 90'categories:accessibility': ['warn', { minScore: 0.95 }], // Skoor peab olema >= 95'core-web-vitals/largest-contentful-paint': ['error', { maxNumericValue: 2500 }],'core-web-vitals/total-blocking-time': ['error', { maxNumericValue: 200 }],},},upload: {target: 'temporary-public-storage', // Lihtsaim viis alustamiseks},},};
Selle konfiguratsiooniga saate käivitada `lhci autorun` oma käsurealt või CI skriptist. See käivitab automaatselt teie serveri, käitab Lighthouse'i stabiilsuse tagamiseks mitu korda, kontrollib tulemusi teie väidete suhtes ja ebaõnnestub, kui eelarve ei ole täidetud.
Sünteetiline seire vs. reaalsete kasutajate seire (RUM)
On ülioluline mõista kahe peamise jõudluse seire tüübi erinevust.
- Sünteetiline seire (laboriandmed): See on see, millest oleme rääkinud – automatiseeritud testide käitamine kontrollitud, järjepidevas keskkonnas („laboris”). See on ideaalne CI/CD jaoks, sest see isoleerib teie koodimuudatuste mõju. Te kontrollite võrgu kiirust, seadme tüüpi ja asukohta. Selle tugevus on järjepidevus ja regressioonide tuvastamine.
- Reaalsete kasutajate seire (RUM) (väljaandmed): See hõlmab jõudlusandmete kogumist teie kasutajate tegelikest brauseritest üle maailma („väljal”). RUM-tööriistad (nagu Sentry, Datadog või New Relic) kasutavad teie saidil väikest JavaScripti koodijuppi, et anda aru Core Web Vitalsist ja muudest mõõdikutest, nagu neid kogevad reaalsed inimesed. Selle tugevus on tõelise pildi pakkumine globaalsest kasutajakogemusest lugematute seadme- ja võrgukombinatsioonide lõikes.
Need kaks ei välista teineteist; nad täiendavad teineteist. Kasutage sünteetilist seiret oma CI/CD torujuhtmes, et vältida regressioonide kunagi juurutamist. Kasutage RUM-i tootmises, et mõista oma tegelike kasutajate kogemust ja tuvastada parendusvaldkonnad, mida teie laboritestid võivad kahe silma vahele jätta.
Jõudluse profiilimise integreerimine teie CI/CD torujuhtmesse
Teooria on tore, kuid praktiline rakendamine on see, mis loeb. Ehitame lihtsa jõudluskontrolli, kasutades Lighthouse CI-d GitHub Actionsi töövoos.
Praktiline näide GitHub Actionsiga
See töövoog käivitub iga pull-päringu peale. See ehitab rakenduse, käivitab selle vastu Lighthouse CI ja postitab tulemused kommentaarina pull-päringule.
Looge fail asukohas `.github/workflows/performance-ci.yml`:
Näide: .github/workflows/performance-ci.yml
name: Jõudluse CIon: [pull_request]jobs:lighthouse:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Kasuta Node.js 20.xuses: actions/setup-node@v3with:node-version: '20.x'cache: 'npm'- name: Paigalda sõltuvusedrun: npm ci- name: Ehita produktsiooni varadrun: npm run build- name: Käivita Lighthouse CIrun: |npm install -g @lhci/cli@0.12.xlhci autorunenv:LHCI_GITHUB_APP_TOKEN: ${{ secrets.LHCI_GITHUB_APP_TOKEN }}
Selle toimimiseks on vaja kahte asja:
- `lighthouserc.js` fail teie repositooriumis, nagu näidatud eelmises jaotises.
- Lighthouse CI GitHubi rakendus, mis on installitud teie repositooriumile. See võimaldab Lighthouse CI-l postitada kommentaare ja olekukontrolle. Paigaldamise käigus saate loa (`LHCI_GITHUB_APP_TOKEN`), mille peate salvestama oma GitHubi repositooriumi seadetes saladusena.
Nüüd, kui arendaja avab pull-päringu, ilmub olekukontroll. Kui jõudluseelarve ebaõnnestub, on kontroll punane. Postitatakse üksikasjalik kommentaar Lighthouse'i skooridega, mis näitab täpselt, millised mõõdikud on halvenenud.
Jõudlusandmete salvestamine ja visualiseerimine
Kuigi `temporary-public-storage` on alustamiseks suurepärane, soovite pikaajaliseks analüüsiks oma Lighthouse'i aruandeid salvestada. Lighthouse CI Server on tasuta avatud lähtekoodiga lahendus, mida saate ise hostida. See pakub armatuurlauda jõudlustrendide visualiseerimiseks aja jooksul, aruannete võrdlemiseks harude vahel ja järkjärgulise jõudluse halvenemise tuvastamiseks, mis võib ühe käivitamise käigus märkamatuks jääda.
Oma `lighthouserc.js` faili konfigureerimine oma serverisse üleslaadimiseks on lihtne. Need ajaloolised andmed muudavad teie torujuhtme lihtsast väravavahist võimsaks analüütikavahendiks.
Teavitamine ja aruandlus
Mõistatuse viimane tükk on tõhus suhtlus. Ebaõnnestunud build on kasulik ainult siis, kui õigeid inimesi teavitatakse kiiresti. Lisaks GitHubi olekukontrollidele kaaluge teadete seadistamist oma meeskonna peamises suhtluskanalis, näiteks Slackis või Microsoft Teamsis. Hea teade peaks sisaldama:
- Konkreetset pull-päringut või muudatust, mis ebaõnnestumise põhjustas.
- Milline jõudlusmõõdik(ud) rikkus(id) eelarvet ja kui palju.
- Otselink täielikule Lighthouse'i aruandele sügavama analüüsi jaoks.
Täiustatud strateegiad ja globaalsed kaalutlused
Kui teil on põhiline torujuhe paigas, saate seda täiustada, et see peegeldaks paremini teie globaalset kasutajaskonda.
Erinevate võrgu- ja protsessoritingimuste simuleerimine
Teie kasutajad ei ole kõik fiiberoptilistel ühendustel tipptasemel protsessoritega. On ülioluline testida realistlikumates tingimustes. Lighthouse'il on sisseehitatud drosseldamine (throttling), mis simuleerib vaikimisi aeglasemat võrku ja protsessorit (jäljendades keskmise taseme mobiilseadet 4G-ühendusel).
Saate neid seadeid oma Lighthouse'i konfiguratsioonis kohandada, et testida erinevaid stsenaariume, tagades, et teie rakendus jääb kasutatavaks klientidele turgudel, kus on vähem arenenud interneti infrastruktuur.
Spetsiifiliste kasutajateekondade profiilimine
Esialgne lehe laadimine on vaid üks osa kasutajakogemusest. Kuidas on lood jõudlusega, kui lisatakse toode ostukorvi, kasutatakse otsingufiltrit või saadetakse vorm? Saate kombineerida Playwrighti ja Lighthouse'i võimsust, et profileerida neid kriitilisi interaktsioone.
Levinud muster on kasutada Playwrighti skripti, et navigeerida rakenduses kindlasse olekusse (nt sisse logida, lisada tooteid ostukorvi) ja seejärel anda kontroll üle Lighthouse'ile, et see käivitaks oma auditi selles lehe olekus. See annab palju terviklikuma ülevaate teie rakenduse jõudlusest.
Kokkuvõte: jõudluskultuuri loomine
JavaScripti jõudluse seire automatiseerimine ei seisne ainult tööriistades ja skriptides; see seisneb kultuuri edendamises, kus jõudlus on jagatud vastutus. Kui jõudlust käsitletakse esmaklassilise funktsioonina, mis on mõõdetav ja mitte läbiräägitav, muutub see arendusprotsessi lahutamatuks osaks, mitte tagantjärele tarkuseks.
Liikudes reaktiivselt, käsitsi lähenemiselt proaktiivsele, automatiseeritud torujuhtmele, saavutate mitu kriitilist ärieesmärki:
- Kaitske kasutajakogemust: Loote turvavõrgu, mis takistab jõudlusregressioonide mõju teie kasutajatele.
- Suurendage arenduskiirust: Pakkudes kohest tagasisidet, annate arendajatele võimaluse probleeme kiiresti ja enesekindlalt lahendada, vähendades pikki ja valulikke optimeerimistsükleid.
- Tehke andmepõhiseid otsuseid: Kogute rikkaliku andmekogu jõudlustrendidest, mis võivad suunata arhitektuurilisi otsuseid ja põhjendada investeeringuid optimeerimisse.
Teekond algab väikesest. Alustage lihtsa Lighthouse CI kontrolli lisamisega oma põhiharule. Seadke konservatiivne jõudluseelarve. Kui teie meeskond harjub tagasisidega, laiendage oma katvust pull-päringutele, tutvustage üksikasjalikumaid mõõdikuid ja alustage kriitiliste kasutajateekondade profiilimist. Jõudlus on pidev teekond, mitte sihtkoht. Proaktiivse torujuhtme ehitamisega tagate, et iga koodirida, mille te avaldate, austab teie kasutajate kõige väärtuslikumat vara: nende aega.