Rychlost, nebo úplnost: co rozhoduje u dotazů v GraphQL

Velikost se neřídí jen číslem, které dítě nosí v ponožkách. Vždy měřte vsedě i vestoje, protože noha se při zatížení prodlouží. Mezi špičkou prstů a koncem boty nechte asi 0,5 až 1 cm rezervu. Dítěti by neměla být bota těsná na šířku, ani by nemělo v botě plavat. Zkuste botu ohmatat – prsty byste měli cítit všechny prsty dítěte, ne jen jejich obrys. Pokud dítě při obouvání pláče nebo se snaží botu kopat, pravděpodobně je příliš úzká nebo tvrdá.<br> <br> <br> <br> Problém N+1 a jak ho poznat dřív než uživatel Nejčastější chyba je N+1 dotaz. Resolver pro každý objekt v seznamu zavolá databázi zvlášť. U stovky položek to znamená sto dotazů místo jednoho. Řešením je dávkování a cache na úrovni jednoho požadavku. Načtěte všechny potřebné identifikátory najednou a výsledky seskupte. Pokud používáte datový loader, nastavte mu správný rozsah. Loader, který žije celou dobu běhu aplikace, drží data příliš dlouho a vrací zastaralé hodnoty. Loader na jeden požadavek je bezpečnější.<br> <br> <br> <br> První chyba je spoléhání na vzdálenost místo na orientační body. Člověk si řekne „po téhle cestě asi tři kilometry" a přestane sledovat okolí. Jenže vzdálenost v metrech nebo krocích je na mapě jen číslo; v realitě ji nikdo neměří přesně. Mnohem spolehlivější je vázat postup na konkrétní tvary: výrazný ohyb cesty, soutok potoků, skalní hranu, změnu porostu. Když po pár stech metrech žádný z těchto bodů nepřijde, něco nesedí a je čas zastavit a zkontrolovat pozici.<br> <br> <br> <br> Hotový růžový olej použijete v domácí kosmetice několika způsoby. Jako samostatný olej na pleť po koupeli, kdy stačí pár kapek vmasírovat do vlhké pokožky. Přidáním do domácího peelingu z cukru a oleje získáte jemný prostředek na tělo. V masážní směsi ho zkombinujte s jojobovým olejem a pár kapkami vitamínu E. Pro noční péči o pleť smíchejte lžičku růžového oleje s lžičkou rakytníkového oleje a naneste na vyčištěnou pleť. Olej je vhodný i na konečky vlasů, které zjemní a provoní.<br> <br> <br> <br> <br> <br> <br> <br> Typická chyba je kupovat sestavu bez rozmyslu, co do ní skutečně uložíte. Vysoká skříň na kabáty je zbytečná, pokud nosíte jen bundy, které se věší na háčky. Naopak otevřený věšák s policemi vypadá vzdušně, ale v předsíni se rychle změní v hromadu věcí, které nemají své místo. Pro každou kategorii věcí si určete, kde bude bydlet: boty, svrchní oblečení, klíče a peněženky, tašky a batohy. Když pro některou není místo, systém ji bude vršit na jednu hromadu.<br> <br> <br> <br> Pozor na rekurzivní resolvery. GraphQL dovoluje vnořovat pole do sebe a bez omezení vznikne nekonečný cyklus. Hloubková kontrola musí být součástí validace dotazu, ne až v resolveru. Stejně tak je potřeba hlídat, kolik uzlů dotaz zpracuje. Server, který přijme dotaz s tisíci vnořenými objekty, spotřebuje veškerou paměť dřív, než začne cokoli vracet.<br> <br> <br> <br> Základem je omezit hloubku a složitost dotazů. Nastavte maximální hloubku vnoření a maximální počet polí, která může jeden dotaz obsahovat. Klient, který požaduje deset úrovní vnoření, obvykle nepotřebuje data, ale snaží se obcházet návrh schématu. Stejně důležité je sledovat, kolik objektů se vrací. Dotaz, který vrací seznam bez limitu, je časovaná bomba. Vynuťte stránkování už na úrovni schématu, ne až v resolveru.<br> <br> <br> <br> GraphQL umožňuje klientovi říct přesně, jaká data chce. To je výhoda i past. Server totiž musí umět odpovědět na libovolnou kombinaci polí a vnoření, kterou klient pošle. Pokud se o to nestaráte, jeden dotaz dokáže vytáhnout celou databázi do paměti. Optimalizace v roce 2026 neznamená psát méně polí, ale kontrolovat, co se na pozadí skutečně vykoná. Prvním krokem je měřit. Bez měření nepoznáte, který dotaz je pomalý, a budete zbytečně optimalizovat místa, která nic neřeší.<br> <br> <br> <br> Optimalizace není jednorázová akce. Dotazy se mění s tím, jak se vyvíjí klient. Co bylo rychlé loni, může být pomalé letos. Sledujte proto dobu odpovědi podle jednotlivých polí a porovnávejte ji v čase. Když se zpomalí jedno pole, poznáte to dřív, než si toho všimnou uživatelé. GraphQL vám dává přesnost, ale jen když ji používáte vědomě.<br> <br> <br> <br> Cache je užitečná, ale jen když víte, co se v ní může změnit. Data, která se mění každou sekundu, nemá smysl ukládat na dlouho. Naopak statické číselníky a konfigurace se vyplatí držet v paměti. Rozlišujte cache podle typu dotazu, ne podle názvu pole. Pole se stejným názvem může v různých kontextech vracet jiná data.