← blog

Pełny audyt wydajności strony w 5 minut — jednym poleceniem do AI (zamiast godziny w DevTools)

Skill performance-audit do Claude Code robi pełny audyt Core Web Vitals przez Chrome DevTools — jednym poleceniem. Jak działa, jak go włączyć i jaki błąd znalazł na mojej stronie.

#AI #Claude Code #Core Web Vitals #Skille #Wydajność
⚡ Skill: chrome-devtools-mcp → Serwer MCP, przez który agent steruje prawdziwym Chrome.
Pełny audyt wydajności strony w 5 minut — jednym poleceniem do AI (zamiast godziny w DevTools)
// spis treści

Audyt wydajności strony zwykle wygląda tak: otwierasz DevTools, klikasz Lighthouse, czekasz, potem ręcznie grzebiesz w zakładce Network, sprawdzasz nagłówki cache, szukasz co blokuje render. Godzina klikania — a i tak połowę rzeczy przeoczysz.

Testowałem skilla performance-audit do Claude Code, który robi to wszystko jednym poleceniem. Agent sam steruje przeglądarką, zbiera trace, odpala Lighthouse, czyta nagłówki sieci i wypluwa raport z priorytetami. Sprawdziłem go na własnej stronie — damianslimak.pl. I znalazł błąd, którego sam bym nie zauważył, bo liczby i tak były zielone.

Z tego artykułu dowiesz się:


Czym jest performance-audit

To skill do Claude Code — gotowy zestaw instrukcji, który uczy agenta jednej konkretnej roboty. Ten robi audyt wydajności dowolnego URL-a. Stworzył go Krzysiek Radzikowski.

Pod spodem korzysta z serwera chrome-devtools-mcp — to most między Claude a prawdziwą przeglądarką Chrome. Agent nie zgaduje, tylko realnie odpala stronę, nagrywa performance trace i czyta te same dane, które widzisz w DevTools.

Efekt: zamiast klikać, piszesz "zrób audyt wydajności strony X" i dostajesz gotowy raport z listą napraw według ważności.

Strona damianslimak.pl — obiekt testu. Zdjęcie w hero to element LCP, do którego jeszcze wrócę.

Jak go włączyć

Trzy rzeczy muszą być na miejscu.

1. Serwer chrome-devtools-mcp — rejestrujesz go w Claude Code:

claude mcp add chrome-devtools -- npx chrome-devtools-mcp@latest --isolated --headless

Flagi mają znaczenie:

2. Gdzie zapisują się analizy — audyt zrzuca wszystko do folderu, który wskażesz: surowy trace, dane pomiarowe i gotowy raport w Markdown. Możesz z góry podać katalog na wyniki, więc pliki nie mieszają się z projektem — po robocie masz jedno miejsce z całą analizą.

3. Polecenie — piszesz zwyczajnie, po ludzku:

zrób audyt wydajności dla https://damianslimak.pl

Skill sam się uruchamia, bo jego opis łapie frazy typu "audyt wydajności", "Core Web Vitals", "Lighthouse", "sprawdź szybkość strony".

Jak to działa — krok po kroku

Skill prowadzi agenta przez ustalony workflow. To nie czarna skrzynka — każdy etap to konkretne narzędzie DevTools i konkretne dane.

Diagram

W praktyce dla mojej strony agent:

Całość — kilka minut, bez mojego klikania.

Co wyszło na damianslimak.pl

Najpierw twarde liczby z Lighthouse (wersja mobilna):

Raport Lighthouse dla damianslimak.pl: Accessibility 95, Best Practices 81, SEO 100.

Core Web Vitals z trace'u (laboratoryjnie):

Strona jest szybka, bo stoi na statycznym Astro, serwerze LiteSpeed z HTTP/3, kompresją Brotli i cache "immutable" na rok. Google Tag Manager jest zepchnięty do web workera przez Partytown, więc nie obciąża głównego wątku. Wzorcowa higiena.

I tu najciekawsza rzecz: skill sam znalazł jeden błąd sprzeczny z resztą.

Zdjęcie w hero (to z headshotem) jest największym elementem na ekranie — czyli element LCP. A ma ustawione "loading=lazy" i brak "fetchpriority=high". Mówiąc prościej: przeglądarka traktuje najważniejszy obraz strony jak coś, co może poczekać. To opóźnia jego wykrycie i załadowanie.

Rozbicie LCP na fazy pokazuje to czarno na białym:

Diagram

Te 41 ms "Load Delay" to bezpośredni koszt "lazy" na obrazie, który wcale nie powinien być leniwy. Przy szybkim łączu to drobiazg — ale na wolniejszym mobilnym te milisekundy się mnożą.

