Jak zrobić optymalizację zasobów krytycznych dla mobilnej wersji strony

Spis treści

Wprowadzenie – dlaczego mobile-first to podstawa

Ponad 60% ruchu internetowego pochodzi z urządzeń mobilnych, a Google już od 2019 roku stosuje mobile-first indexing. Dla większości stron to oznacza, że to właśnie mobilna wersja jest traktowana jako główna, a nie dodatek do desktopowej.

Na urządzeniach mobilnych każda sekunda ładowania ma ogromne znaczenie. Badania pokazują, że 53% użytkowników opuszcza stronę, jeśli nie ładuje się w ciągu 3 sekund. Dlatego optymalizacja zasobów krytycznych dla wersji mobilnej to nie luksus, a konieczność biznesowa.

W tym przewodniku przeprowadzę Cię przez najważniejsze techniki optymalizacji zasobów krytycznych, które bezpośrednio wpłyną na szybkość ładowania i doświadczenie użytkownika na urządzeniach mobilnych.

Analiza wydajności mobilnej – gdzie szukać bottlenecków

Zanim zaczniesz optymalizację, musisz wiedzieć, co dokładnie spowalnia Twoją stronę. Najważniejsze metryki do analizy:

Kluczowe metryki wydajności mobilnej:

1. Largest Contentful Paint (LCP)

Mierzy czas ładowania największego elementu na stronie. Dla urządzeń mobilnych powinien wynosić mniej niż 2.5 sekundy.

2. First Input Delay (FID)

Określa czas od pierwszej interakcji użytkownika do reakcji strony. Krytyczne dla mobile UX – powinno być poniżej 100 milisekund.

3. Cumulative Layout Shift (CLS)

Mierzy stabilność wizualną – ile elementów "skacze" podczas ładowania. Dobre wyniki to mniej niż 0.1.

Narzędzia do analizy:

PageSpeed Insights (Google)

Najpopularniejsze narzędzie do testowania wydajności:

  • Analiza laboratoryjnych i terenowych danych
  • Konkrete rekomendacje optymalizacji
  • Procentowe wyniki dla Core Web Vitals

Lighthouse (wbudowane w Chrome)

Dokładniejsza analiza niż PSI, pozwalająca na testowanie w kontrolowanych warunkach.

WebPageTest

Zaawansowane narzędzie do szczegółowej analizy waterfall oraz testowania z różnych lokalizacji i urządzeń.

Jeśli interesuje Cię szersze spojrzenie na Core Web Vitals, polecam przeczytać artykuł: Core Web Vitals w Google Search Console – analiza i optymalizacja, gdzie znajdziesz szczegółowe informacje o monitorowaniu i poprawie tych kluczowych metryk.

Critical CSS – styles above the fold

CSS krytyczny to technika, która wyodrębnia i wstawia bezpośrednio w kod HTML tylko te style, które są potrzebne do wyrenderowania widocznej części strony. Pozwala to na znaczące przyspieszenie pierwszego renderowania treści.

Dlaczego CSS krytyczny jest tak ważny dla urządzeń mobilnych?

Na urządzeniach mobilnych każdy bajt ma znaczenie. Pobieranie pełnych arkuszy stylów może zająć cenne milisekundy, szczególnie przy wolnych połączeniach 3G czy słabszym zasięgu.

Proces implementacji CSS krytycznego:

Krok 1: Identyfikacja treści widocznej bez przewijania

Określ, które elementy są widoczne w pierwszym widoku na urządzeniach mobilnych:

  • Header strony z nawigacją
  • Pierwszy section z hero image
  • Kluczowe przyciski CTA
  • Navigation menu (hamburger na mobile)

Krok 2: Wyodrębnienie stylów krytycznych

Użyj narzędzi takich jak:

  • Critical by Addy Osmani
  • PurifyCSS
  • Inline Critical CSS Generator

Krok 3: Implementacja w HTML

Umieść CSS krytyczny bezpośrednio w sekcji strony:

  • Wielkość poniżej 14KB (kompresja Gzip)
  • Inline styles zamiast zewnętrznych plików
  • Pozostałe style ładowane asynchronicznie

Opóźnione ładowanie obrazów i treści

