Pozor také na to, že samotné omezení hloubky nestačí. Dva dotazy se stejnou hloubkou mohou mít velmi odlišnou cenu — jeden vrací tři pole, druhý tisíce položek. Proto se vyplatí zavést vlastní výpočet složitosti, kde každé pole má přiřazenou váhu a seznamy násobí. Tento výpočet se pak používá pro ochranu backendu i pro rozhodování, zda dotaz povolit.
Typická chyba je nakoupit pět základních kusů ve stejné barvě, jen v různých odstínech. Černá, tmavě šedá a uhlová vypadají na první pohled jako bezpečná volba, ale dohromady působí jako omyl. Druhá častá chyba je přeskočit světlý neutrál. Bez něj je šatník těžký, tmavý a každá kombinace vypadá stejně. Třetí chyba: koupit výraznou barvu, která se nehodí k ničemu, co už máte. Pak ji nosíte dvakrát za rok a zabírá místo.
Jak nastavit cílovou částku, aby vás nezaskočila reali
Řešením není omezovat klienta, ale dávkovat načítání. Místo okamžitého dotazu do databáze se požadavky na stejný typ dat sesbírají během jednoho cyklu vykonávání a odešlou jako jeden dotaz s klauzulí IN. V JavaScriptovém ekosystému to řeší nástroje pro batch loading, v jiných jazycích se používá stejný princip ručně. Klíčové je pochopit, že dávkování musí být navázáno na kontext jednoho požadavku, ne na globální stav. Jinak si klienti navzájem míchají data a vznikají těžko reprodukovatelné chyby.
Plánování není o dokonalém seznamu, ale o opakování jednoduchého postupu: zkontrolovat zásoby, naplánovat jídla, koupit menší množství, hned roztřídit a během týdne dorovnat stav. Kdo to vydrží tři až čtyři týdny, obvykle zjistí, že vyhazuje výrazně méně a že cesta do obchodu je kratší a klidnější.
Největší problémy s výkonem GraphQL v praxi nezpůsobuje samotný jazyk dotazů, ale to, jak resolver vrátí data pro každý objekt zvlášť. Typický scénář: klient požádá o seznam položek a u každé chce informaci o autorovi nebo kategorii. Naivní resolver zavolá databázi jednou pro seznam a pak znovu pro každou položku. U stovky záznamů vznikne stovka dotazů, které server zvládne, ale u tisíců se odezva zhroutí. Tento jev se označuje jako N+1 a je nejčastější příčinou pomalých GraphQL API.
Druhým signálem je, že rozhovor u stolu vyžaduje zvýšený hlas. V přehnaně odrazivé místnosti roste hluková hladina, takže všichni postupně mluví nahlas, aby se slyšeli. Zkuste si sednout na opačné konce místnosti a mluvit normálním tónem. Pokud si nerozumíte, aniž byste křičeli, je to jasný důkaz. Náprava neznamená jen dokoupit jeden panel – důležité je pokrýt více ploch, nejen jednu stěnu.
Nakonec myslete na to, že spoření na cestu nekončí odjezdem. Během cesty si veďte jednoduchý přehled výdajů, klidně v poznámkách v telefonu. Drobné útraty se rychle nasčítají a mohou rozvrátit i dobře připravený rozpočet. Rezervu mějte vždy stranou na neočekávané situace, jako je zmeškaný spoj nebo náhlé zdravotní potíže. Kdo plánuje pružně a kontroluje tok peněz, ten nakonec ušetří nejvíc – a to i bez kompromisů v zážitcích.
Dalším praktickým krokem je flexibilita v termínech. Ceny dopravy a ubytování se mění podle dne v týdnu i ročního období. Pokud můžete cestovat mimo hlavní sezónu nebo uprostřed týdne, ušetříte často i třetinu nákladů. Sledujte cenové trendy několik týdnů předem a nastavte si upozornění na změnu ceny. Neobjednávejte ale hned první nabídku – srovnejte alespoň tři různé termíny.
Poslední oblastí je sledování provozu. Bez měření se optimalizace dělá naslepo. Zaznamenávejte dobu trvání jednotlivých resolverů, počet databázových dotazů na jeden požadavek a nejčastější tvary dotazů. Teprve podle těchto dat se rozhodujte, co přepsat jako první. Typický výsledek po zavedení dávkování a limitů je několikanásobné zkrácení odezvy bez jakékoli změny na straně klienta.
Začněte tím, že si vytvoříte samostatný účet nebo virtuální peněženku jen pro cestování. Automatický převod malé částky každý týden udělá víc než jednorázové odkládání zbytku výplaty. Klíčové je nastavit převod tak, aby proběhl hned po příjmu peněz, ne až na konci měsíce. Tím se vyhnete pokušení utratit tyto prostředky za běžné výdaje.
Ukládání do mezipaměti bývá přeceňované. GraphQL má jediný endpoint a často POST, takže běžné HTTP cache nefungují. Pomůže až cache na úrovni resolverů nebo normalizovaná cache na klientovi. Na serveru se osvědčuje krátkodobé uložení výsledků drahých dotazů podle hashe vstupu včetně parametrů. Nesmí se ale cachovat data, která závisí na oprávněních uživatele, jinak dojde k úniku informací mezi účty.