Proč GraphQL dotazy zpomalují aplikaci a co s tím dělat?
Materiál ovlivňuje, jak látka padne, a tím i celkový dojem. Těžké sametové závěsy působí reprezentativně, ale k lehkému skandinávskému nábytku mohou být příliš. Len a bavlna jsou univerzální, dobře se žehlí a přirozeně tlumí světlo. Syntetické směsi drží tvar a méně se mačkají, ale mohou působit chladněji. Vždy zkontrolujte, jak látka vypadá na šířku okna, ne jen na malém vzorku – struktura se při zvětšení může jevit úplně jinak.
Oddělení kójí versus jeden velký prost
Těsto přikryjte čistou utěrkou a nechte kynout na teplém místě bez průvanu, ideálně při 25 až 28 °C. Objem by se měl zdvojnásobit, což trvá zhruba hodinu. Prstem udělejte do těsta důlek: pokud se vrátí pomalu, je akorát. Když se nevrátí vůbec, těsto překynulo a buchty budou po upečení sušší. Pokud se vrátí okamžitě, nechte ho ještě patnáct minut.
Kde hledat příčinu, než začne vařit hla
Základním pravidlem je vyhnout se N+1 dotazům. Jakmile resolver pro pole vrací data pro každý prvek seznamu zvlášť, počet dotazů do databáze roste lineárně s velikostí výsledku. Řešením je dávkování a cachování – typicky přes DataLoader nebo obdobný mechanismus, který sesbírá klíče z jednoho tiku event loopu, provede jeden dotaz s podmínkou IN a výsledky rozdělí zpět. Bez tohoto kroku nemá smysl řešit cokoli dalšího.
Většina týmů začne s GraphQL jako s jednoduchou náhradou RESTu. Schéma roste, klient si řekne o přesně ta pole, která potřebuje, a zdánlivě není co řešit. Jenže po pár měsících produkce se objeví dotazy, které trvají stovky milisekund, databáze je přetížená a server tráví většinu času rozbalováním vnořených objektů. Problém nebývá v GraphQL samotném, ale v tom, jak se resolvery a datové vrstvy poskládaly dohromady.
Nakonec si všimněte teploty světla. Kov pod teplým světlem žloutne, dřevo pod studeným šedne. Pokud máte v obývacím pokoji dvě různé teploty světla, dřevo i kov budou vypadat jinak v každé části místnosti. Sjednoťte teplotu světelných zdrojů alespoň v jedné zóně a rozdíl mezi materiály se vyrovná sám. Harmonický design nakonec není o tom, co je kde, ale o tom, zda oba materiály sdílejí stejnou logiku — stejný rytmus, stejnou míru lesku a stejný vztah k prostoru kolem sebe.
Hloubka, komplexita a limity, které se nesmí podcenit Veřejné GraphQL API musí mít nastavené limity. Počítejte hloubku vnoření, počet polí a celkovou komplexitu dotazu ještě před jeho spuštěním. Dotaz, který projde validací, ale rekurzivně prochází celý graf, umí položit server spolehlivě. Komplexitní skóre se nastavuje podle nákladů jednotlivých polí a překročení se odmítá chybou. Stejně důležité je omezit velikost stránky u seznamů – bez výchozího a maximálního limitu si klient snadno vyžádá celou tabulku.
Kde dřevo a kov skutečně sousedí Rozhodující nejsou velké plochy, ale místa dotyku. Konferenční stolek s kovovou podnoží a dřevěnou deskou, jídelní židle s kovovou konstrukcí a dřevěným sedákem, police s ocelovými konzolami a dubovými policemi. Právě tam se rozhoduje, zda celek působí záměrně, nebo náhodně. Cílem je, aby se každý materiál objevil alespoň dvakrát až třikrát v různých měřítcích: velká dřevěná plocha, menší dřevěný doplněk, drobný kovový detail. Opakování vytváří řád, jednotlivý kus působí jako omyl.
Když se v obývacím pokoji potkává dřevo s kovem, nejde o to, který materiál vyhraje, ale v jakém poměru se potkají. Dřevo přináší teplo, měkkost a přirozenou nepravidelnost, kov chlad, ostrost a přesnost. Pokud jeden z nich výrazně převáží, místnost působí buď mdle, nebo sterilně. Jako vodítko používejte pravidlo, že kov má tvořit menšinu plochy — stačí mu přibližně pětina až třetina viditelných povrchů. Zbytek nechte dřevu a neutrálním materiálům, jako je textil, kámen nebo omítka.
Typická chyba je nahromadění příliš mnoha odstínů kovu v jedné místnosti. Mosaz, chrom, černý lak a nerez v jednom prostoru se navzájem oslabují a výsledek vypadá jako výprodej. Vyberte dva kovy, maximálně tři, a držte se jich i u klik, rámů obrazů, nožiček nábytku a osvětlení. Stejně tak nefunguje kombinace leštěného a matného povrchu ve stejné rovině bez důvodu — lesk přitahuje pohled, mat zklidňuje. Rozmístěte je podle toho, co chcete zvýraznit.
Nezapomínejte měřit. Sledujte latenci jednotlivých resolverů, počet databázových dotazů na jeden požadavek a podíl dotazů, které narazí na limit komplexity. Bez těchto čísel se optimalizace zvrhne v hádání. A ještě jedna věc: sledujte, jak se chová schéma při změnách. Přidání pole, které vypadá nevinně, dokáže zdvojnásobit náklady existujících dotazů, pokud se dotýká stejné datové vrstvy.