Opóźnione ładowanie (lazy loading) to technika, która opóźnia ładowanie elementów do momentu, gdy są one potrzebne użytkownikowi. Szczególnie skuteczna na urządzeniach mobilnych, gdzie przepustowość i zasoby procesora są ograniczone.

Implementacja opóźnionego ładowania dla obrazów:

Natywne opóźnione ładowanie (nowsza metoda)

Dodaj atrybut loading="lazy" do tagów img:

  • Automatyczne ładowanie przeglądarki
  • Brak potrzeby dodatkowych bibliotek JavaScript
  • Wsparcie w większości nowoczesnych przeglądarek

Opóźnione ładowanie oparte na JavaScript

Użyj bibliotek jak IntersectionObserver API dla starszych przeglądarek:

  • Intersection Observer API (rekomendowane)
  • LazyLoad.js
  • lozad.js (bardzo lekka biblioteka)

Opóźnione ładowanie dla innych elementów:

Komponenty interfejsu

  • Galerie zdjęć
  • Embedded video (YouTube, Vimeo)
  • Mapy interaktywne
  • Widgety mediów społecznościowych

Treści dynamiczne

  • Artykuły "Przeczytaj także"
  • Komentarze (załadowanie po kliknięciu)
  • Formularze kontaktowe
  • Elementy związane z social proof

Zastępcze obrazy – najlepsze praktyki

Używaj lekkich obrazów zastępczych zamiast pełnych rozdzielczości:

  • Bardzo mały obraz zastępczy (VSP) – 1-2KB
  • Technika rozmycia – rozmyte zdjęcie ładowane przed pełnym
  • Solid color background zamiast białego tła
  • Progressive JPEG dla lepszego doświadczenia ładowania

Kompresja zasobów – Gzip, Brotli, minifikacja

Kompresja zasobów to jeden z najskuteczniejszych sposobów na zmniejszenie transferu danych na urządzeniach mobilnych. Szczególnie ważna przy wolnych połączeniach internetowych.

Kompresja tekstu (HTML, CSS, JS)

Gzip vs Brotli

Dwa główne algorytmy kompresji dostępne na serwerach:

  • Gzip: Szeroko wspierany, kompresja 60-80%
  • Brotli: Nowszy algorytm, lepsza kompresja dla tekstu (70-85%)
  • Preferuj Brotli, jeśli serwer go wspiera

Konfiguracja na serwerze

W pliku .htaccess (Apache) lub konfiguracji serwera:

  • Włącz kompresję dla plików tekstowych
  • Ustaw odpowiednie level kompresji (4-6)
  • Dodaj nagłówki cache dla statycznych zasobów

Minimalizacja plików

Minimalizacja CSS

  • Usuwanie komentarzy i niepotrzebnych spacji
  • Skracanie nazw zmiennych i selektorów
  • Łączenie podobnych reguł CSS
  • Usuwanie nieużywanych selektorów

Minimalizacja JavaScript

  • Obfuskacja kodu dla zwiększenia kompresji
  • Usuwanie dead code
  • Optymalizacja nazw funkcji i zmiennych
  • Tree shaking dla modułów ES6

Minimalizacja HTML

  • Usuwanie niepotrzebnych spacji i komentarzy
  • Optymalizacja atrybutów
  • Łączenie identycznych elementów

Narzędzia do automatyzacji kompresji:

Build tools

  • Webpack z pluginami kompresji
  • Gulp z gulp-clean-css i gulp-uglify
  • Parcel (automatyczna minifikacja)
  • Vite (ultra-szybkie bundling + minifikacja)

CDN dla mobilnej wersji – optymalne dostarczanie

Sieć dostarczania treści (CDN) to rozproszona sieć serwerów, która dostarcza zawartość z najbliższego geograficznie węzła. Dla urządzeń mobilnych CDN ma kluczowe znaczenie, szczególnie przy globalnym ruchu.

Dlaczego CDN jest kluczowy dla urządzeń mobilnych?

Urządzenia mobilne często łączą się z internetem przez różne sieci (WiFi, 4G, 3G) o różnej przepustowości i latencji. CDN minimalizuje wpływ geograficznej odległości i zwiększa szybkość ładowania.

Najlepsze praktyki CDN dla urządzeń mobilnych:

Optymalizacja geograficzna

  • Wybierz CDN z serwerami w głównych regionach ruchu
  • Skonfiguruj smart routing dla automatycznego wyboru najbliższego węzła
  • Monitoruj wydajność z różnych lokalizacji

