Když GraphQL dotazy zůstanou těžkopádné, zaplatíte výkonem

Z Mazovia

Druhá chyba spočívá v podcenění měřítka. Vzdálenost na papíře nevypovídá nic o tom, kolik času zabere v terénu. Dva centimetry na mapě 1 : 25 000 znamenají půl kilometru, ale ten půl kilometr může být po vrstevnici, přes bažinu nebo strmým svahem. Řešení je jednoduché: než vyrazíte, spočítejte si nejen vzdálenost, ale i orientační čas podle typu terénu a převýšení. Bez toho plánujete podle čar, ne podle krajiny.

Hloubka a tvar rozhodují o pohodl

Vezměte si vlhkoměr a změřte relativní vlhkost v ložnici i přímo v úložném prostoru. Pokud je v místnosti dlouhodobě přes 60 %, řešte nejdřív místnost, ne postel. Pravidelně větrejte krátce a intenzivně, ideálně ráno a večer, místo celodenního mikroventilace. V zimě se vlhkost snižuje topením, v létě naopak pomůže cirkulace vzduchu ventilátorem. Bez tohoto kroku bude každý vysoušeč jen hasit následek.

Úložný box vypadá jako řešení, ale často se stane překážkou. Pokud ho postavíte před dveře nebo do úzkého průchodu, budete ho pokaždé obcházet a za měsíc ho stejně přesunete. Vybírejte nízké a úzké provedení, které se vejde pod parapet nebo pod lavici, a nikdy neblokujte odtokový otvor v podlaze. Voda po dešti nebo při mytí musí mít kudy odtéct, jinak vám začne prosakovat do bytu. Stejně tak nenechávejte box stát přímo u zdi, kde brání větrání.

Batchujte a kešujte na úrovni resolverů Nejčastější chyba je N+1 dotaz: načtete seznam položek a pak pro každou zvlášť dotáhnete související data. Řešením je batchovací vrstva, která sesbírá klíče z jednoho cyklu událostní smyčky a pošle jeden dotaz do databáze. V praxi to znamená použít dataloader nebo jeho ekvivalent a konzistentně ho volat ve všech resolverech, které pracují se seznamy. Pozor na to, že batchování bez správného klíče může míchat data mezi uživateli. Vždy přidávejte kontext oprávnění.

Základní kámen optimalizace je omezení hloubky a komplexity dotazu. GraphQL sám o sobě nehlídá, jak hluboko se klient ponoří. Bez limitu vám stačí jeden škodlivý dotaz a databáze se složí. Nastavte maximální hloubku na hodnotu, kterou vaše schéma reálně potřebuje, a přidejte výpočet komplexity podle násobení polí. Odmítněte dotazy nad limit ještě před spuštěním resolverů. Tím ušetříte práci, kterou byste jinak zahodili.

Do roku 2026 se jako standard prosadí takzvané persisted queries. Klient pošle pouze hash dotazu a server ho vyhledá ve schváleném seznamu. Tím zmizí riziko injekce i zbytečný parsing. Zavádějte to postupně: nejprve logujte, které dotazy se posílají, pak je zaregistrujte a teprve potom vynucujte. Typická chyba je zapnout vynucení okamžitě a rozbít starší klienty, kteří posílají dotazy dynamicky. Přechod plánujte na několik release cyklů.

Kešování v GraphQL není jen o HTTP cache. U dotazů, které se opakují, pomůže perzistentní cache na úrovni polí nebo výsledků resolverů. Klíč volte z argumentů a kontextu, ne z celého dotazu. Pokud kešujete moc hrubě, vrátíte zastaralá data; pokud moc jemně, cache nikdy nezabere. Osvědčuje se krátká expirace pro dynamická data a delší pro referenční číselníky. Vždy mějte možnost cache vypnout podle hlavičky požadavku.

Posledním krokem je zohlednit vlastní návyky. Kdo čte před spaním, potřebuje klidnější podklad, aby ho stěny nerozptylovaly. Kdo v ložnici jen spí, unese výraznější tón. Neexistuje univerzálně správná barva, existuje jen taková, která odpovídá světlu, vybavení a tomu, jak místnost skutečně používáte.

Nakonec se vyhněte dvěma častým omylům. První: optimalizovat jen databázi, i když úzké hrdlo je v serializaci odpovědi. Druhý: přidávat indexy bez měření, což zpomalí zápisy. GraphQL v roce 2026 není o magických nástrojích, ale o disciplíně v tom, co resolver skutečně dělá. Když budete měřit, omezovat a batchovat, udržíte latenci pod kontrolou i při růstu schématu.

Většina týmů řeší výkon GraphQL pozdě, až když se objeví první stížnosti na pomalé načítání. Přitom stačí sledovat dvě čísla: počet resolverů spuštěných na jeden dotaz a počet dotazů do databáze. Pokud první číslo roste rychleji než druhé, máte problém s over-fetchingem. Pokud roste druhé, chybí vám dataloader nebo batchování. Začněte měřením, ne odhadem.

Zvolený odstín ověřte i v noci. Vezměte si do ložnice lampu s teplým světlem a posviťte na vzorek. Některé barvy při žárovkovém světle zežloutnou nebo zezelenají. Pokud se odstín večer změní k nepoznání, hledejte dál. Barva, která vypadá dobře přes den, ale večer vytváří nepříjemný nádech, vám spánek nepomůže.

Praktické pravidlo zní: čím menší místnost, tím světlejší a méně nasycený odstín. Tmavé stěny opticky zmenšují prostor a v ložnici navíc působí těžce. Pokud přesto chcete tmavou barvu, použijte ji jen na stěnu za hlavou postele a zbytek nechte ve světlém tónu. Stejně tak se vyhněte čistě bílé – je studená a v kombinaci s umělým světlem může působit nemocničně. Lepší je zlomená bílá s nádechem šedé, béžové nebo zelené.