Kategoria: Wydajność

  • Optymalizacja wydajności JavaScript: Kompletny przewodnik na rok 2026

    JavaScript jest dziś największym wąskim gardłem wydajnościowym w nowoczesnym webie. Choć w dyskusjach o wydajności najczęściej mówi się o obrazach, to właśnie nieoptymalny JavaScript po cichu niszczy Core Web Vitals, zużywa baterię urządzeń mobilnych i zniechęca użytkowników, zanim zdążą zobaczyć treść.


    Dlaczego JavaScript jest problemem wydajnościowym?

    Każdy bajt JavaScriptu musi zostać przez przeglądarkę:
    pobrany, sparsowany, skompilowany i wykonany — nie tylko przesłany.

    Plik JS o rozmiarze 300 KB kosztuje znacznie więcej niż obraz o tej samej wadze, ponieważ:

    • obrazy są tylko dekodowane
    • JavaScript aktywnie obciąża CPU

    To szczególnie istotne, ponieważ:

    • JS działa na main thread (głównym wątku) — tym samym, który obsługuje renderowanie i interakcje
    • każde zadanie blokujące główny wątek na ponad 50 ms to tzw. Long Task, który pogarsza INP
    • urządzenia mobilne mają CPU 3–5× wolniejsze niż desktop
    • skrypty zewnętrzne konkurują o te same zasoby co Twój kod

    Zrozumienie Main Thread

    Główny wątek przeglądarki odpowiada za wszystko, co widzi użytkownik:

    • parsowanie HTML
    • stosowanie CSS
    • wykonywanie JavaScriptu
    • obsługę kliknięć
    • renderowanie pikseli

    Może wykonywać tylko jedno zadanie naraz.

    Gdy JS wykonuje Long Task:
    → przeglądarka nie reaguje na użytkownika
    → spada INP
    → strona wydaje się „ociężała”

    Pipeline wydajności wygląda tak:

    1. Przeglądarka pobiera HTML
    2. Zaczyna parsowanie
    3. Trafia na <script>pauza parsowania HTML
    4. Pobiera i wykonuje JS
    5. Wznawia parsowanie
    6. Renderuje stronę

    Każdy blokujący skrypt w <head> bezpośrednio pogarsza LCP.


    Jak mierzyć wydajność JavaScript

    Chrome DevTools – Performance

    Najważniejsze narzędzie do analizy:

    • Long Tasks (na czerwono > 50 ms)
    • Call Tree – które funkcje są najcięższe
    • aktywność main thread podczas interakcji

    Chrome DevTools – Coverage

    Pokazuje, ile kodu JS jest faktycznie używane.
    Jeśli 80% pliku nie jest wykorzystywane → ogromny potencjał optymalizacji.

    Lighthouse (PageSpeed Insights)

    Wskazuje m.in.:

    • Reduce unused JavaScript
    • Avoid long main-thread tasks
    • Minify JavaScript

    Bundlephobia / webpack-bundle-analyzer

    Wizualizuje bundle JS jako mapę — łatwo zobaczyć najcięższe biblioteki.


    Code Splitting – ładuj tylko to, co potrzebne

    Najważniejsza technika optymalizacji JS.

    Zamiast jednego dużego bundle:
    → dziel kod na mniejsze części
    → ładuj je tylko wtedy, gdy są potrzebne

    Route-based splitting

    // Źle:
    import CheckoutPage from './CheckoutPage';
    
    // Dobrze:
    const CheckoutPage = () => import('./CheckoutPage');
    

    Frameworki:

    • Next.js – automatycznie
    • SvelteKit – automatycznie
    • Vite – dynamiczne importy

    Component-level splitting

    Nie ładuj ciężkich komponentów od razu:

    • wykresy (np. Chart.js ~200 KB)
    • edytory tekstu
    • modale

    Tree Shaking – usuwanie martwego kodu

    Proces usuwania nieużywanego kodu przez bundler (Vite, Webpack, Rollup).

    Wymaga użycia ES Modules (import/export).

    Przykład:

    // Źle:
    import _ from 'lodash';
    
    // Dobrze:
    import debounce from 'lodash/debounce';
    

    Dodatkowo:

    • używaj lżejszych bibliotek (np. date-fns zamiast moment.js)
    • usuwaj nieużywane pakiety npm

    Strategia ładowania skryptów

    Sposób użycia <script> wpływa bezpośrednio na wydajność:

    TypZachowanieZastosowanie
    <script>blokuje HTMLunikaj w <head>
    asyncładuje równolegleanalityka
    deferpo HTMLwiększość skryptów
    import()na żądaniefunkcje opcjonalne

    Zasada:
    Brak synchronicznych <script> w <head> (poza absolutnym minimum).


    Web Workers – przenieś pracę poza main thread

    Web Workers pozwalają wykonywać JS w tle, bez blokowania UI.

    Idealne zastosowania:

    • przetwarzanie JSON
    • wyszukiwanie (np. Fuse.js)
    • obróbka obrazów
    • obliczenia
    // main.js
    const worker = new Worker('worker.js');
    worker.postMessage({ data: largeDataset });
    
    // worker.js
    self.onmessage = (e) => {
      const result = expensiveCalculation(e.data.data);
      self.postMessage({ result });
    };
    

    Biblioteka Comlink upraszcza pracę z workerami.


    Scheduler API – oddawanie kontroli przeglądarce

    Nowoczesne API: scheduler.yield()

    Pozwala dzielić długie zadania:

    async function processItems(items) {
      for (const item of items) {
        processItem(item);
        await scheduler.yield();
      }
    }
    

    Zastępuje stare setTimeout(fn, 0)
    → poprawia INP


    Zarządzanie skryptami zewnętrznymi

    Największy problem wydajnościowy.

    Skrypty typu:

    • analytics
    • chat
    • reklamy

    mogą dodać nawet 500 KB+ JS.

    Strategie:

    • audytuj każdy skrypt
    • ładuj po interakcji
    • używaj tag managera z kontrolą
    • hostuj krytyczne skrypty lokalnie
    • ustal performance budget

    Checklist optymalizacji JavaScript

    Bundle

    • code splitting
    • tree shaking
    • brak nieużywanych pakietów
    • analiza bundle

    Ładowanie

    • defer/async
    • lazy loading
    • brak blokujących <script>

    Runtime

    • brak Long Tasks > 50 ms
    • Web Workers
    • scheduler.yield()
    • debounce/throttle

    Third-party

    • audyt
    • lazy loading
    • performance budget

    Mindset wydajności JavaScript

    To nie jednorazowa optymalizacja — to proces.

    Najlepsze zespoły:

    • mają performance budget w CI/CD
    • monitorują bundle size
    • analizują każdy PR
    • śledzą Core Web Vitals 24/7

    W 2026 roku wydajność JavaScript to nie niszowa wiedza — to podstawowa umiejętność frontend developera.


    💡 Pro tip:
    Zacznij od zakładki Coverage w Chrome DevTools — często 60–80% JS na stronie nie jest używane przy pierwszym ładowaniu. To czysty koszt — usuń go w pierwszej kolejności, a zobaczysz natychmiastową poprawę LCP i INP.

  • Wyjaśnienie podstawowych parametrów sieci internetowych: Kompletny przewodnik po LCP, INP & CLS (2026)

    Core Web Vitals to złoty standard Google do mierzenia rzeczywistego doświadczenia użytkownika w sieci. To nie są opcjonalne, „miłe dodatki” — mają bezpośredni wpływ na pozycję Twojej strony w wynikach wyszukiwania oraz na to, czy użytkownicy zostaną na stronie, zaangażują się i dokonają konwersji.


    Czym są Core Web Vitals?

    Core Web Vitals to podzbiór Web Vitals — inicjatywy Google z 2020 roku, której celem było ujednolicenie sposobu mierzenia jakości doświadczenia użytkownika w internecie.

    Skupiają się na trzech kluczowych aspektach:

    • wydajności ładowania (loading performance)
    • interaktywności (interactivity)
    • stabilności wizualnej (visual stability)

    Google przypisuje każdemu URL-owi jeden z trzech statusów:

    • Good (Dobry) – spełnia wszystkie progi
    • ⚠️ Needs Improvement (Wymaga poprawy) – częściowo spełnia progi
    • Poor (Słaby) – nie spełnia jednego lub więcej progów

    Status całej strony jest zawsze określany przez najgorszą metrykę.
    Nawet jeśli LCP i INP są idealne, słaby CLS obniży ocenę całej strony do „Poor”.


    Trzy Core Web Vitals

    Aktualny zestaw Core Web Vitals obejmuje trzy metryki:

    MetrykaCo mierzyDobryWymaga poprawySłaby
    LCP – Largest Contentful PaintWydajność ładowania< 2.5 s2.5 – 4.0 s> 4.0 s
    INP – Interaction to Next PaintResponsywność< 200 ms200 – 500 ms> 500 ms
    CLS – Cumulative Layout ShiftStabilność wizualna< 0.10.1 – 0.25> 0.25

    Uwaga:
    FID (First Input Delay) został oficjalnie wycofany w marcu 2024 i zastąpiony przez INP, który dokładniej mierzy responsywność strony.


    LCP – Largest Contentful Paint

    LCP mierzy, jak długo trwa załadowanie największego widocznego elementu na stronie w obszarze widocznym dla użytkownika (viewport).

    Najczęściej jest to:

    • obraz hero
    • duży nagłówek
    • miniatura wideo

    To metryka najlepiej odpowiadająca na pytanie użytkownika:
    „Czy strona już się załadowała?”

    Co może być elementem LCP?

    • <img>
    • <image> w SVG
    • <video> (poster)
    • elementy blokowe z tekstem
    • elementy z tłem ustawionym przez url() w CSS

    Najczęstsze przyczyny słabego LCP

    • wolna odpowiedź serwera (TTFB)
    • zasoby blokujące renderowanie (CSS/JS)
    • nieoptymalne obrazy (JPEG/PNG)
    • brak CDN

    Jak poprawić LCP

    • konwertuj obrazy do WebP (~30% lżejsze) lub AVIF (~50% lżejsze)
    • dodaj <link rel="preload" as="image"> dla obrazu hero
    • eliminuj blokujący CSS i JS (inline + defer)
    • wdroż CDN
    • popraw TTFB (cel: < 600 ms)

    INP – Interaction to Next Paint

    INP zastąpił FID w marcu 2024 i znacząco poprawił sposób mierzenia responsywności.

    Zamiast mierzyć tylko pierwszą interakcję, INP mierzy pełny czas od dowolnej interakcji użytkownika do wizualnej reakcji przeglądarki.

    Strona z wysokim INP sprawia wrażenie „ociężałej”:

    • przyciski reagują z opóźnieniem
    • menu laguje
    • formularze „zacinają się”

    Najczęstsze przyczyny słabego INP

    • długie zadania JS (> 50 ms)
    • ciężkie skrypty zewnętrzne
    • nieoptymalne event listenery
    • zbędne re-renderowanie komponentów

    Jak poprawić INP

    • dziel długie zadania (scheduler.yield(), setTimeout)
    • używaj Web Workers
    • stosuj debounce i throttle
    • używaj code splitting
    • ogranicz skrypty zewnętrzne

    CLS – Cumulative Layout Shift

    CLS mierzy stabilność wizualną strony — czyli jak bardzo elementy przesuwają się podczas ładowania lub interakcji.

    Wysoki CLS powoduje jedne z najbardziej frustrujących sytuacji:
    klik → element się przesuwa → klik w coś innego.

    Co powoduje przesunięcia layoutu?

    • obrazy bez określonych wymiarów
    • reklamy i iframe’y
    • fonty (FOIT/FOUT)
    • dynamicznie wstrzykiwana treść

    Jak poprawić CLS

    • ustawiaj width i height dla <img> i <video>
    • rezerwuj miejsce dla reklam (min-height)
    • używaj font-display: optional lub preload fontów
    • nie dodawaj treści nad istniejącą zawartością
    • używaj aspect-ratio w CSS

    Dlaczego Core Web Vitals są ważne dla SEO

    Google wprowadziło Core Web Vitals jako czynnik rankingowy w aktualizacji Page Experience (2021) — a ich znaczenie stale rośnie.

    Są częścią większego zestawu sygnałów obejmujących:

    • mobile-friendly
    • HTTPS
    • brak nachalnych popupów

    Kluczowe: dane pochodzą z rzeczywistych użytkowników (CrUX), a nie tylko z testów.

    Wpływ biznesowy:

    • niższy bounce rate
    • wyższy współczynnik konwersji
    • przewaga nad konkurencją przy tym samym słowie kluczowym
    • słaby INP = utrata sprzedaży (checkout, formularze)

    Cykl życia Core Web Vitals

    Google stosuje przejrzysty model rozwoju metryk:

    • Experimental – testowane metryki
    • Pending – zatwierdzone, czekające na wdrożenie
    • Stable – aktualne metryki (LCP, INP, CLS)

    To oznacza, że w przyszłości mogą pojawić się nowe wskaźniki.


    Jak mierzyć Core Web Vitals

    Dane rzeczywiste (Field Data)

    • Google Search Console – raport Core Web Vitals
    • PageSpeed Insights – dane lab + CrUX
    • CrUX (BigQuery) – analiza na dużą skalę

    Dane laboratoryjne (Lab Data)

    • Lighthouse (Chrome DevTools)
    • WebPageTest
    • GTmetrix

    Ważne: tylko dane rzeczywiste wpływają na ranking.


    Checklist optymalizacji Core Web Vitals

    LCP

    • obraz hero w WebP/AVIF
    • preload obrazu hero
    • TTFB < 600 ms
    • CDN skonfigurowany
    • CSS krytyczny inline

    INP

    • brak Long Tasks > 50 ms
    • ograniczone skrypty zewnętrzne
    • debounce/throttle
    • code splitting
    • Web Workers

    CLS

    • width/height dla <img> i <video>
    • zarezerwowane miejsce dla reklam
    • font-display: swap
    • brak dynamicznego przesuwania treści

    Podsumowanie

    Core Web Vitals — LCP, INP i CLS — to nie tylko metryki wydajności, ale język, którym Google ocenia wartość Twojej strony.

    Spełnienie wszystkich trzech:

    • poprawia pozycje w Google
    • zmniejsza frustrację użytkowników
    • zwiększa konwersję

    Traktuj je jako ciągły proces optymalizacji, a nie jednorazowe zadanie.


    💡 Pro tip:
    Włącz automatyczne monitorowanie Core Web Vitals (CrUX API lub alerty z Google Search Console). Wychwytuj spadki natychmiast po wdrożeniach — zanim wpłyną na Twoje pozycje.

  • Wydajność sieci – Kompletny przewodnik optymalizacji na 2026

    Wydajność strony (Web Performance) jest jednym z najważniejszych czynników decydujących o sukcesie witryny w wyszukiwarkach oraz o satysfakcji użytkowników. W 2026 roku Google traktuje szybkość ładowania i jakość doświadczenia użytkownika jako sygnał rankingowy stanowiący około 15% wszystkich czynników rankingowych — to znacznie więcej niż jeszcze kilka lat temu.


    Czym jest Web Performance?

    Web performance to zbiór metryk i wskaźników mierzących, jak szybko i efektywnie strona się ładuje oraz reaguje na działania użytkownika. Obejmuje wszystko — od czasu ładowania zasobów (obrazów, skryptów, fontów) po stabilność wizualną i responsywność na kliknięcia lub dotknięcia ekranu.

    Wysoka wydajność bezpośrednio przekłada się na:

    • Wyższe pozycje w Google – wolne strony są karane przez algorytm
    • Niższy współczynnik odrzuceń – użytkownicy nie opuszczają strony przed jej załadowaniem
    • Wyższy współczynnik konwersji – opóźnienie o 1 sekundę może zmniejszyć konwersję nawet o 7%
    • Lepsze doświadczenie użytkownika (UX) – strona działa płynnie na każdym urządzeniu

    Core Web Vitals – trzy filary wydajności w 2026

    Google mierzy wydajność stron za pomocą zestawu trzech metryk znanych jako Core Web Vitals. Od marca 2024 roku metryka FID (First Input Delay) została zastąpiona przez INP (Interaction to Next Paint).

    Aktualne progi dla „dobrego” wyniku:

    MetrykaCo mierzy„Dobry” wynik
    LCP – Largest Contentful PaintCzas ładowania największego widocznego elementu (np. hero image)< 2.5 s
    INP – Interaction to Next PaintResponsywność na interakcje użytkownika< 200 ms
    CLS – Cumulative Layout ShiftStabilność wizualna (nieoczekiwane przesunięcia)< 0.1

    Strony, które nie spełniły tych progów, odnotowały średnio 23% spadek ruchu organicznego po aktualizacji algorytmu Google z marca 2025 roku.


    LCP – Largest Contentful Paint

    LCP mierzy czas potrzebny na wyrenderowanie największego widocznego elementu na stronie (najczęściej obraz hero lub główny blok tekstu).

    To metryka silnie powiązana z pierwszym wrażeniem — jeśli główna treść ładuje się wolno, użytkownik uzna stronę za wolną.

    Najczęstsze przyczyny słabego LCP:

    • Obrazy w formacie JPEG/PNG zamiast WebP lub AVIF
    • Brak preloadowania kluczowych zasobów
    • Wolna odpowiedź serwera (TTFB > 600 ms)
    • JavaScript blokujący renderowanie

    Jak poprawić LCP:

    • Konwertuj obrazy do WebP (ok. 30% lżejsze) lub AVIF (ok. 50% lżejsze)
    • Dodaj <link rel="preload"> dla obrazu hero
    • Wdroż CDN (Content Delivery Network)
    • Skonfiguruj cache HTTP na serwerze

    INP – Interaction to Next Paint

    INP został wprowadzony w marcu 2024 jako następca FID. Mierzy czas od interakcji użytkownika (kliknięcie, tapnięcie, naciśnięcie klawisza) do momentu, gdy przeglądarka wyświetli wizualną reakcję.

    To dokładniejszy wskaźnik niż FID, ponieważ analizuje wszystkie interakcje, a nie tylko pierwszą.

    Najczęstsze przyczyny słabego INP:

    • Ciężki JavaScript blokujący główny wątek
    • Długie zadania (Long Tasks > 50 ms)
    • Zbyt wiele event listenerów
    • Wolny rendering po stronie klienta

    Jak poprawić INP:

    • Stosuj code splitting i ładuj JS tylko gdy jest potrzebny
    • Przenoś ciężkie obliczenia do Web Workers
    • Używaj debounce i throttle dla zdarzeń
    • Optymalizuj re-renderowanie komponentów frontendowych

    CLS – Cumulative Layout Shift

    CLS mierzy stabilność wizualną strony — czyli jak bardzo elementy przesuwają się podczas ładowania.

    Wysoki CLS powoduje frustrację użytkownika (np. kliknięcie w zły element przez nagłe przesunięcie).

    Najczęstsze przyczyny słabego CLS:

    • Brak atrybutów width i height dla obrazów i wideo
    • Dynamicznie ładowane treści (reklamy, popupy)
    • Fonty powodujące FOIT/FOUT

    Jak poprawić CLS:

    • Zawsze definiuj width i height dla <img> i <video>
    • Rezerwuj miejsce dla dynamicznych elementów (np. min-height)
    • Używaj font-display: swap lub preload fontów

    Wpływ na SEO i wyniki biznesowe

    Web performance to nie tylko kwestia techniczna — ma bezpośredni wpływ na biznes.

    Strony z dobrze zoptymalizowanymi Core Web Vitals osiągają:

    • 25% wyższy współczynnik konwersji
    • 15% lepszy wzrost ruchu organicznego
    • nawet 2× więcej konwersji w porównaniu do wolnych stron

    Dane wydajności pochodzą z rzeczywistych użytkowników Chrome (CrUX), więc same testy laboratoryjne nie wystarczą — strona musi działać szybko w realnych warunkach.


    Jak mierzyć Web Performance

    Aby uzyskać pełny obraz, łącz dane laboratoryjne i rzeczywiste:

    • Google PageSpeed Insights – dane Lighthouse + CrUX
    • Google Search Console – raport Core Web Vitals (mobile/desktop)
    • GTmetrix – szczegółowe analizy i waterfall
    • WebPageTest – testy z różnych lokalizacji
    • Chrome DevTools – analiza wydajności JS i renderowania

    Kluczowe techniki optymalizacji

    Optymalizacja obrazów i mediów

    Obrazy stanowią 50–70% wagi strony.

    • używaj WebP/AVIF
    • stosuj loading="lazy"
    • korzystaj z srcset (responsive images)

    Minifikacja i kompresja

    • minifikuj CSS, JS, HTML
    • włącz Brotli lub Gzip
    • stosuj tree shaking

    Strategia ładowania zasobów

    • inline’uj krytyczny CSS
    • używaj defer i async
    • stosuj preconnect i prefetch

    Serwer i infrastruktura

    • korzystaj z CDN
    • włącz HTTP/2 lub HTTP/3
    • ustaw agresywny cache (Cache-Control)
    • utrzymuj TTFB < 600 ms

    Progressive Enhancement

    Ładuj najpierw treść podstawową, potem interakcje i na końcu ulepszenia wizualne.


    Wydajność mobilna

    W 2026 roku mobile-first to absolutna podstawa. Google indeksuje strony głównie w wersji mobilnej.

    Problemy:

    • słabsze CPU
    • wolniejsze połączenia
    • JS działa 3–5× wolniej niż na desktopie

    Wskazówki:

    • testuj na realnych urządzeniach
    • zmniejsz rozmiar bundle JS
    • stosuj Adaptive Loading

    Wydajność jako fundament SEO

    W 2026 roku wydajność to już nie dodatek — to fundament skutecznego SEO i UX.

    Regularne audyty, monitoring w Google Search Console i ciągła optymalizacja są kluczowe, by utrzymać przewagę konkurencyjną.


    💡 Pro tip:
    Nie traktuj optymalizacji wydajności jako jednorazowego zadania. Monitoruj metryki po każdej zmianie — nowa wtyczka, ciężki font lub nieoptymalny obraz mogą w kilka minut zniweczyć miesiące pracy.