Optymalizacje specyficzne dla urządzeń mobilnych

  • Compression na poziomie CDN
  • Image optimization i format WebP
  • HTTP/2 Server Push dla krytycznych zasobów
  • Edge caching dla statycznych elementów

Popularne rozwiązania CDN:

Cloudflare

  • Darmowy plan z podstawowymi funkcjami
  • Zaawansowane security features
  • Automatic image optimization
  • Workers dla custom edge logic

Amazon CloudFront

  • Świetna integracja z AWS
  • Precyzyjne kontrolowanie cache
  • Lambda@Edge dla serverless computing
  • Zaawansowane opcje routing

KeyCDN/MaxCDN

  • Lekka, szybka sieć
  • Prosty pricing
  • Real-time analytics
  • Image processing na edge

Konfiguracja pamięci podręcznej dla urządzeń mobilnych:

Zasady pamięci podręcznej

  • Długi TTL dla statycznych zasobów (CSS, JS, obrazy)
  • Krótki TTL dla dynamicznych treści
  • Cache versioning przez querystring
  • Selective caching na podstawie User-Agent

Optymalizacja ładowania czcionek

Czcionki webowe mogą znacząco spowolnić ładowanie strony, szczególnie na urządzeniach mobilnych. Prawidłowa optymalizacja może przyspieszyć pierwsze renderowanie treści nawet o 30%.

Formaty czcionek i ich optymalizacja

WOFF2 (rekomendowany)

  • Najlepsza kompresja (do 30% lepsza niż WOFF)
  • Wsparcie w 98% nowoczesnych przeglądarek
  • Mniejszy rozmiar plików = szybsze ładowanie

WOFF + TTF fallback

  • WOFF dla nowoczesnych przeglądarek
  • TTF dla starszych wersji
  • Preload dla krytycznych fontów

Strategie ładowania czcionek

Właściwość CSS Font Display

Najważniejsza właściwość do optymalizacji FOIT/FOUT:

  • swap: Natychmiast pokazuje fallback, zamienia na web font gdy gotowy
  • fallback: Krótki timeout, potem fallback
  • optional: Web font opcjonalny, jeśli za długo się ładuje – zostaje fallback

Wstępne ładowanie krytycznych czcionek

Wczytaj najważniejsze czcionki z wyprzedzeniem:

  • Primary heading font (H1)
  • Navigation menu font
  • Primary body text font

Tworzenie podzbiorów czcionek – zmniejszenie rozmiaru

Utwórz niestandardowe podzbiory czcionek zawierające tylko potrzebne znaki:

Optymalizacja zakresu Unicode

  • Latin basic dla większości treści
  • Dodatkowe znaki dla polskich znaków diakrytycznych
  • Numery i znaki specjalne dla UI
  • Emoji i symbole (osobny subset)

Narzędzia do tworzenia podzbiorów:

  • Fonttools (subsetting fontów TTF/OTF)
  • glyphhanger (automatyczne subsetting)
  • Font squirrel generator
  • Google Fonts (automatyczne subsetting)

API JavaScript do ładowania czcionek

FontFace API

Programowe ładowanie czcionek z kontrolą czasu:

  • Ładowanie on-demand
  • Monitoring statusu ładowania
  • Fallback dla nieudanych loadów

Strategie ładowania czcionek

  • Krytyczna ścieżka czcionek: Kluczowe czcionki na początku
  • Stopniowe ulepszanie: Podstawowe czcionki + ulepszenia
  • Opóźnione ładowanie czcionek: Czcionki ładowane na żądanie

Optymalizacja JavaScript dla urządzeń mobilnych

JavaScript to jedna z największych przeszkód w wydajności mobilnej. Długie wykonywanie skryptów blokuje renderowanie i interakcje użytkownika. Kluczem jest minimalizacja i optymalizacja wykonywania JS.

Redukcja rozmiaru JavaScript

Dzielenie kodu

Podziel aplikację na mniejsze fragmenty ładowane na żądanie:

  • Critical JS (navigation, basic interactions)
  • Page-specific modules
  • Feature modules (galleries, forms, widgets)
  • Vendor libraries (oddzielny chunk)

