Course curriculum
-
1
PROJEKTY DO KURSU
-
WordPress
-
Next.js
-
Astro
-
-
2
Kick-off: optymalizacja web performance’u w dobie AI. Fundamenty optymalizacji wydajności w dobie AI - metryki, dane i proces.
-
Wprowadzenie - kim jestem i o czym jest ten kurs
-
Idea kursu i projekty do wyboru
-
Metryki wydajności: TTFB, RTT, FCP, LCP, CLS, INP
-
Skąd brać wartości metryk: dane field vs dane laboratoryjne
-
Źródła danych i narzędzia do optymalizacji
-
Kultura wydajności i performance budget
-
AI a optymalizacja: dlaczego sam prompt "popraw wydajność" nie wystarczy
-
Proces audytu: waterfall, strategie renderowania i serwer
-
Run-time performance: co dzieje się po załadowaniu strony
-
Typy nawigacji / zachowania użytkowników
-
Interakcje, INP i agenty AI
-
Ora.ai - audyt gotowości strony dla agentów AI
-
Metryki w praktyce: TTFB i jej składowe (DNS, TCP, TLS, HTTP)
-
Metryki w praktyce: progi LCP, CLS i INP
-
Filozofia optymalizacji: na co masz wpływ, a na co nie
-
Priorytetyzacja zasobów i waterfall frontend/backend
-
Optymalizacja z AI: podsumowanie procesu i gdzie testować
-
Narzędzie ngrok i pierwsze zadanie
-
Wydajność jako system w zespole IT / SEO
-
Wyniki biznesowe a poprawa wydajności
-
Spotkanie na żywo
-
Zadanie
-
-
3
Od żądania HTTP do renderu na froncie. Full-stack wydajność: od żądania HTTP do piksela.
-
Case study na żywo: dlaczego LCP ma 4s, przy szybkim czasie FCP (zagadka early hints)
-
Full-stack podejście: żądanie HTTP jest wszędzie
-
Pełny łańcuch: od żądania HTTP do piksela
-
DNS lookup: jak przyspieszyć rozpoznanie domeny
-
Szyfrowane połączenie: TLS/SSL i wersje HTTP
-
CDN na przykładzie Cloudflare
-
Backend: co dzieje się po stronie serwera (WordPress, Next.js, TTFB)
-
Frontend: krytyczna ścieżka renderowania
-
Zadanie
-
Spotkanie na żywo
-
-
4
Narzędzia do testowania i diagnostyki wydajności
-
Wprowadzenie: toolbox i podział testów (lab vs field)
-
PageSpeed Insights
-
Lighthouse lokalnie: profil optymalizacyjny i kalibracja throttlingu
-
Web Performance Planner
-
CrUX i CrUX Vis
-
Google Search Console: statystyki indeksowania a wydajność
-
Real User Monitoring: idea, providerzy, MCP
-
Chrome DevTools: Performance Panel
-
Chrome DevTools: Network Panel
-
Chrome DevTools: Overrides
-
Chrome DevTools: Snippets
-
WebPageTest
-
Terminal
-
Field data vs testy syntetyczne
-
Proces: praca z RUM i priorytetyzacja problemów
-
Workflow audytu z klientem krok po kroku
-
Podsumowanie
-
Zadanie
-
Spotkanie na żywo
-
-
5
START - Audyt wydajności z AI
-
Wprowadzenie: fundament audytu i własny proces
-
Co mieć przygotowane: strona, kod, AI asystent
-
AI skills i serwery MCP
-
Dostęp do kodu i warstwy pomiaru (lab/field)
-
Własny tool: fundament, agenda i dwa tryby pracy
-
Strona pod domeną i pierwszy widoczny problem TTFB (demo projektu)
-
Real User Monitoring: instalacja i pierwsze dane
-
CrUX i Google Search Console
-
DevTools MCP / Safari MCP: instalacja
-
RUM MCP (na przykładzie DebugBear): instalacja i autentykacja
-
Demo RUM MCP: pytanie o bottleneck i interpretacja przez AI
-
webperf snippets jako AI Agent Skills
-
AI Skills pod stack: Vercel, WordPress, Astro/Shopify
-
Implementacja fundamentu AI Web Performance
-
Typy podstron i testy WebPageTest
-
Uruchomienie audytu AI i budowa site-profile.md
-
Wyniki WebPageTest (JSON) i baseline w audycie AI
-
RUM i CrUX w audycie, wnętrze DebugBear
-
Podsumowanie: pierwszy etap audytu i co dalej
-
Zadanie
-
Spotkanie na żywo
-
-
6
Optymalizacja DNS, TLS/SSL i HTTP
-
Wprowadzenie: plan sesji i warstwa sieciowa
-
Optymalizacja DNS: anycast i po co Cloudflare
-
Pomiar DNS lookup: DevTools, WebPageTest, RUM
-
Cloudflare DNS: nameservery, rejestrator vs provider, TTL i checklista
-
Szyfrowane połączenie: TLS 1.3 i session resumption
-
Audyt SSL/TLS
-
HSTS: usunięcie redirectu HTTP na HTTPS
-
Protokół HTTP/2 i HTTP/3
-
Rozgrzewanie połączenia: preconnect i DNS prefetch
-
Atrybut crossorigin przy preconnect
-
Plan części praktycznej
-
Rozbudowa AI Audytu: warstwa sieciowa
-
Uruchomienie audytu i budowa stage preconnect
-
Wyniki audytu sieciowego i rekomendacje
-
Przeniesienie DNS do Cloudflare
-
Włączenie TLS 1.3 na Nginx (przykład)
-
Debugowanie błędu SSL (przykład)
-
Podsumowanie sesji
-
Zadanie
-
Spotkanie na żywo
-
-
7
CDN / Edge na przykładzie Cloudflare
-
Wprowadzenie - temat warsztatu
-
Wpływ Cloudflare DNS na DNS Lookup
-
Status DNS only, włączenie proxy i tryby SSL/TLS
-
Certyfikat Origin - generowanie, bundle i konfiguracja Nginx
-
Edge Certificates - minimalna wersja TLS i HSTS
-
Protocol Optimization - HTTP/3, priorytetyzacja, 0-RTT
-
Content Optimization - Speed Brain, Cloudflare Fonts, Early Hints
-
Rocket Loader, APO i optymalizacja obrazków
-
Real User Monitoring w Cloudflare
-
Boty, Bot Fight Mode, Email Obfuscation i Analytics
-
Argo Smart Routing
-
Warstwy cache'a i browser cache TTL
-
Cache Rules i full page caching w praktyce
-
Tiered Cache
-
Zadanie
-
Spotkanie na żywo
-
-
8
Serwer, optymalizacja backendu i strategii renderowania
-
Wprowadzenie - temat warsztatu i kolejność optymalizacji
-
Najpierw serwer: zasoby serwerowe, architektura
-
Case study: dwie strony WP, WPForms i opcache
-
Hosting: współdzielony vs VPS/managed
-
Serwery HTTP: Nginx, Apache, LiteSpeed i LiteSpeed Cache
-
Wersja PHP a wydajność
-
OPcache
-
PHP Workery i PHP-FPM: tryby i max-children
-
Baza danych: wersja i silnik tabel (InnoDB)
-
Object cache i cache maskujący słaby serwer
-
Testowanie pod obciążeniem: Apache Bench
-
Skrypt diagnostyczny serwera (WordPress / aplikacje PHP)
-
New Relic APM
-
Query Monitor (WordPress)
-
Code Profiler Pro (WordPress)
-
wp-config i runtime WordPressa
-
Novamira MCP - WordPress jako serwer MCP
-
Optymalizacja backendu przez SSH i AI
-
Tryby renderowania: SSG, ISR, PPR, SSR, CSR - trochę teorii
-
Renderowanie a Next.js lub WordPress, CDN i mieszanie trybów
-
Demo ISR: stale-while-revalidate (SWR)
-
Demo PPR (streaming) i SSR
-
Demo mieszania trybów: e-commerce ISR i koszyk client-side CSR
-
Waterfall "backendu na frontendzie" w Sentry
-
Sentry i AI: logowanie GraphQL, analiza kodu i fix
-
Tryb renderowania jako właściwy fix (SSR-ISR) i podsumowanie
-
Server Timing API
-
Zadanie
-
Spotkanie na żywo
-
-
9
CDN + edge cache + ustawienia cache
-
Wyniki optymalizacji: zmiana SSR na ISR w projekcie Next.js (demo)
-
Cache jest królem - wprowadzenie i warstwy cache'a
-
Strategie cache'owania, nagłówki cache-control i inwalidacja
-
Next.js i Cloudflare: cache dokumentu HTML na CDN
-
WordPress: pomost backend-frontend-edge i wybór W3 Total Cache
-
WordPress W3 Total Cache: warstwy, page cache, wykluczenia i preload
-
WordPress W3 Total Cache i Cloudflare: reguła cache dla WordPressa (full page HTML)
-
Cloudflare APO: integracja, instalacja, konfiguracja i inwalidacja
-
Astro i inne frameworki + podsumowanie
-
Zadanie
-
Spotkanie na żywo
-
-
10
Optymalizacja startu renderowania frontendu
-
Wprowadzenie - od backendu do krytycznej ścieżki renderowania
-
Trzy filary: mniej, później, warunkowo
-
Im mniej tym lepiej - warstwa transferu i renderowania
-
Waterfall: pytania do zasobów Above The Fold i linia start render
-
Od HTML do pikseli: DOM, CSSOM i skrypty blokujące parser
-
Co blokuje start renderowania: CSS i skrypty
-
Błędy 404 i niedostępne hosty zewnętrzne
-
Wodospad a aktywność głównego wątku
-
Czytanie wodospadu w praktyce: pojedyncze pliki i uskok head/body
-
Pętla optymalizacji i audyt bez dostępu do kodu źródłowego
-
WebPageTest Experiments i DevTools Overrides
-
Cel dla agenta AI: dane, priorytety i podział na etapy
-
Wiarygodność pomiarów: kilka prób, mediana, zimny cache
-
AI Audyt w kursie - etap startu renderowania
-
Demo: dwa projekty - WooCommerce i Next.js
-
Prompt do analizy startu renderowania - omówienie etapów
-
LIVE DEMO - audyt startu renderowania z AI (stage 1-5)
-
Podsumowanie CRP: field, lab, test AB i wdrożenie
-
LIVE DEMO REZULTAT: jak agent AI sobie poradził z optymalizacją startu renderowania?
-
Zadanie
-
Spotkanie na żywo
-
-
11
HTML + DOM + CSS + CSSOM
-
Spotkanie na żywo
-
Zadanie
-
HTML, DOM, CSS i CSSOM - dlaczego HTML jest pierwszy?
-
DOM a HTML - koszt głębokiej struktury
-
Jak zbadać DOM i co dziś mówi Lighthouse
-
Demo: Optimize DOM Size w praktyce - od PageSpeed Insights/Lighthouse do werdyktu
-
Rekomendacje: o czym pamiętać przy optymalizacji struktury DOM
-
Zajrzyj do dokumentu HTML: beautify i analiza
-
Prosty HTML dla botów i AI crawlerów
-
CSS jako zasób blokujący renderowanie
-
Minifikacja i łączenie plików CSS
-
Asynchroniczny CSS przez media="print"
-
Inline CSS w sekcji head i Early Hints
-
Krytyczny CSS - kiedy ma sens, a kiedy szkodzi
-
content-visibility w CSS - leniwe renderowanie
-
Jak piszesz CSS - selektory, rekalkulacja stylów i NodeList
-
CSS Selector Stats w DevTools i podsumowanie
-
-
12
JS + skrypty zewnętrzne (w tym Google Tag Manager)
-
JavaScript to najdroższy zasób - cztery koszty każdego skryptu
-
Cztery tryby skryptów: sync, async, defer i module
-
Async i defer w praktyce
-
Gdzie umieszczać skrypty JS?
-
Ukryta zależność JavaScriptu od CSS
-
Drzewo decyzyjne dla każdego skryptu na stronie
-
Audyt listy skryptów - co usunąć i jak w tym pomaga AI
-
Warunkowe ładowanie i ładowanie po interakcji
-
Minifikacja i łączenie JSów
-
Rozmiar bundla - code splitting, tree shaking i coverage
-
Barrel files - cichy zabójca podziału kodu
-
Ile waży biblioteka i co siedzi w bundlu
-
Polyfille i ładowanie zależne od urządzenia i łącza
-
Jak JavaScript wpływa na LCP i INP
-
Skrypty zewnętrzne - czego nie kontrolujesz
-
SPOF, realny koszt third party i kaskada Google Tag Manager
-
Blokowanie requestów jako szybka walidacja
-
Opóźnianie Google Tag Managera do pierwszej klatki
-
Ładowanie i wykonywanie JS po pierwszej interakcji
-
Rozgrzewanie połączeń - preconnect i dns-prefetch
-
Audyt tagów Google Tag Managera z AI
-
Patch na dataLayer - Google Tag Manager a INP
-
Zadanie
-
Spotkanie na żywo
-
-
13
Obrazki i wideo
-
Obrazki to zwykły zasób - cztery pytania i cztery dźwignie
-
Upload time kontra delivery time - gdzie optymalizować obrazki
-
Responsywne obrazki - srcset, sizes=auto, picture
-
img kontra background-image - dlaczego tło startuje później
-
SVG i ikonki - inline, img czy sprite map
-
base64 i data URI
-
width i height - rezerwacja przestrzeni dla obrazka
-
Hero image jako LCP - priorytet, własna domena, preconnect
-
CDN obrazkowy - zysk, koszt i praktyczna reguła podziału
-
Lazy loading - natywny, pułapka iframe'ów, LCP i decoding=async
-
Ukryty koszt transformacji po stronie serwera (przykład Next.js)
-
Wideo natywne - kompresja i atrybut poster
-
GIF kontra wideo - dlaczego zawsze wideo
-
Jak ładować natywne video na stronie
-
YouTube i Vimeo - tryb fasadowy zamiast zwykłego iframe'a
-
Zadanie
-
Spotkanie na żywo
-
-
14
Fonty
-
Dlaczego fonty są problematyczne - FOIT, FOUT i skok układu
-
Trzy typy fontów: systemowe, self-hosted i zewnętrzne
-
Jak przeglądarka odkrywa font - @font-face, kolejka, @import i preload
-
Demo pięciu wariantów ładowania fontów - waterfalle, wyniki i wnioski
-
Krytyczny CSS kontra preload i audyt fontów webperf snippetem
-
font-display - swap, pułapka CLS i pozostałe wartości
-
Self-hosting fontów i Cloudflare Fonts
-
Waga fontów - tylko potrzebne grubości i variable fonts
-
Subsetting, woff2, unicode-range i licencje fontów
-
Cache'owanie fontów
-
Fonty ikonkowe - co z nimi?
-
WordPress i page buildery - must-use plugin do preloadu fontu (case study)
-
Frameworki - Next.js, React i weryfikacja na waterfallu
-
Zadanie
-
Spotkanie na żywo
-
-
15
Optymalizacja CMP / cookie popup
-
Cookie pop-up jako konflikt: prawo, analityka i performance
-
Jakie metryki psuje cookie pop-up - LCP, start renderowania, INP
-
Oficjalna instrukcja dostawcy i dlaczego celowo blokuje parser
-
Gotowy provider czy własny pop-up - GTM i Consent Mode v2
-
Performance'owe minimum - atrybut defer i kolejność skryptów
-
Rekomendacja: cookie pop-up + GTM
-
Gdy pop-up zostaje elementem LCP - render off-screen w CSS
-
INP na przycisku zgody - priorytet zmiany wizualnej przed kaskadą tagów
-
Hack z nakładką na przycisk zgody w Google CMP
-
Zadanie
-
Spotkanie na żywo
-
-
16
Automatyzacja optymalizacji z AI - AI Goal, deploy i weryfikacja w pętli
-
Łańcuch wydajności a AI - gdzie realnie pomaga na każdym etapie
-
Pętla optymalizacji z AI - wdrożenie na serwer i cel dla agenta
-
Rozbiór promptu - goal, WebPageTest JSON, MCP i automatyczny deploy
-
Baseline, godzina pracy agenta i wyniki - Lighthouse score 36/100 -> 83/100
-
Czy to było tego warte - bilans kosztu i przegląd zmian agenta
-
Cena podejścia całościowego i konkluzja AI goals
-
-
17
Optymalizacja interakcji wg INP
-
Czym naprawdę jest optymalizacja interakcji?
-
Anatomia INP: co musisz wiedzieć
-
Input delay a ładowanie strony - wczesne interakcje i główny wątek
-
Long task - dzielenie zadania w JS
-
Web worker - ciężka logika poza głównym wątkiem
-
Optimistic UI - wizualna odpowiedź przed zapisem
-
Cookie banner a INP - przycisk zgody i kaskada skryptów
-
Google Tag Manager i eventy na kliknięciu - diagnoza, poprawka i test na żywo
-
CSS, rekalkulacja stylów i struktura DOM a czas interakcji
-
Które interakcje mierzyć - lab, agent AI i rzeczywiści użytkownicy
-
Optymalizacja INP z RUM i agentem AI - od danych z produkcji do wdrożenia
-
Zadanie
-
Spotkanie na żywo
-
-
18
Runtime performance: co frontend robi, gdy wygląda na załadowany
-
Runtime performance: co strona robi po załadowaniu i jak odroczyć ciężki komponent
-
Długie zadania, Total Blocking Time i namierzanie winnego chunka
-
Rekomendacje DevTools i minimum dla WordPressa: content-visibility
-
Komponent below-the-fold w Next: dynamiczny import karuzeli
-
Hydracja: HTML jest, ale strona jeszcze nie działa
-
Re-rendery w React i React Scan na żywo
-
React Doctor: audyt kodu i poprawki przez agenta AI
-
React Compiler: czy warto?
-
Back/Forward cache (bfcache): test w DevTools i Navigation Types w CrUX
-
Prefetch w Next.js: czy na pewno musisz pobierać wszystkie linki
-
Speculation Rules: natywny prefetch i prerender
-
Zadanie
-
Zadanie specjalne (dotyczy tylko projektu Next.js)
-
-
19
Stabilny układ frontendu wg CLS
-
CLS: zero, o które warto walczyć
-
Użytkownik: kliknąłem nie w to, co chciałem...
-
Kiedy przesunięcie jest w porządku
-
Lista podejrzanych w walce z CLS
-
Test pokazał CLS = 0. I co z tego?
-
Jak poprawić CLS?
-
Śledztwo na żywej stronie (przykład optymalizacji CLS #1)
-
Winowajca siedział w jednym widgecie (przykład optymalizacji CLS #2)
-
Reklamy a CLS (przykład optymalizacji CLS #3)
-
Zadanie
-
Spotkanie na żywo
-
-
20
Płynne animacje, tranzycje, interakcje & scroll
-
Płynność, 60 fps i jank
-
Na co patrzeć i pipeline renderowania
-
Warstwy: jak je podejrzeć i kiedy element dostaje własną
-
Reflow, repaint i efekty, które psują płynność
-
Narzędzia w DevTools: Paint Flashing, Frame Rendering Stats, Performance Panel
-
Long Animation Frames API i atrybucja
-
Czego nie animować: width, height, left itp. a faza layout
-
Repaint: co kosztuje malowanie i tanie opacity
-
Transform i opacity: dlaczego composite jest "tani" przy animacjach
-
Promowanie warstw i will-change w CSS i JS
-
JavaScript: requestAnimationFrame, layout thrashing, CSS kontra JS
-
View Transitions API
-
Scrollowanie i animacje poza ekranem
-
prefers-reduced-motion, content-visibility i AI w pętli
-
Zadanie
-
Spotkanie na żywo
-