You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/sk/5-browser-extension/3-background-tasks-and-perf.../README.md

588 lines
30 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Projekt rozšírenia prehliadača Časť 3: Naučte sa o pozadových úlohách a výkone
```mermaid
journey
title Vaša cesta optimalizáciou výkonu
section Základy
Learn browser tools: 3: Student
Understand profiling: 4: Student
Identify bottlenecks: 4: Student
section Funkcie rozšírenia
Build color system: 4: Student
Create background tasks: 5: Student
Update icons dynamically: 5: Student
section Optimalizácia
Monitor performance: 5: Student
Debug issues: 4: Student
Polish experience: 5: Student
```
Niekedy ste sa zamýšľali, čo robí niektoré rozšírenia prehliadača svižnými a responzívnymi, zatiaľ čo iné pôsobia pomaly? Tajomstvo spočíva v tom, čo sa deje na pozadí. Kým používatelia klikajú v rozhraní vášho rozšírenia, za scénou tichučko beží celý svet procesov, ktoré spravujú získavanie dát, aktualizácie ikon a systémové zdroje.
Toto je naša záverečná lekcia zo série o rozšíreniach prehliadača a spravíme tak, aby váš tracker uhlíkovej stopy fungoval hladko. Pridáte dynamické aktualizácie ikony a naučíte sa rozpoznať problémy s výkonom ešte predtým, než sa stanú problémami. Je to ako ladenie závodného auta malé optimalizácie môžu výrazne ovplyvniť, ako všetko beží.
Keď skončíme, budete mať vyleštené rozšírenie a pochopíte princípy výkonu, ktoré oddeľujú dobré webové aplikácie od skvelých. Poďme sa ponoriť do sveta optimalizácie prehliadača.
## Prednáškový kvíz
[Prednáškový kvíz](https://ff-quizzes.netlify.app/web/quiz/27)
### Úvod
V predchádzajúcich lekciách ste vytvorili formulár, prepojili ho s API a riešili asynchrónne získavanie dát. Vaše rozšírenie sa pekne formuje.
Teraz potrebujeme pridať posledné úpravy napríklad aby sa ikona rozšírenia menila podľa údajov o uhlíku. Pripomína mi to, ako NASA musela optimalizovať každý systém na kozmickej lodi Apollo. Nemohli si dovoliť žiadne premrhané cykly ani pamäť, pretože životy záviseli od výkonu. Aj keď naše rozšírenie prehliadača nie je také kritické, rovnaké princípy platia efektívny kód vytvára lepší používateľský zážitok.
```mermaid
mindmap
root((Výkon & Úlohy na pozadí))
Browser Performance
Rendering Pipeline
Optimalizácia zdrojov
Manipulácia s DOM
Vykonávanie JavaScriptu
Profiling Tools
Nástroje pre vývojárov
Karta Výkon
Analýza časovej osi
Detekcia úzkych miest
Extension Architecture
Skripty na pozadí
Obsahové skripty
Prenos správ
Správa ikon
Optimization Strategies
Rozdelenie kódu
Neskoré načítanie
Ukladanie do vyrovnávacej pamäte
Kompresia zdrojov
Visual Feedback
Dynamické ikony
Farebné kódovanie
Aktualizácie v reálnom čase
Používateľský zážitok
```
## Základy výkonu webu
Keď váš kód beží efektívne, ľudia to dokážu *pocítiť*. Poznáte ten moment, keď sa stránka načíta okamžite alebo animácia plynie hladko? To je dobrý výkon v praxi.
Výkon nie je len o rýchlosti ide o to, aby webové zážitky pôsobili prirodzene, nie kostrbato a frustrujúco. V počiatkoch výpočtovej techniky si Grace Hopper na svojom stole nechávala nanosekundu (kus drôtu dlhý asi stopu), aby ukázala, ako ďaleko svetlo prejde za jednu miliardtinu sekundy. Takto vysvetľovala, prečo záleží na každom mikrosekunde v počítačoch. Poďme preskúmať nástroje detektívov, ktoré vám pomôžu zistiť, čo spomaľuje veci.
> "Výkon webovej stránky je o dvoch veciach: ako rýchlo sa stránka načíta a ako rýchlo na nej beží kód." -- [Zack Grossbart](https://www.smashingmagazine.com/2012/06/javascript-profiling-chrome-developer-tools/)
Téma, ako spraviť vaše weby bleskurýchlymi na rôznych zariadeniach, pre rôznych používateľov, v rôznych situáciách, je prirodzene rozsiahla. Tu je niekoľko bodov, ktoré si treba pamätať pri tvorbe štandardného webového projektu alebo rozšírenia prehliadača.
Prvým krokom optimalizácie vášho webu je pochopiť, čo sa vlastne deje pod kapotou. Našťastie váš prehliadač má zabudované výkonné detektívne nástroje.
```mermaid
flowchart LR
A[HTML] --> B[Analýza]
B --> C[DOM Strom]
D[CSS] --> E[Analýza]
E --> F[CSSOM]
G[JavaScript] --> H[Spustiť]
C --> I[Render Strom]
F --> I
H --> I
I --> J[Rozloženie]
J --> K[Maľovanie]
K --> L[Zložité]
L --> M[Zobrazenie]
subgraph "Kritická cesta renderovania"
N["1. Analýza HTML"]
O["2. Analýza CSS"]
P["3. Spustiť JS"]
Q["4. Vytvoriť render strom"]
R["5. Rozloženie prvkov"]
S["6. Maľovanie pixelov"]
T["7. Zložité vrstvy"]
end
style M fill:#e8f5e8
style I fill:#fff3e0
style H fill:#ffebee
```
Ak chcete otvoriť Nástroje vývojára v Edge, kliknite na tie tri bodky v pravom hornom rohu, potom choďte na Viac nástrojov > Nástroje vývojára. Alebo použite klávesovú skratku: `Ctrl` + `Shift` + `I` vo Windows alebo `Option` + `Command` + `I` na Macu. Keď ste tam, kliknite na kartu Výkon tam sa bude odohrávať vaše vyšetrovanie.
**Tu je váš detektívny súbor na výkon:**
- **Otvorte** Nástroje vývojára (budete ich ako developer neustále používať!)
- **Prejdite** na kartu Výkon predstavte si ju ako fitness tracker vášho webu
- **Stlačte** tlačidlo Nahrávanie a sledujte svoju stránku v akcii
- **Študujte** výsledky, aby ste našli, čo spomaľuje veci
Poďme to vyskúšať. Otvorte nejakú webovú stránku (napríklad Microsoft.com funguje dobre) a kliknite na tlačidlo 'Nahrávanie'. Teraz obnovte stránku a sledujte, ako profiler zaznamenáva všetko, čo sa deje. Keď zastavíte nahrávanie, uvidíte podrobný rozpis, ako prehliadač 'spúšťa skripty', 'vykresľuje' a 'maľuje' stránku. Pripomína mi to, ako riadiace stredisko monitoruje každý systém počas štartu rakety máte dáta v reálnom čase o tom, čo sa presne deje a kedy.
![Edge profiler](../../../../translated_images/sk/profiler.5a4a62479c5df01c.webp)
✅ Dokumentácia [Microsoftu](https://docs.microsoft.com/microsoft-edge/devtools-guide/performance/?WT.mc_id=academic-77807-sagibbon) obsahuje množstvo detailov, ak chcete ísť viac do hĺbky
> Tip pre profíkov: Vyčistite cache prehliadača pred testovaním, aby ste videli výkon stránky pre prvých návštevníkov zvyčajne je výrazne iný ako pri opakovaných návštevách!
Vyberte prvky časovej osi profilu, aby ste sa priblížili na udalosti, ktoré sa dejú počas načítavania stránky.
Získajte rýchly prehľad o výkone stránky výberom časti časovej osi profilu a zobrazením sumárneho panelu:
![Edge profiler snapshot](../../../../translated_images/sk/snapshot.97750180ebcad737.webp)
Skontrolujte panel Záznam udalostí, či sa niektorá udalosť nepretiahla nad 15 ms:
![Edge event log](../../../../translated_images/sk/log.804026979f3707e0.webp)
✅ Spoznajte svoj profiler! Otvorte nástroje vývojára na tejto stránke a zistite, či sú nejaké úzke miesta. Ktorý zdroj sa načítava najpomalšie? Ktorý najsrýchlejšie?
```mermaid
flowchart TD
A[Otvoriť DevTools] --> B[Navigovať na kartu Výkon]
B --> C[Kliknúť na tlačidlo Nahrávať]
C --> D[Vykonať akcie]
D --> E[Zastaviť nahrávanie]
E --> F{Analyzovať výsledky}
F --> G[Skontrolovať časovú os]
F --> H[Preskúmať sieť]
F --> I[Preskúmať skripty]
F --> J[Identifikovať udalosti maľovania]
G --> K{Dlhé úlohy?}
H --> L{Veľké zdroje?}
I --> M{Zablokovanie renderovania?}
J --> N{Nákladné maľby?}
K -->|Áno| O[Optimalizovať JavaScript]
L -->|Áno| P[Komprimovať zdroje]
M -->|Áno| Q[Pridať Async/Defer]
N -->|Áno| R[Zjednodušiť štýly]
O --> S[Otestovať znova]
P --> S
Q --> S
R --> S
style A fill:#e1f5fe
style F fill:#fff3e0
style S fill:#e8f5e8
```
## Čo hľadať pri profilovaní
Spustenie profilu je len začiatok skutočne dôležité je vedieť, čo vám tie farebné grafy vlastne hovoria. Nebojte sa, naučíte sa ich čítať. Skúsení developeri dokážu rozpoznať varovné signály skôr, než prerastú do veľkých problémov.
Pozrime sa na obvyklých podozrivých výkonnostné problémy, ktoré sa často plížia do webových projektov. Rovnako ako Marie Curie musela starostlivo sledovať úrovne žiarenia vo svojej laboratóriu, my musíme dávať pozor na určité vzory, ktoré naznačujú budúce ťažkosti. Ich včasné zachytenie vám (a vašim používateľom) ušetrí kopu frustrácie.
**Veľkosť assetov**: Weby za tie roky „zhustli“, veľká časť toho nárastu váhy pripadá na obrázky. Akoby sme do našich digitálnych kufrov stále viac a viac nabalili.
✅ Pozrite si [Internet Archive](https://httparchive.org/reports/page-weight), ako sa veľkosť stránok zväčšuje v čase je to dosť odhaľujúce.
**Ako mať assety optimalizované:**
- **Kompresujte** obrázky! Moderné formáty ako WebP výrazne zmenšujú veľkosť súborov
- **Podávajte** vhodnú veľkosť obrázka pre každé zariadenie nie je potrebné posielať obrovské desktopové obrázky do telefónov
- **Minifikujte** CSS a JavaScript každý bajt sa počíta
- **Používajte** lazy loading, aby sa obrázky sťahovali len, keď ich používateľ naozaj posunie do zorného poľa
**Prehliadanie DOM**: Prehliadač si musí vytvoriť Document Object Model na základe kódu, ktorý píšete, preto je v záujme dobrého výkonu stránky mať minimum značiek, používať a štýlovať len to, čo stránka potrebuje. K tomuto bodu môže byť prebytočné CSS optimalizované; štýly, ktoré sú potrebné len na jednej stránke, nemusia byť zahrnuté v hlavnom štýlovacom súbore, napríklad.
**Kľúčové stratégie pre optimalizáciu DOM:**
- **Minimalizujte** počet HTML elementov a úrovní vnorenia
- **Odstráňte** nepoužívané pravidlá CSS a efektívne konsolidujte štýly
- **Organizujte** CSS tak, aby sa načítalo len to, čo je potrebné pre konkrétnu stránku
- **Štruktúrujte** HTML semanticky pre lepšie spracovanie prehliadačom
**JavaScript**: Každý JavaScript developer by si mal všímať 'render-blocking' skripty, ktoré sa musia načítať predtým, ako sa zvyšok DOM môže prejaviť a vykresliť v prehliadači. Zvážte použitie `defer` na vaše inline skripty (ako to robí modul Terrarium).
**Moderné techniky optimalizácie JavaScriptu:**
- **Používajte** atribút `defer` na načítanie skriptov po spracovaní DOM
- **Implementujte** kódové rozdelenie, aby sa načítavale len potrebné časti JavaScriptu
- **Aplikujte** lazy loading pre nekritickú funkcionalitu
- **Minimalizujte** používanie ťažkých knižníc a rámcov, keď je to možné
✅ Vyskúšajte niekoľko stránok na [Site Speed Test webstránke](https://www.webpagetest.org/), aby ste sa dozvedeli viac o bežných kontrolách výkonnosti webu.
### 🔄 **Pedagogická kontrola**
**Porozumenie výkonu**: Predtým, než začnete tvoriť funkcie rozšírenia, uistite sa, že viete:
- ✅ Vysvetliť kritickú cestu vykresľovania od HTML po pixely
- ✅ Identifikovať bežné úzke miesta vo výkone webových aplikácií
- ✅ Použiť vývojárske nástroje prehliadača na profilovanie výkonu stránky
- ✅ Rozumieť, ako veľkosť assetov a komplexnosť DOM ovplyvňuje rýchlosť
**Rýchly sebakvíz**: Čo sa stane, keď máte render-blocking JavaScript?
*Odpoveď: Prehliadač musí stiahnuť a vykonať skript predtým, ako môže pokračovať v parsovaní HTML a vykresľovaní stránky*
**Skutočný dopad výkonu:**
- **100 ms oneskorenie**: Používatelia vnímajú spomalenie
- **1 sekunda oneskorenia**: Používatelia začínajú strácať pozornosť
- **Nad 3 sekundy**: 40% používateľov stránku opúšťa
- **Mobilné siete**: Výkon záleží ešte viac
Keď už viete, ako prehliadač vykresľuje zaslané assety, pozrime sa na posledné veci, ktoré treba spraviť, aby bolo vaše rozšírenie kompletné:
### Vytvorte funkciu na výpočet farby
Teraz vytvoríme funkciu, ktorá premení číselné dáta na zmysluplné farby. Predstavte si to ako semafor zelená pre čistú energiu, červená pre vysokú uhlíkovú intenzitu.
Táto funkcia vezme CO2 údaje z nášho API a určí, ktorá farba najlepšie reprezentuje environmentálny dopad. Je to podobné, ako vedci používajú farebné kódovanie v tepelných mapách na vizualizáciu zložitých dátových vzorov od teplôt oceánu po tvorbu hviezd. Pridajme to do `/src/index.js`, hneď za tie premenné `const`, ktoré sme si na začiatku nastavili:
```mermaid
flowchart LR
A[Hodnota CO2] --> B[Nájsť najbližší bod stupnice]
B --> C[Získať index stupnice]
C --> D[Mapovať na farbu]
D --> E[Poslať na pozadie]
subgraph "Farebná stupnica"
F["0-150: Zelená (Čistá)"]
G["150-600: Žltá (Umiestnená)"]
H["600-750: Oranžová (Vysoká)"]
I["750+: Hnedá (Veľmi vysoká)"]
end
subgraph "Posielanie správ"
J[Obsahový skript]
K[chrome.runtime.sendMessage]
L[Skript na pozadí]
M[Aktualizácia ikony]
end
style A fill:#e1f5fe
style D fill:#e8f5e8
style E fill:#fff3e0
```
```javascript
function calculateColor(value) {
// Definujte mierku intenzity CO2 (gramy na kWh)
const co2Scale = [0, 150, 600, 750, 800];
// Zodpovedajúce farby od zelenej (čistá) po tmavohnedú (vysoký obsah uhlíka)
const colors = ['#2AA364', '#F5EB4D', '#9E4229', '#381D02', '#381D02'];
// Nájdite najbližšiu hodnotu na mierke k nášmu vstupu
const closestNum = co2Scale.sort((a, b) => {
return Math.abs(a - value) - Math.abs(b - value);
})[0];
console.log(`${value} is closest to ${closestNum}`);
// Nájdite index pre mapovanie farieb
const num = (element) => element > closestNum;
const scaleIndex = co2Scale.findIndex(num);
const closestColor = colors[scaleIndex];
console.log(scaleIndex, closestColor);
// Pošlite správu o aktualizácii farby skriptu na pozadí
chrome.runtime.sendMessage({ action: 'updateIcon', value: { color: closestColor } });
}
```
**Rozoberme si túto šikovnú funkciu:**
- **Nastavuje** dve polia jedno pre hodnoty CO2, druhé pre farby (zelená = čistá, hnedá = špinavá!)
- **Nájde** najbližší zodpovedajúci CO2 údaj použitím šikovného radenia poľa
- **Získa** zodpovedajúcu farbu pomocou metódy findIndex()
- **Odošle** správu do pozadového scriptu Chromu s vybranou farbou
- **Používa** template literals (tie spätné úvodzovky) pre čistejšie formátovanie reťazcov
- **Udržiava** všetko organizované pomocou const deklarácií
`chrome.runtime` [API](https://developer.chrome.com/extensions/runtime) je ako nervový systém vášho rozšírenia spravuje všetku komunikáciu a úlohy na pozadí:
> "Použite chrome.runtime API na získanie pozadovej stránky, vrátenie detailov o manifeste a počúvanie a reagovanie na udalosti počas životného cyklu aplikácie alebo rozšírenia. Toto API tiež umožňuje konvertovať relatívne cesty URL na plne kvalifikované URL."
**Prečo je Chrome Runtime API tak užitočné:**
- **Umožňuje** rôznym častiam vášho rozšírenia spolu komunikovať
- **Zvláda** prácu na pozadí bez zamŕzania používateľského rozhrania
- **Spravuje** životný cyklus vašich udalostí rozšírenia
- **Uľahčuje** posielanie správ medzi skriptmi
✅ Ak toto rozšírenie vyvíjate pre Edge, môže vás prekvapiť, že používate chrome API. Novšie verzie prehliadača Edge bežia na jadre Chromium, takže môžete tieto nástroje využiť.
```mermaid
architecture-beta
group browser(logos:chrome)[Prehliadač]
service popup(logos:html5)[Vyskakovacie okno UI] in browser
service content(logos:javascript)[Obsahový Skript] in browser
service background(database)[Pozadie Skript] in browser
service api(logos:api)[Externé API] in browser
popup:R -- L:content
content:R -- L:background
background:T -- B:api
content:T -- B:api
junction junctionCenter in browser
popup:R -- L:junctionCenter
junctionCenter:R -- L:background
```
> **Profesionálny tip**: Ak chcete profilovať rozšírenie prehliadača, spustite vývojárske nástroje priamo z rozšírenia, pretože je to vlastná samostatná inštancia prehliadača. Takto získate prístup k špecifickým metríkám výkonu rozšírenia.
### Nastavte predvolenú farbu ikony
Pred tým, než začneme s načítaním reálnych dát, dajme nášmu rozšíreniu štartovací bod. Nikto nemá rád, keď pozerá na prázdnu alebo rozbitú ikonu. Začneme zelenou farbou, aby používatelia vedeli, že rozšírenie funguje hneď po inštalácii.
Vo vašej funkcii `init()` nastavme tento predvolený zelený symbol:
```javascript
chrome.runtime.sendMessage({
action: 'updateIcon',
value: {
color: 'green',
},
});
```
**Čo táto inicializácia robí:**
- **Nastavuje** neutrálne zelenú farbu ako predvolený stav
- **Poskytuje** okamžitú vizuálnu spätnú väzbu, keď sa rozšírenie načíta
- **Zavádza** komunikačný vzor s pozadovým skriptom
- **Zabezpečuje**, že používatelia vidia funkčné rozšírenie pred načítaním dát
### Zavolajte funkciu, vykonajte volanie
Teraz všetko spojme tak, aby sa ikonka automaticky aktualizovala správnou farbou, keď príde nová CO2 data. Je to ako zapojiť posledný obvod v elektronickom zariadení zrazu všetky súčasti fungujú ako jeden systém.
Pridajte tento riadok hneď po tom, ako získate CO2 dáta z API:
```javascript
// Po načítaní údajov o CO2 z API
// nech CO2 = data.data[0].intensity.actual;
calculateColor(CO2);
```
**Táto integrácia zabezpečuje:**
- **Prepojenie** dátového toku API so systémom vizuálnych indikátorov
- **Spúšťa** aktualizáciu ikony automaticky pri príchode nových dát
- **Zabezpečuje** vizuálnu spätnú väzbu v reálnom čase podľa aktuálnej uhlíkovej intenzity
- **Udržiava** oddelenie medzi získavaním dát a logikou zobrazenia
A nakoniec do `/dist/background.js` pridajte poslucháča pre tieto volania z pozadia:
```javascript
// Počúvaj správy od obsahového skriptu
chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) {
if (msg.action === 'updateIcon') {
chrome.action.setIcon({ imageData: drawIcon(msg.value) });
}
});
// Nakresli dynamickú ikonu pomocou Canvas API
// Požičané z rozšírenia energy lollipop - pekná funkcia!
function drawIcon(value) {
// Vytvor offscreen canvas pre lepší výkon
const canvas = new OffscreenCanvas(200, 200);
const context = canvas.getContext('2d');
// Nakresli farebný kruh zobrazujúci intenzitu uhlíka
context.beginPath();
context.fillStyle = value.color;
context.arc(100, 100, 50, 0, 2 * Math.PI);
context.fill();
// Vráť obrazové dáta pre ikonu prehliadača
return context.getImageData(50, 50, 100, 100);
}
```
**Čo tento pozadový skript robí:**
- **Počuje** správy z hlavného skriptu (ako recepčný, ktorý prijíma hovory)
- **Spracováva** požiadavky 'updateIcon' na zmenu ikonky na paneli nástrojov
- **Vytvára** nové ikony za behu pomocou Canvas API
- **Kreslí** jednoduchý farebný kruh, ktorý ukazuje aktuálnu uhlíkovú intenzitu
- **Aktualizuje** váš panel nástrojov prehliadača s novou ikonou
- **Používa** OffscreenCanvas pre hladký výkon (bez blokovania UI)
✅ Viac o Canvas API sa naučíte v [lekciách vesmírnej hry](../../6-space-game/2-drawing-to-canvas/README.md).
```mermaid
sequenceDiagram
participant CS as Skript obsahu
participant BG as Skript na pozadí
participant Canvas as OffscreenCanvas
participant Browser as Ikona prehliadača
CS->>BG: sendMessage({action: 'updateIcon', color})
BG->>Canvas: new OffscreenCanvas(200, 200)
Canvas->>Canvas: getContext('2d')
Canvas->>Canvas: beginPath() + fillStyle + arc()
Canvas->>Canvas: fill() + getImageData()
Canvas->>BG: Vrátiť obrazové dáta
BG->>Browser: chrome.action.setIcon(imageData)
Browser->>Browser: Aktualizovať ikonu panela s nástrojmi
```
### 🔄 **Pedagogická kontrola**
**Komplexné porozumenie rozšíreniu**: Overte si svoju znalosť celého systému:
- ✅ Ako funguje posielanie správ medzi rôznymi skriptmi rozšírenia?
- ✅ Prečo používame OffscreenCanvas namiesto obyčajného Canvas pre výkon?
- ✅ Akú úlohu zohráva Chrome Runtime API v architektúre rozšírenia?
- ✅ Ako algoritmus výpočtu farieb mapuje dáta na vizuálnu spätnú väzbu?
**Výkonnostné aspekty**: Vaše rozšírenie teraz demonštruje:
- **Efektívnu komunikáciu**: Čistá komunikácia medzi skriptovacími kontextmi
- **Optimalizované vykresľovanie**: OffscreenCanvas zabraňuje blokovaniu UI
- **Aktualizácie v reálnom čase**: Dynamické zmeny ikony na základe živých dát
- **Správu pamäte**: Správne čistenie a spracovanie zdrojov
**Čas otestovať vaše rozšírenie:**
- **Zostavte** všetko pomocou `npm run build`
- **Obnovte** svoje rozšírenie v prehliadači (nezabudnite na tento krok)
- **Otvorte** rozšírenie a sledujte, ako sa ikona mení farby
- **Skontrolujte**, ako reaguje na skutočné údaje o uhlíku zo sveta
Teraz ihneď uvidíte, či je vhodný čas na pranie alebo či máte čakať na čistejšiu energiu. Práve ste vytvorili niečo naozaj užitočné a zároveň sa naučili niečo o výkonnosti prehliadača.
## GitHub Copilot Agent Challenge 🚀
Použite režim Agent na splnenie nasledujúcej výzvy:
**Popis:** Vylepšite schopnosti monitorovania výkonnosti rozšírenia prehliadača pridaním funkcie, ktorá sleduje a zobrazuje časy načítania pre rôzne komponenty rozšírenia.
**Výzva:** Vytvorte systém monitorovania výkonnosti pre rozšírenie prehliadača, ktorý meria a zaznamenáva čas potrebný na získanie údajov o CO2 z API, výpočet farieb a aktualizáciu ikony. Pridajte funkciu `performanceTracker`, ktorá využíva Performance API na meranie týchto operácií a zobrazuje výsledky v konzole prehliadača s časovými značkami a metrikami trvania.
Viac informácií o [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) nájdete tu.
## 🚀 Výzva
Tu je zaujímavá detektívna misia: vyberte niekoľko open source webstránok, ktoré existujú už roky (napríklad Wikipedia, GitHub alebo Stack Overflow) a preskúmajte ich históriu commitov. Dokážete nájsť miesta, kde robili zlepšenia výkonnosti? Aké problémy sa stále opakovali?
**Prístup k vyšetrovanie:**
- **Hľadajte** v správach ku commitom slová ako "optimize", "performance" alebo "faster"
- **Pozorujte** vzory - opravujú stále tie isté typy problémov?
- **Identifikujte** bežné príčiny spomaľovania webstránok
- **Zdieľajte** svoje zistenia - ostatní vývojári sa môžu učiť z reálnych príkladov
## Test po prednáške
[Test po prednáške](https://ff-quizzes.netlify.app/web/quiz/28)
## Prehľad a samostatné štúdium
Zvážte prihlásenie sa na [výkonnostný newsletter](https://perf.email/)
Preskúmajte spôsoby, ako prehliadače hodnotia webovú výkonnosť cez záložky výkonu v nástrojoch pre vývojárov. Nachádzate nejaké zásadné rozdiely?
### ⚡ **Čo môžete spraviť v nasledujúcich 5 minútach**
- [ ] Otvorte Správcu úloh prehliadača (Shift+Esc v Chrome) a pozrite využitie zdrojov rozšírení
- [ ] Použite záložku Výkon v DevTools na nahrávanie a analýzu výkonu webstránky
- [ ] Skontrolujte stránku rozšírení prehliadača, ktoré rozšírenia ovplyvňujú čas spustenia
- [ ] Skúste dočasne vypnúť rozšírenia a porovnajte zmeny vo výkonnosti
### 🎯 **Čo môžete dosiahnuť počas tejto hodiny**
- [ ] Dokončiť test po lekcii a pochopiť koncepty výkonu
- [ ] Implementovať background skript pre vaše rozšírenie prehliadača
- [ ] Naučiť sa používať browser.alarms na efektívne pozadie úlohy
- [ ] Precvičiť si odovzdávanie správ medzi content scripty a background scripty
- [ ] Meranie a optimalizovanie využitia zdrojov vášho rozšírenia
### 📅 **Váš týždenný plán zlepšovania výkonu**
- [ ] Dokončiť vysoko výkonné rozšírenie prehliadača s funkciami na pozadí
- [ ] Ovládnuť service workery a modernú architektúru rozšírení
- [ ] Implementovať efektívnu synchronizáciu dát a cache stratégie
- [ ] Naučiť sa pokročilé techniky ladenia výkonu rozšírení
- [ ] Optimalizovať vaše rozšírenie pre funkčnosť aj efektívnosť zdrojov
- [ ] Vytvoriť komplexné testy pre scenáre výkonu rozšírenia
### 🌟 **Váš mesačný plán ovládnutia optimalizácie**
- [ ] Vyvinúť podnikové rozšírenia prehliadača s optimálnym výkonom
- [ ] Spoznávať Web Workers, Service Workers a moderný webový výkon
- [ ] Prispievať do open source projektov zameraných na optimalizáciu výkonu
- [ ] Ovládnuť interná architektúru prehliadača a pokročilé ladenie
- [ ] Vytvárať nástroje a príručky monitorovania výkonu
- [ ] Stať sa expertom na výkon, ktorý pomáha optimalizovať webové aplikácie
## 🎯 Váš časový plán ovládnutia rozšírení prehliadača
```mermaid
timeline
title Kompletný postup vývoja rozšírenia
section Základy výkonu (20 minút)
Profilovanie prehliadača: Ovládanie DevTools
: Analýza časovej osi
: Identifikácia úzkych miest
: Kritická cesta renderovania
section Úlohy na pozadí (25 minút)
Architektúra rozšírenia: Prenos správ
: Skripty na pozadí
: Použitie Runtime API
: Komunikácia medzi kontextmi
section Vizualna spätná väzba (30 minút)
Dynamické UI: Algoritmy výpočtu farieb
: Integrácia Canvas API
: Generovanie ikon
: Aktualizácie v reálnom čase
section Optimalizácia výkonu (35 minút)
Efektívny kód: Asynchrónne operácie
: Správa pamäte
: Čistenie zdrojov
: Monitorovanie výkonu
section Pripravené na produkciu (45 minút)
Vylepšenia a testovanie: Kompatibilita medzi prehliadačmi
: Riešenie chýb
: Užívateľský zážitok
: Validácia výkonu
section Pokročilé funkcie (1 týždeň)
Ekosystém rozšírenia: Chrome Web Store
: Spätná väzba používateľov
: Integrácia analytiky
: Správa aktualizácií
section Profesionálny rozvoj (2 týždne)
Podnikové rozšírenia: Tímová spolupráca
: Kontrola kódu
: CI/CD pipeline
: Bezpečnostné audity
section Majstrovstvo experta (1 mesiac)
Odbornosť platformy: Pokročilé Chrome API
: Optimalizácia výkonu
: Vzory architektúry
: Príspevky do open source
```
### 🛠️ Váš kompletný toolkit na vývoj rozšírení
Po dokončení tejto trilógie ste ovládli:
- **Architektúru prehliadača**: Hlboké pochopenie integrácie rozšírení s prehliadačmi
- **Profilovanie výkonu**: Schopnosť identifikovať a opravovať úzke miesta pomocou nástrojov pre vývojárov
- **Asynchrónne programovanie**: Moderné JavaScript vzory pre responzívne, neblokujúce operácie
- **Integráciu API**: Získavanie externých dát s autentifikáciou a spracovaním chýb
- **Vizuálny dizajn**: Dynamické aktualizácie UI a generovanie grafik cez Canvas
- **Odovzdávanie správ**: Komunikácia medzi skriptami v architektúre rozšírení
- **Používateľskú skúsenosť**: Stavy načítania, spracovanie chýb a intuitívna interakcia
- **Zručnosti pre produkciu**: Testovanie, ladenie a optimalizácia pre reálne nasadenie
**Aplikácie v reálnom svete**: Vaše zručnosti sa priamo využívajú v:
- **Progresívnych webových aplikáciách**: Podobná architektúra a výkonnostné vzory
- **Electron desktop aplikáciách**: Multiplatformové aplikácie využívajúce webové technológie
- **Mobilných hybridných aplikáciách**: Vývoj cez Cordova/PhoneGap s web API
- **Podnikových webových aplikáciách**: Komplexné dashboardy a nástroje produktivity
- **Rozšíreniach Chrome DevTools**: Pokročilé nástroje pre vývojárov a ladenie
- **Integrácii Web API**: Ľubovoľné aplikácie komunikujúce s externými službami
**Profesionálny dopad**: Teraz môžete:
- **Stavať** produkčne pripravené rozšírenia od konceptu po nasadenie
- **Optimalizovať** výkonnosť webových aplikácií s priemyselnými nástrojmi
- **Architektúrovať** škálovateľné systémy s rozumným oddelením zodpovedností
- **Ladiť** komplexné asynchrónne operácie a komunikáciu medzi kontextami
- **Prispievať** do open source projektov a štandardov prehliadačov
**Príležitosti na ďalšej úrovni**:
- **Vývojár Chrome Web Store**: Publikovať rozšírenia pre milióny používateľov
- **Inžinier webového výkonu**: Špecializovať sa na optimalizáciu a UX
- **Vývojár platformy prehliadača**: Prispievať ku vývoju prehliadačového jadra
- **Tvůrce rámcov pre rozšírenia**: Vyvíjať nástroje pre iných vývojárov
- **Vzťahy s vývojármi**: Šíriť vedomosti prostredníctvom výučby a tvorby obsahu
🌟 **Úspech odomknutý**: Vybudovali ste kompletné, funkčné rozšírenie prehliadača, ktoré demonštruje profesionálne postupy a moderné web štandardy!
## Zadanie
[Analyzuj stránku pre výkon](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Vyhlásenie o zodpovednosti**:
Tento dokument bol preložený pomocou AI prekladateľskej služby [Co-op Translator](https://github.com/Azure/co-op-translator). Hoci sa snažíme o presnosť, prosím vezmite na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Originálny dokument v jeho pôvodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za žiadne nedorozumenia alebo nesprávne výklady vyplývajúce z používania tohto prekladu.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->