Tree shaking i eliminacja nieużywanego kodu

  • Usuń nieużywane funkcje i zmienne
  • Optymalizuj importy (import { func } instead of import *)
  • Użyj ES6 modules zamiast CommonJS
  • Webpack/Rollup automatyzują proces

Optymalizacja wykonywania JavaScript

Odroczenie niekrytycznego JavaScript

Odłóż wykonanie niekrytycznego JS:

  • defer – wykonanie po PARSOWANIU DOM
  • async – wykonanie gdy gotowy, asynchronicznie
  • Intersection Observer dla DOM manipulation on scroll
  • RequestIdleCallback dla low-priority tasks

Delegacja zdarzeń

Zamiast dodawać nasłuchiwanie zdarzeń do każdego elementu:

  • Dodaj jeden listener do parent element
  • Sprawdź event.target w handler function
  • Znacząco zmniejsza memory usage na mobile

Optymalizacje specyficzne dla urządzeń mobilnych

Optymalizacja zdarzeń dotykowych

  • Użyj touch events zamiast click dla lepszego responsiveness
  • Throttle touchmove events (max 60fps)
  • Passive event listeners dla scroll performance
  • Debounce resize events

Zarządzanie pamięcią

Urządzenia mobilne mają ograniczoną pamięć:

  • Unikaj memory leaks przez proper cleanup
  • Użyj WeakMap/WeakSet gdzie możliwe
  • Regular cleanup event listeners
  • Limit DOM manipulation operations

Stopniowe ulepszanie dla JS

Podstawowa funkcjonalność bez JavaScript

  • Podstawowa nawigacja HTML/CSS
  • Formularze z server-side validation
  • Linki i buttons działające bez JS
  • Progressive enhancement = lepsza dostępność

Funkcjonalności progresywnej aplikacji webowej

  • Service Worker dla offline caching
  • Web App Manifest
  • Install prompts
  • Background sync

Core Web Vitals – wpływ na SEO i UX

Core Web Vitals to zestaw metryk opracowanych przez Google, które bezpośrednio wpływają na doświadczenie użytkownika i pozycjonowanie w wyszukiwarkach. Dla urządzeń mobilnych mają one jeszcze większe znaczenie.

Largest Contentful Paint (LCP) – optymalizacja

LCP mierzy czas ładowania największego elementu na stronie. Główne przyczyny wysokich wartości LCP na urządzeniach mobilnych:

Wolne czasy odpowiedzi serwera

  • Solution: CDN, server-side caching, database optimization
  • Target: TTFB poniżej 800ms
  • Monitoring: Server response time w Google Search Console

Zasoby blokujące renderowanie

  • Solution: Critical CSS, preload key resources
  • Target: Eliminate CSS/JS render blocking
  • Implementation: Async loading, code splitting

Wolne czasy ładowania zasobów

  • Solution: Image optimization, CDN, compression
  • Target: Hero image < 2.5s load time
  • Tools: Image compression, WebP format, responsive images

First Input Delay (FID) – optymalizacja

FID mierzy responsywność strony na pierwszą interakcję użytkownika. Kluczowe dla doświadczenia użytkownika na urządzeniach mobilnych:

Długi czas blokowania głównego wątku

  • Solution: Code splitting, async loading, web workers
  • Target: Main thread blocking < 50ms
  • Tools: Performance profiler, React Profiler

Ciężkie wykonywanie JavaScript

  • Solution: Reduce JS payload, defer non-critical code
  • Target: < 170KB JavaScript gzipped
  • Strategy: Progressive enhancement, feature detection

Cumulative Layout Shift (CLS) – optymalizacja

CLS mierzy stabilność wizualną strony. Na urządzeniach mobilnych każdy "skok" elementów jest szczególnie irytujący:

Obrazy bez wymiarów

  • Solution: Zawsze określ width i height dla obrazów
  • Target: Aspect ratio preservation
  • Implementation: CSS aspect-ratio, placeholder containers

Reklamy, osadzenia bez zarezerwowanego miejsca

  • Solution: Reserved space dla dynamicznych elementów
  • Target: No layout shift from dynamic content
  • Strategy: Skeleton screens, loading placeholders

Monitorowanie Core Web Vitals w produkcji

Google Search Console

Najlepsze narzędzie do monitorowania na poziomie całej witryny:

  • Core Web Vitals report
  • Field data z realnych użytkowników
  • URL-by-URL analysis
  • Trend analysis w czasie

