Aizmirstiet par manuālām pārbaudēm DevTools. Šī rokasgrāmata detalizē, kā automatizēt JavaScript veiktspējas profilēšanu un iestatīt nepārtrauktu uzraudzību CI/CD konveijerā, lai nodrošinātu ātru pieredzi visiem lietotājiem visur.
Proaktīvais konveijers: JavaScript veiktspējas automatizācija globālai auditorijai
Digitālajā ekonomikā ātrums ir universāla valoda. Lietotājam Tokijā, Londonā vai Sanpaulu ir vienādas gaidas: ātra, nevainojama digitālā pieredze. Kad tīmekļa lietojumprogramma raustās, sastingst vai ielādējas sekundēm ilgi, tā nav tikai neērtība; tas ir šo gaidu pārkāpums. Tas ir klusais lietotāju iesaistes, konversiju rādītāju un zīmola reputācijas slepkava. Gadiem ilgi veiktspējas analīze ir bijusi reaktīva disciplīna — drudžaina iedziļināšanās Chrome DevTools pēc tam, kad lietotāji ir sākuši sūdzēties. Šī pieeja vairs nav ilgtspējīga nepārtrauktas izvietošanas un globālu lietotāju bāzu pasaulē.
Laipni lūdzam proaktīvajā konveijerā. Tā ir paradigmas maiņa no manuālām, ad-hoc veiktspējas pārbaudēm uz sistemātisku, automatizētu un nepārtrauktu uzraudzības un īstenošanas procesu. Tas nozīmē veiktspējas iestrādāšanu kā jūsu izstrādes dzīves cikla pamatprincipu, tāpat kā vienībtestus vai drošības skenēšanu. Automatizējot JavaScript veiktspējas profilēšanu, jūs varat atklāt regresijas, pirms tās nonāk ražošanā, pieņemt uz datiem balstītus optimizācijas lēmumus un nodrošināt, ka katrs lietotājs, neatkarīgi no viņa atrašanās vietas vai ierīces, saņem vislabāko iespējamo pieredzi.
Šī visaptverošā rokasgrāmata jūs iepazīstinās ar to, kāpēc, ko un kā veidot savu nepārtrauktas veiktspējas uzraudzības konveijeru. Mēs izpētīsim rīkus, definēsim svarīgos rādītājus un sniegsim praktiskus piemērus, kā integrēt šīs pārbaudes tieši jūsu CI/CD darbplūsmā.
No manuālas profilēšanas līdz automatizētām atziņām: nepieciešama evolūcija
Lielākā daļa front-end izstrādātāju ir pazīstami ar Performance un Lighthouse cilnēm savu pārlūkprogrammu izstrādātāju rīkos. Tie ir neticami spēcīgi instrumenti problēmu diagnosticēšanai konkrētā lapā. Bet paļauties tikai uz tiem ir kā mēģināt nodrošināt debesskrāpja strukturālo integritāti, pārbaudot tikai vienu atbalsta siju reizi gadā.
Manuālās profilēšanas ierobežojumi
- Tas ir reaktīvi, nevis proaktīvi: Manuālas pārbaudes parasti notiek, kad problēma jau ir identificēta. Jūs dzēšat ugunsgrēku, nevis novēršat to. Līdz brīdim, kad izstrādātājs atver DevTools, lai izmeklētu palēninājumu, jūsu lietotāji jau ir izjutuši sāpes.
- Tas ir nekonsekventi: Rezultāti, ko iegūstat uz augstas klases izstrādes datora, kas savienots ar ātru biroja tīklu, krasi atšķiras no tā, ko lietotājs piedzīvo uz vidējas klases mobilās ierīces reģionā ar nestabilu savienojumu. Manuālajiem testiem trūkst kontrolētas, atkārtojamas vides.
- Tas ir laikietilpīgi un nav mērogojams: Rūpīga veiktspējas profilēšana prasa ievērojamu laiku un zināšanas. Lietojumprogrammai kļūstot sarežģītākai un komandai palielinoties, izstrādātājiem kļūst neiespējami manuāli pārbaudīt katru komitu attiecībā uz veiktspējas regresijām.
- Tas rada zināšanu izolāciju: Bieži vien tikai dažiem "veiktspējas čempioniem" komandā ir dziļas zināšanas, lai interpretētu sarežģītas liesmu diagrammas un izsekošanas failus, radot optimizācijas centienu sašaurinājumu.
Argumenti par labu automatizācijai un nepārtrauktai uzraudzībai
Veiktspējas profilēšanas automatizācija to pārveido no neregulāra audita par nepārtrauktu atgriezeniskās saites ciklu. Šī pieeja, ko CI/CD kontekstā bieži dēvē par "sintētisko uzraudzību", piedāvā būtiskas priekšrocības.
- Savlaicīgi atklājiet regresijas: Izpildot veiktspējas testus katram komitam vai pull pieprasījumam, jūs varat nekavējoties identificēt precīzu izmaiņu, kas izraisīja palēninājumu. Šī "pārbīdes pa kreisi" (shift left) pieeja padara problēmu novēršanu eksponenciāli lētāku un ātrāku.
- Izveidojiet veiktspējas bāzes līniju: Automatizācija ļauj jums izveidot vēsturisku ierakstu par jūsu lietojumprogrammas veiktspēju. Šie tendenču dati ir nenovērtējami, lai izprastu attīstības ilgtermiņa ietekmi un pieņemtu informētus lēmumus par tehnisko parādu.
- Ieviesiet veiktspējas budžetus: Automatizācija ļauj definēt un ieviest "veiktspējas budžetu" — sliekšņu kopumu galvenajiem rādītājiem, kas būvējumam ir jāizpilda, lai tas būtu sekmīgs. Ja izmaiņas padara Largest Contentful Paint (LCP) par 20% lēnāku, būvējums var tikt automātiski atzīts par neveiksmīgu, novēršot regresijas izvietošanu.
- Demokratizējiet veiktspēju: Kad veiktspējas atgriezeniskā saite tiek sniegta automātiski izstrādātāja esošajā darbplūsmā (piemēram, komentārs pie pull pieprasījuma), tas dod iespēju katram inženierim uzņemties atbildību par veiktspēju. Tā vairs nav tikai speciālista atbildība.
Nepārtrauktas veiktspējas uzraudzības pamatjēdzieni
Pirms iedziļināties rīkos, ir svarīgi saprast pamatjēdzienus, kas veido jebkuras veiksmīgas veiktspējas uzraudzības stratēģijas pamatu.
Galvenie veiktspējas rādītāji, kuriem sekot ("Kas")
Jūs nevarat uzlabot to, ko nemērāt. Lai gan ir desmitiem potenciālo rādītāju, visefektīvākā stratēģija ir koncentrēties uz dažiem, kas orientēti uz lietotāju. Google Core Web Vitals ir lielisks sākumpunkts, jo tie ir izstrādāti, lai mērītu reālās pasaules lietotāju pieredzi.
- Largest Contentful Paint (LCP): Mēra ielādes veiktspēju. Tas norāda punktu lapas ielādes laika joslā, kad galvenais saturs, visticamāk, ir ielādējies. Labs LCP ir 2,5 sekundes vai mazāk.
- Interaction to Next Paint (INP): Mēra interaktivitāti. INP novērtē lapas vispārējo reaģētspēju uz lietotāju mijiedarbībām. Tas novēro visu klikšķu, pieskārienu un tastatūras mijiedarbību latentumu. Labs INP ir zem 200 milisekundēm. (INP ir aizstājis First Input Delay (FID) kā Core Web Vital 2024. gada martā).
- Cumulative Layout Shift (CLS): Mēra vizuālo stabilitāti. Tas kvantificē, cik daudz negaidītu izkārtojuma nobīžu lietotāji piedzīvo. Labs CLS rādītājs ir 0,1 vai mazāks.
Papildus Core Web Vitals ir arī citi svarīgi rādītāji:
- Time to First Byte (TTFB): Mēra servera reakcijas laiku. Tas ir pamata rādītājs, jo lēns TTFB negatīvi ietekmēs visus turpmākos rādītājus.
- First Contentful Paint (FCP): Atzīmē laiku, kad tiek renderēts pirmais DOM satura gabals. Tas sniedz pirmo atgriezenisko saiti lietotājam, ka lapa patiešām tiek ielādēta.
- Total Blocking Time (TBT): Mēra kopējo laiku starp FCP un Time to Interactive (TTI), kurā galvenais pavediens bija bloķēts pietiekami ilgi, lai novērstu ievades reaģētspēju. Tas ir lielisks laboratorijas rādītājs, kas labi korelē ar INP.
Veiktspējas budžeta noteikšana ("Kāpēc")
Veiktspējas budžets ir skaidrs ierobežojumu kopums, ar kuru jūsu komanda piekrīt strādāt. Tas nav tikai mērķis; tas ir stingrs limits. Budžets pārveido veiktspēju no neskaidra "padarīsim to ātru" mērķa par konkrētu, izmērāmu prasību jūsu lietojumprogrammai.
Vienkāršs veiktspējas budžets varētu izskatīties šādi:
- LCP jābūt mazākam par 2,5 sekundēm.
- TBT jābūt mazākam par 200 milisekundēm.
- Kopējais JavaScript pakotnes izmērs nedrīkst pārsniegt 250 KB (gzipped).
- Lighthouse veiktspējas rādītājam jābūt 90 vai augstākam.
Definējot šos limitus, jūsu automatizētajam konveijeram ir skaidrs sekmīgs/nesekmīgs kritērijs. Ja pull pieprasījums izraisa Lighthouse rādītāja kritumu līdz 85, CI pārbaude neizdodas, un izstrādātājs tiek nekavējoties informēts — pirms kods tiek apvienots.
Veiktspējas uzraudzības konveijers ("Kā")
Tipisks automatizēts veiktspējas konveijers sastāv no šādiem soļiem:
- Aktivizētājs (Trigger): Izstrādātājs iesniedz jaunu kodu versiju kontroles sistēmā (piem., Git).
- Būvēšana (Build): CI/CD serveris (piem., GitHub Actions, Jenkins, GitLab CI) paņem kodu un palaiž lietojumprogrammas būvēšanas procesu.
- Izvietošana un testēšana (Deploy & Test): Lietojumprogramma tiek izvietota pagaidu sagatavošanas vai priekšskatījuma vidē. Pēc tam automatizēts rīks izpilda veiktspējas testu kopumu pret šo vidi.
- Analīze un apstiprināšana (Analyze & Assert): Rīks savāc veiktspējas rādītājus un salīdzina tos ar iepriekš definēto veiktspējas budžetu.
- Ziņošana un rīcība (Report & Action): Ja budžets ir izpildīts, pārbaude ir sekmīga. Ja nē, būvējums tiek atzīts par neveiksmīgu, un komandai tiek nosūtīts brīdinājums ar detalizētu ziņojumu, kas izskaidro regresiju.
Mūsdienīgs rīku komplekts automatizētai JavaScript profilēšanai
Vairāki izcili atvērtā koda rīki veido mūsdienu veiktspējas automatizācijas pamatu. Apskatīsim visievērojamākos.
Pārlūka automatizācija ar Playwright un Puppeteer
Playwright (no Microsoft) un Puppeteer (no Google) ir Node.js bibliotēkas, kas nodrošina augsta līmeņa API, lai kontrolētu bezgalvas (headless) Chrome, Firefox un WebKit pārlūkus. Lai gan tos bieži izmanto end-to-end testēšanai, tie ir arī fenomenāli veiktspējas profilēšanai.
Jūs varat tos izmantot, lai skriptētu sarežģītas lietotāju darbības un savāktu detalizētus veiktspējas izsekošanas datus, kurus var analizēt DevTools. Tas ir ideāli piemērots konkrēta lietotāja ceļa veiktspējas mērīšanai, nevis tikai sākotnējai lapas ielādei.
Šeit ir vienkāršs piemērs, kā izmantot Playwright, lai ģenerētu veiktspējas izsekošanas failu:
Piemērs: Izsekošanas faila ģenerēšana ar Playwright
const { chromium } = require('playwright');(async () => {const browser = await chromium.launch({ headless: true });const page = await browser.newPage();// Start tracing, saving to a file.await page.tracing.start({ path: 'performance-trace.json', screenshots: true });await page.goto('https://your-app.com/dashboard');// Interact with the page to profile a specific actionawait page.click('button#load-data-button');await page.waitForSelector('.data-grid-loaded'); // Wait for the result// Stop tracingawait page.tracing.stop();await browser.close();console.log('Performance trace saved to performance-trace.json');})();
Pēc tam varat ielādēt `performance-trace.json` failu Chrome DevTools Performance panelī, lai iegūtu bagātīgu, kadru pa kadram analīzi par to, kas notika šīs lietotāja mijiedarbības laikā. Lai gan tas ir spēcīgs diagnostikas rīks, mums ir nepieciešams vēl viens slānis automatizētai apgalvojumu pārbaudei: Lighthouse.
Google Lighthouse izmantošana visaptverošiem auditiem
Lighthouse ir nozares standarta atvērtā koda rīks tīmekļa lapu kvalitātes auditēšanai. Tas veic virkni testu pret lapu un ģenerē ziņojumu par veiktspēju, pieejamību, labākajām praksēm un SEO. Vissvarīgākais mūsu konveijeram ir tas, ka to var palaist programmatiski un konfigurēt, lai ieviestu veiktspējas budžetus.
Labākais veids, kā integrēt Lighthouse CI/CD konveijerā, ir ar Lighthouse CI. Tas ir rīku komplekts, kas vienkāršo Lighthouse palaišanu, rezultātu apstiprināšanu pret budžetiem un rādītāju izsekošanu laika gaitā.
Lai sāktu, jums projekta saknes direktorijā jāizveido konfigurācijas fails ar nosaukumu `lighthouserc.js`:
Piemērs: lighthouserc.js konfigurācija
module.exports = {ci: {collect: {// Option 1: Run against a live URL// url: ['https://staging.your-app.com'],// Option 2: Run against a locally served build outputstaticDistDir: './build',startServerCommand: 'npm run start:static',},assert: {preset: 'lighthouse:recommended', // Start with sensible defaultsassertions: {// Custom assertions (your performance budget)'categories:performance': ['error', { minScore: 0.9 }], // Score must be >= 90'categories:accessibility': ['warn', { minScore: 0.95 }], // Score must be >= 95'core-web-vitals/largest-contentful-paint': ['error', { maxNumericValue: 2500 }],'core-web-vitals/total-blocking-time': ['error', { maxNumericValue: 200 }],},},upload: {target: 'temporary-public-storage', // Easiest way to get started},},};
Ar šo konfigurāciju jūs varat palaist `lhci autorun` no savas komandrindas vai CI skripta. Tas automātiski startēs jūsu serveri, palaidīs Lighthouse vairākas reizes stabilitātei, pārbaudīs rezultātus pret jūsu apgalvojumiem un neizdosies, ja budžets netiks izpildīts.
Sintētiskā uzraudzība pret reālo lietotāju uzraudzību (RUM)
Ir svarīgi saprast atšķirību starp diviem galvenajiem veiktspējas uzraudzības veidiem.
- Sintētiskā uzraudzība (laboratorijas dati): Tas ir tas, par ko mēs esam runājuši — automatizētu testu veikšana kontrolētā, konsekventā vidē ("laboratorijā"). Tas ir ideāli piemērots CI/CD, jo tas izolē jūsu koda izmaiņu ietekmi. Jūs kontrolējat tīkla ātrumu, ierīces veidu un atrašanās vietu. Tā spēks ir konsekvence un regresijas noteikšana.
- Reālo lietotāju uzraudzība (RUM) (lauka dati): Tas ietver veiktspējas datu vākšanu no jūsu lietotāju faktiskajiem pārlūkiem visā pasaulē ("laukā"). RUM rīki (piemēram, Sentry, Datadog vai New Relic) izmanto nelielu JavaScript fragmentu jūsu vietnē, lai ziņotu par Core Web Vitals un citiem rādītājiem, kā tos piedzīvo reāli cilvēki. Tā spēks ir nodrošināt patiesu ainu par globālo lietotāju pieredzi neskaitāmās ierīču un tīkla kombinācijās.
Abi veidi nav savstarpēji izslēdzoši; tie ir papildinoši. Izmantojiet sintētisko uzraudzību savā CI/CD konveijerā, lai novērstu regresiju izvietošanu. Izmantojiet RUM ražošanā, lai izprastu savu faktisko lietotāju pieredzi un identificētu uzlabojumu jomas, kuras jūsu laboratorijas testi varētu palaist garām.
Veiktspējas profilēšanas integrēšana CI/CD konveijerā
Teorija ir lieliska, bet svarīga ir praktiskā ieviešana. Izveidosim vienkāršu veiktspējas pārbaudi, izmantojot Lighthouse CI GitHub Actions darbplūsmā.
Praktisks piemērs ar GitHub Actions
Šī darbplūsma tiks izpildīta katram pull pieprasījumam. Tā būvē lietojumprogrammu, palaiž pret to Lighthouse CI un publicē rezultātus kā komentāru pie pull pieprasījuma.
Izveidojiet failu `.github/workflows/performance-ci.yml`:
Piemērs: .github/workflows/performance-ci.yml
name: Performance CIon: [pull_request]jobs:lighthouse:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Use Node.js 20.xuses: actions/setup-node@v3with:node-version: '20.x'cache: 'npm'- name: Install dependenciesrun: npm ci- name: Build production assetsrun: npm run build- name: Run Lighthouse CIrun: |npm install -g @lhci/cli@0.12.xlhci autorunenv:LHCI_GITHUB_APP_TOKEN: ${{ secrets.LHCI_GITHUB_APP_TOKEN }}
Lai tas darbotos, jums ir nepieciešamas divas lietas:
- `lighthouserc.js` fails jūsu repozitorijā, kā parādīts iepriekšējā sadaļā.
- Lighthouse CI GitHub lietotne, kas instalēta jūsu repozitorijā. Tas ļauj Lighthouse CI publicēt komentārus un statusa pārbaudes. Instalēšanas laikā jūs saņemsiet marķieri (`LHCI_GITHUB_APP_TOKEN`), kas jā saglabā kā noslēpums (secret) jūsu GitHub repozitorija iestatījumos.
Tagad, kad izstrādātājs atver pull pieprasījumu, parādīsies statusa pārbaude. Ja veiktspējas budžets netiks izpildīts, pārbaude būs sarkana. Tiks publicēts detalizēts komentārs ar Lighthouse rādītājiem, parādot, kuri rādītāji ir pasliktinājušies.
Veiktspējas datu glabāšana un vizualizēšana
Lai gan `temporary-public-storage` ir lieliski piemērots sākumam, ilgtermiņa analīzei jūs vēlēsities glabāt savus Lighthouse ziņojumus. Lighthouse CI Server ir bezmaksas, atvērtā koda risinājums, ko varat mitināt paši. Tas nodrošina informācijas paneli, lai vizualizētu veiktspējas tendences laika gaitā, salīdzinātu ziņojumus starp zariem un identificētu pakāpenisku veiktspējas pasliktināšanos, kas varētu tikt palaista garām vienā izpildē.
Konfigurēt `lighthouserc.js` augšupielādei uz savu serveri ir vienkārši. Šie vēsturiskie dati pārveido jūsu konveijeru no vienkārša vārtsarga par spēcīgu analīzes rīku.
Brīdinājumi un ziņošana
Pēdējais puzles gabals ir efektīva komunikācija. Neveiksmīgs būvējums ir noderīgs tikai tad, ja pareizie cilvēki tiek savlaicīgi informēti. Papildus GitHub statusa pārbaudēm apsveriet iespēju iestatīt brīdinājumus savas komandas galvenajā saziņas kanālā, piemēram, Slack vai Microsoft Teams. Labam brīdinājumam vajadzētu ietvert:
- Konkrētais pull pieprasījums vai komits, kas izraisīja kļūmi.
- Kurš veiktspējas rādītājs(-i) pārkāpa budžetu un par cik.
- Tieša saite uz pilno Lighthouse ziņojumu dziļākai analīzei.
Padziļinātas stratēģijas un globāli apsvērumi
Kad jums ir izveidots pamata konveijers, jūs varat to uzlabot, lai labāk atspoguļotu savu globālo lietotāju bāzi.
Dažādu tīkla un CPU apstākļu simulēšana
Jūsu lietotāji ne vienmēr izmanto optiskā interneta savienojumus ar augstas klases procesoriem. Ir svarīgi testēt reālistiskākos apstākļos. Lighthouse ir iebūvēta ātruma ierobežošana (throttling), kas pēc noklusējuma simulē lēnāku tīklu un CPU (imitējot vidējas klases mobilo ierīci 4G savienojumā).
Jūs varat pielāgot šos iestatījumus savā Lighthouse konfigurācijā, lai testētu dažādus scenārijus, nodrošinot, ka jūsu lietojumprogramma paliek lietojama klientiem tirgos ar mazāk attīstītu interneta infrastruktūru.
Specifisku lietotāju ceļu profilēšana
Sākotnējā lapas ielāde ir tikai daļa no lietotāja pieredzes. Kā ir ar veiktspēju, pievienojot preci grozam, izmantojot meklēšanas filtru vai iesniedzot veidlapu? Jūs varat apvienot Playwright un Lighthouse spēku, lai profilētu šīs kritiskās mijiedarbības.
Bieži sastopams modelis ir izmantot Playwright skriptu, lai pārvietotos lietojumprogrammā uz konkrētu stāvokli (piemēram, pieteikties, pievienot preces grozam) un pēc tam nodot kontroli Lighthouse, lai tas veiktu auditu šajā lapas stāvoklī. Tas nodrošina daudz holistiskāku skatījumu uz jūsu lietojumprogrammas veiktspēju.
Noslēgums: veiktspējas kultūras veidošana
JavaScript veiktspējas uzraudzības automatizācija nav tikai par rīkiem un skriptiem; tā ir par kultūras veicināšanu, kurā veiktspēja ir kopīga atbildība. Kad veiktspēja tiek uzskatīta par pirmās klases funkciju, izmērāmu un neapspriežamu, tā kļūst par neatņemamu izstrādes procesa daļu, nevis par novēlotu pārdomu.
Pārejot no reaktīvas, manuālas pieejas uz proaktīvu, automatizētu konveijeru, jūs sasniedzat vairākus kritiskus biznesa mērķus:
- Aizsargājiet lietotāju pieredzi: Jūs izveidojat drošības tīklu, kas novērš veiktspējas regresiju ietekmi uz jūsu lietotājiem.
- Palieliniet izstrādes ātrumu: Nodrošinot tūlītēju atgriezenisko saiti, jūs dodat izstrādātājiem iespēju ātri un pārliecinoši novērst problēmas, samazinot garus, sāpīgus optimizācijas ciklus.
- Pieņemiet uz datiem balstītus lēmumus: Jūs veidojat bagātīgu datu kopu par veiktspējas tendencēm, kas var vadīt arhitektūras lēmumus un pamatot investīcijas optimizācijā.
Ceļojums sākas ar mazumiņu. Sāciet ar vienkāršas Lighthouse CI pārbaudes pievienošanu savam galvenajam zaram. Nosakiet konservatīvu veiktspējas budžetu. Kad jūsu komanda pierod pie atgriezeniskās saites, paplašiniet pārklājumu uz pull pieprasījumiem, ieviesiet detalizētākus rādītājus un sāciet profilēt kritiskus lietotāju ceļus. Veiktspēja ir nepārtraukts ceļojums, nevis galamērķis. Veidojot proaktīvu konveijeru, jūs nodrošināt, ka katra koda rinda, ko jūs piegādājat, ciena jūsu lietotāju visvērtīgāko aktīvu: viņu laiku.