5 zásad, jak zrychlit GraphQL dotazy a nezabít server

Z Mazovia

Největší problém bývá na přechodu mezi podlahou, stěnami a velkým nábytkem. Tmavá podlaha, světlé stěny a tmavá sedačka bez barevného mezičlánku vytvoří ostrý kontrast, který místnost rozdělí na dvě poloviny. Řešení je jednoduché: přidejte koberec v odstínu, který leží mezi barvou podlahy a sedačky, a na stěnu pověste obraz s podobným tónem. Tím se přechod změkčí, aniž byste měnili nábytek. Stejný princip použijte u polic a knihoven – jejich barva by měla vycházet z podlahy, ne ze stěn, jinak budou „plavat" ve vzduchu.

Jak sladit dvě barvy, aniž by vznikl cha

Když se zařízení přes Bluetooth neobjeví, většina lidí začne vypínat a zapínat telefon nebo počítač. To občas pomůže, ale často je problém jinde. Než začnete cokoli reinstalovat, zkontrolujte tři věci, které selhávají nejčastěji: párovací režim, vzdálenost a stav nabití. Sluchátka, reproduktory i hodinky mají režim párování, který se aktivuje jen na několik sekund po zapnutí nebo dlouhým podržením tlačítka. Pokud ho nevyvoláte, zařízení se prostě neohlásí.

Další častá chyba je umístění. Pohovka postavená na přímém slunci nebo u radiátoru rychle ztrácí pevnost potahu i pěny. Pokud stojí na koberci s dlouhým vlasem, mechanismus se zanáší prachem a vlasy. Prach je nepřítel číslo jedna – stačí ho jednou za čas vysát štěrbinovou tryskou, ale málokdo to dělá. Stejně tak když teenager jí na pohovce, drobky se dostanou do kolejnic a rozkládání začne vázat.

Další chyba: ignorování hloubky a komplexity dotazu. Klient pošle dotaz, který rekurzivně prochází vztahy dokola. GraphQL sám o sobě limity nemá. Musíte zavést pravidla: maximální hloubka (např. 7 úrovní), maximální počet položek v seznamu (např. 100) a váhové skóre. To se počítá před spuštěním resolverů. Knihovny jako graphql-query-complexity to umí. Bez toho se server snadno položí.

Nezapomínejte na sledování výkonu. Zapněte tracing – Apollo Studio, GraphQL Yoga nebo OpenTelemetry. Sledujte p95 a p99 latence jednotlivých resolverů. Odhalíte tak pomalé části. Dále logujte dotazy, které překročí limit. Často zjistíte, že jeden klient posílá příliš agresivní dotazy. Pak stačí s ním komunikovat a upravit schéma nebo přidat pole s argumenty pro stránkování.

GraphQL v roce 2026 není novinka, ale mnoho týmů stále řeší pomalé dotazy a přetížené servery. Častý problém: resolver načítá data v cyklu, každý záznam zvlášť. To se projeví jako N+1 dotaz. Řešení je DataLoader – dávkové načítání klíčů v jednom kole. Implementujte ho pro každý typ, kde hrozí opakované dotazy. Není to složité, ale vyžaduje disciplínu: jeden DataLoader na entitu, konzistentní klíče.

První konkrétní příznaky přicházejí nenápadně. Přestanete cítit prsty na rukou, i když si je mnoho lidí snaží zahřát v kapsách. Špičky prstů zbělají nebo zfialoví. Následuje nekontrolovatelné chvění, které nejde zastavit vůlí. Člověk přestává být spolehlivý v jemné motorice: nejde mu zapnout zip, otevřít termosku, zavázat tkaničku. To je okamžik, kdy už nejde o pohodlí, ale o bezpečnost.

Jak nastavit limity a cache Limity nestačí nastavit, musí se vynutit. Na úrovni middleware odmítněte dotazy překračující váhu nebo hloubku s chybou 400. Zvažte i timeout na jeden resolver – pokud trvá déle než 2 sekundy, přerušte ho. Dále používejte perzistentní dotazy (persisted queries). Klient pošle hash místo celého dotazu. Server tak zná předem schválené dotazy a může je cachovat. To snižuje režii na parsování a validaci.

Cacheování v GraphQL je složitější než v REST. Nepoužívejte cache na úrovni HTTP slepě. Místo toho cachujte na úrovni resolveru nebo DataLoaderu. Krátká TTL (např. 5 sekund) pro dynamická data, delší pro statická. Pozor na autentizaci: cache klíč musí obsahovat ID uživatele nebo roli, jinak dojde k úniku dat. Typická chyba je sdílená cache pro všechny bez rozlišení oprávnění.

Na závěr: GraphQL optimalizace není jednorázová akce. Pravidelně revidujte schéma, odstraňujte nepotřebná pole a přidávejte indexy do databáze podle skutečných dotazů. Vyhněte se tomu, abyste do resolveru psali složitou logiku – tu patří do servisní vrstvy. A vždy testujte změny zátěží, ne jen jednotkovými testy. Výkon se nezlepší sám.