Monitorowanie rzeczywistych użytkowników (RUM)

Implementacja własnego monitoringu:

  • Web Vitals JavaScript library
  • Analytics integration (GA4, custom solutions)
  • Real-time alerting dla poor performance
  • A/B testing dla optimization impact

Monitorowanie i testowanie wydajności

Optymalizacja to nie jednorazowy proces, ale ciągłe działanie. Regularne monitorowanie pozwala wykrywać regresje i optymalizować nowe funkcjonalności już na etapie tworzenia.

Automatyczne monitorowanie w CI/CD

Lighthouse CI

Integracja Lighthouse z procesem wdrażania:

  • Automated performance budgets
  • Regression detection w PR reviews
  • Historical performance tracking
  • Team notifications o performance issues

Budżety wydajności w webpack

Ustaw limity rozmiaru pakietu:

  • JavaScript: < 170KB gzipped
  • CSS: < 50KB gzipped
  • Images: < 100KB per page
  • Total transfer: < 500KB first load

Monitorowanie rzeczywistych użytkowników (RUM)

Biblioteka JavaScript Web Vitals

Implementacja monitoringu w produkcji:

  • Collection Core Web Vitals data
  • Segmentacja po device/browser
  • Correlation z business metrics
  • Real-time alerting dla degradation

Niestandardowe śledzenie wydajności

Dodatkowe metryki biznesowe:

  • Time to Interactive dla krytycznych user journeys
  • Conversion rate correlation z performance
  • Bounce rate vs. load time analysis
  • Mobile vs. desktop performance comparison

Strategie testowania

Macierz testowania urządzeń

Testuj na różnych kombinacjach:

  • iOS (Safari) + Android (Chrome)
  • 3G, 4G, WiFi connection speeds
  • Low-end devices (2GB RAM, older processors)
  • Different screen sizes i aspect ratios

Testy syntetyczne

Regularne testy w kontrolowanych warunkach:

  • WebPageTest multi-location testing
  • GTmetrix comprehensive analysis
  • Pingdom performance monitoring
  • Uptime monitoring z performance metrics

Narzędzia do analizy i optymalizacji

Skuteczna optymalizacja wymaga odpowiednich narzędzi. Poniżej lista najważniejszych narzędzi do analizy, testowania i implementacji optymalizacji zasobów krytycznych.

Narzędzia do analizy wydajności

Google PageSpeed Insights

Podstawowe narzędzie do analizy wydajności:

  • Field data z Chrome User Experience Report
  • Lab data z Lighthouse analysis
  • Konkrete recommendations z impact scores
  • Core Web Vitals scoring

Chrome DevTools

Zaawansowane narzędzia dla deweloperów:

  • Performance tab – detailed waterfall analysis
  • Coverage tab – unused CSS/JS identification
  • Lighthouse – integrated audit tool
  • Network throttling – simulation różnych connection speeds

WebPageTest

Najbardziej zaawansowane narzędzie do testowania:

  • Multi-location testing z real browsers
  • Video comparison – side-by-side page load visualization
  • Filmstrip view – frame-by-frame loading analysis
  • Custom test scenarios – form interactions, JavaScript execution

Narzędzia do optymalizacji

Generatory CSS krytycznego

  • Critical by Addy Osmani: Python tool, excellent accuracy
  • CriticalCSS.com: Online service, API available
  • PurifyCSS: CSS unused selectors removal
  • Critical: Node.js CLI tool

Optymalizacja obrazów

  • Squoosh: Google's image compression tool
  • TinyPNG: Bulk image compression service
  • ImageOptim: Mac application z batch processing
  • Sharp: Node.js library dla programmatic optimization

Narzędzia budowania i bundlery

  • Webpack: Industry standard, extensive plugin ecosystem
  • Rollup: Lightweight, great dla library bundling
  • Parcel: Zero-configuration, ultra-fast builds
  • Vite: Next-generation tooling, native ES modules

Monitorowanie i alerty

Narzędzia do budżetowania wydajności

  • Lighthouse CI: Automated performance regression testing
  • Webpack Bundle Analyzer: Visualize bundle composition
  • Bundlephobia: Analyze npm package sizes
  • size-limit: CLI tool dla bundle size budgets

