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

Aus Rettungsdienst-Wiki
Zur Navigation springen Zur Suche springen

Nejčastější chyba je nechat AI vymyslet detaily. Model rád doplní číslo, datum nebo jméno, aby věta zněla lépe. Tyto údaje pak nemusí být pravdivé. Vždy si je zkontrolujte a nahraďte skutečností. Stejně tak platí, že AI má tendenci psát stejně jako všechny ostatní texty, které kdy viděla. Vzniká takzvaný průměrný styl: dlouhá souvětí, opatrné formulace, žádný názor. Tomu se vyhnete tak, že do textu vložíte vlastní hodnocení. Napište, co bylo špatně, co byste udělali jinak, co vás překvapilo.

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ě.

Jak poznat správně vykynuté těs

Klasická zubní nit se pod drátem protáhne jen s obtížemi a často se třepí. Lepší je superfloss s tuhým koncem, který provléknete pod obloukem, nebo mezizubní kartáček ve velikosti, která těsně vyplní mezeru mezi zubem a zámečkem. Mezizubní kartáček musí projít lehce, nesmí drhnout. Pokud se zasekává, zvolte menší velikost. Čistěte i vnitřní stranu zubů a plochy za posledními stoličkami, kde se drží nejvíc plaku. Bez tohoto kroku vzniká bílý povlak a zubní kaz i při sebelepším čištění zepředu.

Praktický tip: fotografujte si popisky i s inventárním číslem. Doma si pak dohledejte, zda se stejný předmět neobjevuje v jiné sbírce. Často zjistíte, že dvě muzea popisují stejný typ nástroje odlišně a jedno z nich vychází jen z ústního podání. Typická chyba je také spoléhat na jediný zdroj, ať už jde o knihu, nebo průvodce. Ověřujte alespoň dva nezávislé prameny, ideálně jeden hmotný a jeden písemný.

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ší.

Po upečení buchty ihned potřete rozpuštěným máslem a nechte vychladnout na mřížce. Nikdy je nepřikrývejte hned, zvlhnou a ztratí křehkost. Koláče nechte na plechu 5 minut, pak je přendejte na mřížku. Těsto můžete připravit večer a nechat v lednici do rána. Druhý den je ještě lepší, protože se rozvine chuť másla i rumu. Pokud chcete mít jistotu, že těsto vykyne i v chladnější kuchyni, postavte mísu do větší nádoby s teplou vodou a přikryjte ji utěrkou.

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.

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ší.

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.

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.