Když GraphQL dotazy zůstanou neoptimalizované, platíte latenci
Na čtení v posteli volte 2700 až 3000 K, tedy teplou bílou. Je dostatečně jasná, aby oči netrpěly, ale ne tak modrá, aby vás aktivovala. Světlo veďte na knihu, ne do očí – použijte nástěnné svítidlo s otočným ramenem nebo stojací lampu s krytem. Na usínání a noční probouzení je nejlepší jantarová barva kolem 1800 K. Ta nechá oči přivyknout tmě a neruší spánek. Pro partnerské chvíle se hodí růžovo-oranžový nádech, který vznikne kombinací teplé bílé a červeného stmívače.
Malá koupelna se nedá vyřešit nákupem dalších úložných boxů. Většina lidí začne tím, že někam nacpe plastové přihrádky, a po měsíci je prostor ještě nepoužitelnější. Rozdíl mezi funkční a nefunkční koupelnou není v metrech čtverečních, ale v tom, jak jsou rozmístěné jednotlivé zóny a kolik věcí zůstává na povrchu. Než cokoli koupíte, změřte si čtyři vzdálenosti: od umyvadla ke zdi, od sprchy k umyvadlu, šířku dveřního křídla a výšku od podlahy k umyvadlu. Bez těchto čísel skončíte s nábytkem, který se tam nevejde, nebo s policí, do které narazíte ramenem.
Co udělat, když se zařízení pořád neobjev
Podlaha rozhoduje o tom, jestli se na balkon dá vůbec vstoupit. Betonová dlažba v paneláku bývá studená a špinavá. Řešením je dřevěná rohož z lamely, která se položí volně na podlahu a dá se kdykoli zvednout a umýt. Nepoužívejte koberec – v dešti zůstane mokrý a začne plesnivět. Pokud chcete teplejší dojem, stačí pár dlaždic z kompozitu, které se jen položí na původní beton. Vyhněte se lepení čehokoli natrvalo, pronajímatelé to nemají rádi a odstranění je pak drahé.
Poslední věc: sledujte velikost odpovědi. Optimalizace dotazu je k ničemu, když klient stahuje megabajty zbytečných polí. Zapněte perspektivu, kde uvidíte, která pole se skutečně používají, a ta nepoužívaná ze schématu odstraňte. Deprekovat můžete postupně, ale mrtvá pole jen matou a zpomalují každý dotaz.
Na připravený povrch se nanese bonding a poté kompozitní lepidlo. Ortodontista umístí držák do přesné pozice podle šablony nebo podle oka a přitlačí ho. Přebytečné lepidlo se odstraní ještě před vytvrzením modrým světlem. Právě tady vzniká nejvíc chyb: držák může být nakloněný, příliš blízko okraje dásně nebo naopak vysoko u okraje zubu. Špatná pozice později znamená delší léčbu a častější návštěvy.
Nejčastější chyba je N+1 dotaz. Resolver pro pole `author` uvnitř seznamu článků zavolá databázi pro každý článek zvlášť. Řešení je DataLoader pro batchování a cachování v rámci jednoho requestu. DataLoader vytvořte v kontextu požadavku, ne globálně, jinak si předáváte data mezi uživateli. Stejný princip použijte pro jakýkoli zdroj – REST API, SQL i externí služby.
Hloubka a komplexita dotazu místo slepé důvěry GraphQL umožňuje klientovi sestavit libovolně hluboký dotaz. Bez omezení se snadno stane, že jeden request vygeneruje tisíce resolverů. Zaveďte limit hloubky (obvykle 7–10 úrovní) a analýzu komplexity, kde každému poli přiřadíte váhu. Knihovny jako graphql-depth-limit nebo graphql-query-complexity to zvládnou. Překročení vracejte jako chybu s jasnou zprávou, ne jako timeout, který klient nepochopí.
Většina týmů řeší výkon GraphQL až ve chvíli, kdy se na produkci objeví pomalé odpovědi. Přitom stačí pár návyků při psaní dotazů a návrhu schématu. Základ je měřit. Bez zapnutého trasování resolverů nepoznáte, který field spotřebovává čas. Apollo Studio, GraphQL Yoga s pluginem pro tracing nebo jednoduchý middleware s časovačem stačí. Zaměřte se na p99 latenci, ne na průměr – průměr schovává problémy.
Persistované dotazy jsou další krok. Místo posílání celého dokumentu pošle klient hash a server ho namapuje na uložený dotaz. Ušetříte přenos, ale hlavně získáte kontrolu nad tím, co se na serveru skutečně provozuje. Whitelist známých dotazů zabrání tomu, aby někdo poslal neomezený dotaz mimo vaše nástroje. V roce 2026 je to standard i u menších API.
Pozor na cache. GraphQL typicky jede přes POST, takže HTTP cache nefunguje. Řešení je CDN s podporou POST nebo přechod na GET pro čtecí dotazy s krátkými dokumenty. Na úrovni resolverů používejte cache s klíčem, který obsahuje všechny vstupní argumenty. Pokud pole závisí na uživateli, nezapomeňte ho zahrnout do klíče, jinak si podstrčíte cizí data.