Monitorowanie rzeczywistych użytkowników

  • Web Vitals JavaScript library: Google's official RUM library
  • New Relic: Full-stack monitoring z performance insights
  • Datadog: Infrastructure + application monitoring
  • Sentry: Error tracking z performance metrics

Podsumowanie – plan wdrożenia optymalizacji

Optymalizacja zasobów krytycznych dla wersji mobilnej to złożony proces, ale systematyczne podejście gwarantuje znaczącą poprawę wydajności i doświadczenia użytkownika.

Mapa wdrożenia (30 dni)

Tydzień 1: Analiza i punkt wyjścia

  • Przeprowadź audyt wydajności z PageSpeed Insights
  • Zidentyfikuj największe bottlenecky (LCP, FID, CLS)
  • Ustaw pomiary wyjściowe
  • Zamów narzędzia monitorowania (RUM, alerty)

Tydzień 2: CSS krytyczny i optymalizacja zasobów

  • Implementuj CSS krytyczny dla treści widocznej bez przewijania
  • Optymalizuj i kompresuj wszystkie obrazy
  • Wdróż opóźnione ładowanie dla obrazów i treści
  • Skonfiguruj kompresję Gzip/Brotli na serwerze

Tydzień 3: JavaScript i optymalizacja czcionek

  • Zaimplementuj dzielenie kodu dla JavaScript
  • Optymalizuj ładowanie czcionek (WOFF2, wstępne ładowanie)
  • Dodaj async/defer dla non-critical scripts
  • Implementuj delegację zdarzeń

Tydzień 4: CDN i monitorowanie

  • Skonfiguruj CDN dla globalnych użytkowników
  • Ustaw budżety wydajności w procesie budowania
  • Implementuj automatyczne monitorowanie
  • Testuj i optymalizuj na real devices

Metryki sukcesu i KPIs

Cele Core Web Vitals

  • LCP: < 2.5 seconds (75th percentile)
  • FID: < 100 milliseconds (75th percentile)
  • CLS: < 0.1 (75th percentile)
  • PageSpeed Score: > 90 mobile, > 95 desktop

Metryki biznesowe

  • Bounce rate: Redukcja o 15-25%
  • Conversion rate: Wzrost o 10-20%
  • Session duration: Wzrost o 20-30%
  • Mobile traffic share: Lepsze pozycje w mobile search

Strategia długoterminowego utrzymania

Ciągła optymalizacja

  • Tygodniowe przeglądy wydajności: Sprawdzaj trendy Core Web Vitals
  • Miesięczne sprinty optymalizacyjne: Wdrażaj nowe techniki
  • Kwartalne audyty technologiczne: Aktualizuj frameworki, narzędzia
  • Roczna strategia wydajności: Planowanie długoterminowe

Szkolenie zespołu

  • Szkolenie z budżetowania wydajności: Cały zespół rozumie limity
  • Regularne dzielenie się wiedzą: Najnowsze techniki optymalizacji
  • Mindset wydajności na pierwszym miejscu: Włącz wydajność do definicji ukończenia zadania
  • Szkolenia zewnętrzne: Konferencje, kursy, certyfikaty

Końcowe przemyślenia

Optymalizacja zasobów krytycznych dla wersji mobilnej to nie jednorazowe zadanie, ale ciągły proces doskonalenia. Każda sekunda poprawy w ładowaniu może przekładać się na realne korzyści biznesowe – wyższe pozycje w wyszukiwarkach, lepsze wskaźniki konwersji i zadowoleni użytkownicy.

Pamiętaj – mobile-first to nie trend, to standard. W świecie, gdzie większość ruchu internetowego pochodzi z urządzeń mobilnych, optymalizacja pod kątem urządzeń mobilnych nie jest opcjonalna, ale absolutną koniecznością.

Zacznij od audytu, ustaw konkretne cele i realizuj plan krok po kroku. Twoi użytkownicy (i Google) będą wdzięczni za każdą sekundę oszczędzoną podczas ładowania.

Potrzebujesz pomocy w optymalizacji wydajności swojej strony mobilnej? Chętnie przeprowadzimy kompleksowy audyt i wdrożymy optymalizacje zasobów krytycznych, które znacząco przyspieszą ładowanie na urządzeniach mobilnych. Skontaktuj się z nami, aby uzyskać profesjonalne wsparcie w optymalizacji.