Fix jest jednolinijkowy: dla obrazu LCP zmień "loading=lazy" na "loading=eager" i dodaj "fetchpriority=high". W Astro wystarczy oznaczyć obraz jako priorytetowy.

Drugi realny problem — dostępność. Mobilne menu ma atrybut "aria-hidden=true", ale w środku trzyma klikalne, fokusowalne linki. Dla czytnika ekranu to sprzeczność. Jeden atrybut "inert" na zamkniętym menu naprawia jednocześnie wynik Accessibility (95 na 100) i drzewo dostępności dla agentów AI.

Jak wygląda raport

Na końcu dostajesz gotowy plik Markdown — z metrykami, znaleziskami i planem napraw w podziale na priorytety. Poniżej dwa fragmenty wygenerowane przez skilla (wklejam surowo, tak jak wyszły).

Plan działania z priorytetami:

## Plan działania (priorytety)

**P0 — Krytyczne (w tym tygodniu)**
- Element LCP (ds_headshot.webp): usuń loading="lazy", dodaj
  fetchpriority="high". Efekt: skrócenie Resource Load Delay (~41 ms),
  stabilniejszy LCP na wolniejszych łączach mobilnych.

**P1 — Ważne (następny sprint)**
- Menu mobilne (aria-hidden="true") zawiera fokusowalne linki →
  dodaj atrybut "inert". Naprawia Accessibility (95→100) i drzewo
  dostępności dla agentów AI.
- CookieConsent.css jest render-blocking → kandydat do odroczenia.

**P2 — Nice to have (backlog)**
- 7 plików woff2 (~105 kB) w initial load — rozważ subset/redukcję wag.

Werdykt końcowy w formie tabeli:

| Obszar          | Ocena | Uwagi                                        |
|-----------------|-------|----------------------------------------------|
| LCP             | ✅    | 178 ms; fix: eager + fetchpriority na obrazie |
| CLS             | ✅    | 0,0035 — tylko dekoracyjne mikro-przesunięcia |
| TTFB            | ✅    | LiteSpeed, cache HTML + Brotli                |
| Third-party     | ✅    | GTM offloadowany przez Partytown — wzorcowo   |
| Image delivery  | ⚠️    | obraz LCP lazy + bez fetchpriority            |
| Accessibility   | ⚠️    | 95 — fokusowalne linki w ukrytym menu         |

Nie musisz nic interpretować z surowych danych — skill sam nazywa problem, podaje spodziewany efekt i konkretny fix.

Skill to nie wyrocznia

Ważne, żeby to jasno powiedzieć: ten skill jest bardzo dobry we wczesnej fazie audytu, ale nie zastępuje pełnego audytu, który wykona osoba techniczna. To wciąż tylko skill — potrafi coś przeoczyć, czegoś nie zrobić, nie jest wyrocznią. Za to techniczne rzeczy sprawdza rzetelnie i automatyzuje robotę, która wcześniej zajmowała po prostu dużo więcej czasu.

Do jednorazowego sprawdzenia albo szybkiego przeglądu — działa świetnie od ręki. Ale jeśli ktoś chciałby używać go na stałe, w pracy z klientami, zalecałbym dostosować go pod siebie i dorzucić kilka opcji, które realnie się przydają:

Skill jest dobrą bazą. Traktuj go jak fundament, nie gotowca — i dopiero wtedy naprawdę zaczyna pracować za ciebie.

Efekt — dla kogo to jest

Więc co to realnie daje?

Komu się przyda: każdemu, kto ma stronę i nie chce zgadywać, gdzie leży problem. Freelancerowi robiącemu audyt dla klienta. Właścicielowi sklepu, który wie, że wolna strona to porzucone koszyki. Mnie — bo znalazł błąd, którego sam bym nie zauważył, skoro liczby i tak były zielone.

To jest dokładnie ten rodzaj roboty, o którym mówię od lat: nudną, powtarzalną, wymagającą skupienia czynność oddajesz robotowi. Ty patrzysz na wynik i podejmujesz decyzję.

Zatrudnij roboty, uwolnij ludzi.


P.S. Skill nie jest idealny — w dokumentacji miał kilka rozjazdów z realnym API narzędzia (inny format parametru ekranu, nieistniejąca opcja throttlingu, mylące info że Lighthouse zwraca też wynik Performance, którego akurat nie zwraca). Nic, co blokuje robotę, ale gdybym go wdrażał na stałe — najpierw bym te opisy poprawił. Uczciwie: testuję narzędzia zanim je polecę, i mówię też o rysach.