Wstęp
Prowadzisz SaaS i wydaje Ci się, że wszystko działa? Użytkownicy się logują, ale po tygodniu odchodzą? Często winowajcą jest nie frontend, nie serwer, a API – cichy zabójca konwersji. W praktyce JurskiTech widzieliśmy SaaSy, które traciły 40% użytkowników tylko przez opóźnienia w odpowiedziach API. W tym artykule pokażę 3 błędy, które popełniają nawet doświadczeni CTO, i jak je naprawić, aby Twoja aplikacja działała jak burza.
1. Zbyt wiele zapytań – problem N+1
Co to takiego?
Błąd N+1 to klasyk – pobierasz listę użytkowników (1 zapytanie), a potem dla każdego z nich wykonujesz osobne zapytanie o szczegóły (N zapytań). Efekt? 100 użytkowników = 101 zapytań, a dla 1000 – 1001. To zabija czas odpowiedzi.
Przykład
Widzieliśmy aplikację CRM, która ładowała dashboard przez 8 sekund. Przyczyna? Dashboard pobierał listę klientów, a następnie dla każdego klienta – jego zamówienia, notatki, aktywność. Wystarczyło eager loading i jedno zapytanie JOIN, aby skrócić czas do 0,5 sekundy.
Rozwiązanie
Użyj eager loading (np. w ActiveRecord: .includes(:orders)), optymalizuj zapytania przez JOIN lub GraphQL, który pozwala pobrać dokładnie to, co potrzebne w jednym żądaniu.
2. Brak paginacji i filtrowania po stronie API
Problem
Endpoint zwraca wszystkie rekordy naraz – nawet jeśli frontend wyświetla tylko 10. W przypadku 10 000 rekordów API wysyła megabajty danych, które są ignorowane. To marnuje przepustowość i wydłuża czas odpowiedzi.
Przykład
Startup fintechowy miał endpoint GET /transactions, który zwracał wszystkie transakcje użytkownika (nawet 200 000). Ładowanie zajmowało 10 sekund. Dodanie parametrów limit i offset skróciło czas do 200 ms.
Rozwiązanie
Zaimplementuj paginację (cursor lub offset), filtrowanie po stronie API i sortowanie. Niech baza danych robi ciężką pracę, a nie frontend.
3. Brak cache’owania często żądanych danych
Dlaczego to błąd?
Każde zapytanie do bazy to koszt. Jeśli 1000 użytkowników pyta o listę produktów, a te zmieniają się co godzinę, to można cache’ować odpowiedź przez 5 minut. Bez tego baza jest przeciążona, a API wolne.
Przykład
Platforma e-learningowa miała listę kursów, która zmieniała się rzadko. Brak cache’owania powodował, że przy 5000 zapytań na minutę baza osiągała 100% CPU. Wdrożenie Redis cache skróciło czas odpowiedzi z 2 s do 20 ms.
Rozwiązanie
Użyj pamięci podręcznej (Redis, Memcached) dla endpointów, które nie zmieniają się często. Ustaw TTL (time-to-live) adekwatny do częstotliwości zmian. Pamiętaj o inwalidacji cache przy aktualizacjach.
Podsumowanie
Wydajne API to podstawa user experience w SaaS. Błędy N+1, brak paginacji i cache’owania to trzy najczęstsze problemy, które widzimy w audytach. Oczywiście jest ich więcej (np. brak indeksów, nieefektywne serializery), ale te trzy są najłatwiejsze do naprawy i dają największy efekt. Jeśli Twój SaaS traci użytkowników – zacznij od audytu API. Często wystarczy kilka zmian, aby konwersja wzrosła o kilkadziesiąt procent. A jeśli potrzebujesz pomocy – w JurskiTech mamy w tym doświadczenie.


